diff --git a/test/gherkin/Dockerfile b/test/gherkin/Dockerfile deleted file mode 100644 index 98e2b49..0000000 --- a/test/gherkin/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM python:3.8 - -COPY requirements.txt /requirements.txt - -RUN pip install -r /requirements.txt - -COPY . /tests - -WORKDIR /tests/ - -CMD ["behave"] \ No newline at end of file diff --git a/test/gherkin/assets/Default_Cover_Image.jpg b/test/gherkin/assets/Default_Cover_Image.jpg deleted file mode 100644 index d8d5e4c..0000000 Binary files a/test/gherkin/assets/Default_Cover_Image.jpg and /dev/null differ diff --git a/test/gherkin/assets/Sports.jpg b/test/gherkin/assets/Sports.jpg deleted file mode 100644 index 2e3b4d9..0000000 Binary files a/test/gherkin/assets/Sports.jpg and /dev/null differ diff --git a/test/gherkin/assets/bulk_adding_of_individuals.csv b/test/gherkin/assets/bulk_adding_of_individuals.csv deleted file mode 100644 index d7d3131..0000000 --- a/test/gherkin/assets/bulk_adding_of_individuals.csv +++ /dev/null @@ -1,5 +0,0 @@ -Name,Email,Phone -Sree,sree@yopmail.com,1234567890 -Raj,raj@yopmail.com,1234567890 -Vivek,vivek@yopmail.com, - diff --git a/test/gherkin/behave.ini b/test/gherkin/behave.ini deleted file mode 100644 index 7b67e08..0000000 --- a/test/gherkin/behave.ini +++ /dev/null @@ -1,7 +0,0 @@ -[behave] -paths = features/ - -[behave.userdata] -base_url = https://api.bb-consent.dev/v2 -username = admin@localretail.com -password = qwerty123 \ No newline at end of file diff --git a/test/gherkin/docker-compose.yaml b/test/gherkin/docker-compose.yaml deleted file mode 100644 index 3bd138b..0000000 --- a/test/gherkin/docker-compose.yaml +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.3' - -services: - gherkin-tests: - image: gherkin-tests - build: - context: . - - network_mode: host \ No newline at end of file diff --git a/test/gherkin/features/admin_dashboard/account/developer_api.feature b/test/gherkin/features/admin_dashboard/account/developer_api.feature deleted file mode 100644 index df99f5c..0000000 --- a/test/gherkin/features/admin_dashboard/account/developer_api.feature +++ /dev/null @@ -1,22 +0,0 @@ -Feature: Developer APIs and Credentials - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: View Organization ID, Admin User ID, and API Base URL - When the admin views the organization ID, admin user ID, and API base URL - Then the admin should see this information - - Scenario: Create API Key with Expiry and Scopes - When the admin creates an API key with specified expiry and scopes - Then the admin should receive a one-time copyable API key - - Scenario: Update API Key to Refresh - When the admin updates an API key to refresh it - Then the admin should receive a new one-time copyable API key - - Scenario: List API Keys - When the admin views the list of API keys - Then the admin should see a paginated list of API keys - diff --git a/test/gherkin/features/admin_dashboard/account/manage_admin.feature b/test/gherkin/features/admin_dashboard/account/manage_admin.feature deleted file mode 100644 index d846e5e..0000000 --- a/test/gherkin/features/admin_dashboard/account/manage_admin.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: Manage Admin User Configurations - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: Update Organization Admin Avatar Image - When the admin updates the organization admin's avatar image - Then the avatar image should be updated - - Scenario: Update Organization Admin Name - When the admin updates the organization admin's name - Then the admin's name should be updated - - Scenario: Reset Password - When the admin resets the organization admin's password - Then the password should be reset - diff --git a/test/gherkin/features/admin_dashboard/account/view_logs.feature b/test/gherkin/features/admin_dashboard/account/view_logs.feature deleted file mode 100644 index c6dad10..0000000 --- a/test/gherkin/features/admin_dashboard/account/view_logs.feature +++ /dev/null @@ -1,34 +0,0 @@ -Feature: View Logs - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: View List of Admin Logs - When the admin views the list of admin logs - Then the admin should see a list of logs - - Scenario: Filter Logs by Category - All - When the admin filters the logs to see all logs - Then the admin should see all logs - - Scenario: Filter Logs by Category - Security - When the admin filters the logs to see security logs - Then the admin should see security-related logs - - Scenario: Filter Logs by Category - API Calls - When the admin filters the logs to see API call logs - Then the admin should see logs related to API calls - - Scenario: Filter Logs by Category - Organisation - When the admin filters the logs to see organisation logs - Then the admin should see logs related to organisation activities - - Scenario: Filter Logs by Category - Webhooks - When the admin filters the logs to see webhook logs - Then the admin should see logs related to webhook activities - - Scenario: Filter Logs by Category - End User - When the admin filters the logs to see end user logs - Then the admin should see logs related to end user activities - diff --git a/test/gherkin/features/admin_dashboard/account/webhook.feature b/test/gherkin/features/admin_dashboard/account/webhook.feature deleted file mode 100644 index 6e0bc17..0000000 --- a/test/gherkin/features/admin_dashboard/account/webhook.feature +++ /dev/null @@ -1,35 +0,0 @@ -Feature: Webhooks Management - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: View List of Webhook Endpoints - When the admin views the list of webhook endpoints - Then the admin should see a list of webhook endpoints - - Scenario: Create Webhook Endpoint - When the admin creates a new webhook endpoint with specified details - Then the webhook endpoint should be created - - Scenario: Update Webhook Endpoint - When the admin updates an existing webhook endpoint with specified details - Then the webhook endpoint should be updated - - Scenario: Delete Webhook Endpoint - When the admin deletes an existing webhook endpoint - Then the webhook endpoint should be deleted - - Scenario: View Recent Deliveries for Webhook Endpoint - Given the admin selects a webhook endpoint - When the admin views the list of recent deliveries made to the selected webhook - Then the admin should see the delivery details - - Scenario: Webhook Endpoint Status - Up - When the admin marks a webhook endpoint as "Up" - Then the status of the webhook endpoint should be set to "Up" - - Scenario: Webhook Endpoint Status - Down - When the admin marks a webhook endpoint as "Down" - Then the status of the webhook endpoint should be set to "Down" - diff --git a/test/gherkin/features/admin_dashboard/data_agreements.feature b/test/gherkin/features/admin_dashboard/data_agreements.feature deleted file mode 100644 index 932bce4..0000000 --- a/test/gherkin/features/admin_dashboard/data_agreements.feature +++ /dev/null @@ -1,63 +0,0 @@ -Feature: Data Agreements - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: Create Global Policy Configuration - When the admin creates global policy configuration - Then the global policy configuration should be created - - Scenario: Update Global Policy Configuration - When the admin updates global policy configuration - Then the global policy configuration should be updated - - Scenario: Create Data Agreement - When the admin creates a data agreement - Then the data agreement should be created with version 1.0.0 - - Scenario: Read Data Agreement - When the admin reads a data agreement - Then the admin should be able to view the data agreement - - Scenario: Update Data Agreement - When the admin updates a data agreement - Then the data agreement should be updated - - Scenario: Delete Data Agreement - When the admin deletes a data agreement - Then the data agreement should be deleted - - Scenario: Create Data Agreement in Draft Mode - When the admin creates a data agreement in draft mode - Then the data agreement should be in draft mode with version 1.0.0 - - Scenario: Create Data Agreement in Publish Mode - When the admin creates a data agreement in publish mode - Then the data agreement should be in publish mode with version 1.0.0 - - Scenario: Visibility of Data Agreements - Given there are data agreements - When the admin views the list of data agreements - Then the admin should see a list of data agreements - - Scenario: Visibility of Draft Data Agreements - Given there are draft data agreements - When the admin views the list of data agreements - Then the admin should see a list of draft data agreements - - Scenario: Visibility of Published Data Agreements - Given there are published data agreements - When the admin views the list of data agreements - Then the admin should see a list of published data agreements - - Scenario: Versioning of Published Data Agreements - Given there is a published data agreement - When the admin updates the data agreement - Then the data agreement version should be incremented - - Scenario: Versioning of Draft Data Agreements - Given there is a draft data agreement - When the admin updates the data agreement - Then the data agreement version should not be incremented - diff --git a/test/gherkin/features/admin_dashboard/getting_started.feature b/test/gherkin/features/admin_dashboard/getting_started.feature deleted file mode 100644 index 06ef76d..0000000 --- a/test/gherkin/features/admin_dashboard/getting_started.feature +++ /dev/null @@ -1,13 +0,0 @@ -Feature: Getting Started Page - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: Update Organization Information - When the admin updates the organization name, description, location, and policy URL - Then the organization information should be updated - - Scenario: Update Organization Logo and Cover Image - When the admin updates the organization logo and cover image - Then the logo and cover image should be updated \ No newline at end of file diff --git a/test/gherkin/features/admin_dashboard/login.feature b/test/gherkin/features/admin_dashboard/login.feature deleted file mode 100644 index 095ed48..0000000 --- a/test/gherkin/features/admin_dashboard/login.feature +++ /dev/null @@ -1,6 +0,0 @@ -Feature: Login to Admin Dashboard - - Scenario: Org admin logs into Admin Dashboard - Given an organization admin for Data4Diabetes organization - When the admin logs into the Admin dashboard - Then the admin should be able to access pages in the admin dashboard \ No newline at end of file diff --git a/test/gherkin/features/admin_dashboard/manage_users/user_access.feature b/test/gherkin/features/admin_dashboard/manage_users/user_access.feature deleted file mode 100644 index 529b1bf..0000000 --- a/test/gherkin/features/admin_dashboard/manage_users/user_access.feature +++ /dev/null @@ -1,26 +0,0 @@ -Feature: User Access Management - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: Create Identity Provider Configuration - When the admin creates an identity provider configuration - Then the identity provider configuration should be created - - Scenario: Read Identity Provider Configuration - When the admin reads an identity provider configuration - Then the admin should be able to view the identity provider configuration - - Scenario: Update Identity Provider Configuration - When the admin updates an identity provider configuration - Then the identity provider configuration should be updated - - Scenario: Delete Identity Provider Configuration - When the admin deletes an identity provider configuration - Then the identity provider configuration should be deleted - - Scenario: Bulk Onboard Individuals Using CSV - When the admin bulk onboards individuals using a CSV file upload - Then the individuals should be created in the consent BB identity provider - diff --git a/test/gherkin/features/admin_dashboard/manage_users/user_records.feature b/test/gherkin/features/admin_dashboard/manage_users/user_records.feature deleted file mode 100644 index 8fc7d68..0000000 --- a/test/gherkin/features/admin_dashboard/manage_users/user_records.feature +++ /dev/null @@ -1,38 +0,0 @@ -Feature: User Records Management - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: List Consent Records with Pagination - When the admin views the list of consent records - Then the admin should see a paginated list of consent records - - Scenario: View Data Agreement from Consent Records - When the admin clicks the eye icon in the actions column of a consent record - Then the admin should be able to see the corresponding data agreement - - Scenario: Filter Consent Records - All - When the admin filters consent records to see all consent records - Then the admin should see a list of all consent records - - Scenario: Filter Consent Records - Purpose of Data Agreement - When the admin filters consent records by the purpose of the data agreement - Then the admin should see a filtered list of consent records - - Scenario: Filter Consent Records - Lawful Bases (GDPR) - When the admin filters consent records by lawful bases (GDPR) - Then the admin should see a filtered list of consent records - - Scenario: Search Consent Records by Data Agreement ID - When the admin uses the free search bar to search for consent records by Data Agreement ID - Then the admin should see the relevant consent records - - Scenario: Search Consent Records by Consent Record ID - When the admin uses the free search bar to search for consent records by Consent Record ID - Then the admin should see the relevant consent records - - Scenario: Search Consent Records by Individual ID - When the admin uses the free search bar to search for consent records by Individual ID - Then the admin should see the relevant consent records - diff --git a/test/gherkin/features/admin_dashboard/personal_data.feature b/test/gherkin/features/admin_dashboard/personal_data.feature deleted file mode 100644 index 6494fae..0000000 --- a/test/gherkin/features/admin_dashboard/personal_data.feature +++ /dev/null @@ -1,26 +0,0 @@ -Feature: Personal Data Management - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: List Data Attributes - When the admin lists the data attributes as a table - Then the admin should see a paginated list of data attributes - - Scenario: Update Data Attribute Name - When the admin updates a data attribute name - Then the data attribute name should be updated - - Scenario: Filter Data Attributes - All - When the admin filters data attributes to see all data attributes - Then the admin should see a list of all data attributes - - Scenario: Filter Data Attributes - Data Source - When the admin filters data attributes to see data attributes associated with Data Source - Then the admin should see a list of data attributes associated with Data Source - - Scenario: Filter Data Attributes - Data Using Service - When the admin filters data attributes to see data attributes associated with Data Using Service - Then the admin should see a list of data attributes associated with Data Using Service - diff --git a/test/gherkin/features/admin_dashboard/privacy_dashboard.feature b/test/gherkin/features/admin_dashboard/privacy_dashboard.feature deleted file mode 100644 index d7e60c9..0000000 --- a/test/gherkin/features/admin_dashboard/privacy_dashboard.feature +++ /dev/null @@ -1,15 +0,0 @@ -Feature: Privacy Dashboard Management - - Background: - Given an organization admin for Data4Diabetes organization - And the admin is logged into the Admin dashboard - - Scenario: View Deployed Privacy Dashboard Information - When the admin views the deployed privacy dashboard information - Then the admin should see the current deployed privacy dashboard version, domain URL, and deployment status - - Scenario: Check Privacy Dashboard Configuration in Single Tenant Mode - Given Consent BB is in single tenant mode - When the admin checks the configuration of the privacy dashboard - Then the "Configure" button should be disabled - diff --git a/test/gherkin/requirements.txt b/test/gherkin/requirements.txt deleted file mode 100644 index 556e4e6..0000000 --- a/test/gherkin/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -behave -requests \ No newline at end of file diff --git a/test/gherkin/steps/data_agreements.py b/test/gherkin/steps/data_agreements.py deleted file mode 100644 index ae35954..0000000 --- a/test/gherkin/steps/data_agreements.py +++ /dev/null @@ -1,487 +0,0 @@ -from behave import * -import requests -import json - - -@when("the admin creates global policy configuration") -def create_policy(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/policies" - response = requests.get(url, verify=False, headers=headers) - context.response = response - response_json = json.loads(context.response.content) - policy_id = response_json["policies"][0]["id"] - url = base_url + "/config/policy/" + policy_id - response = requests.delete(url, verify=False, headers=headers) - data = { - "policy": { - "name": "New Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 4, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/policy" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the global policy configuration should be created") -def is_policy_created(context): - response_json = json.loads(context.response.content) - policy_id = response_json["policy"]["id"] - context.config.userdata.policy_id = policy_id - assert context.response.status_code == 200 - - -@when("the admin updates global policy configuration") -def update_policy(context): - policy_id = context.config.userdata.policy_id - data = { - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/policy/" + policy_id - response = requests.put(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the global policy configuration should be updated") -def is_policy_updated(context): - assert context.response.status_code == 200 - - -@when("the admin creates a data agreement") -def create_data_agreement(context): - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": "Issue Passports", - "purposeDescription": "Issue Passports", - "lawfulBasis": "consent", - "methodOfUse": "null", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": True, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "complete", - "dataAttributes": [ - { - "id": "65410e3bd8e8336d82709824", - "name": "Name", - "description": "Name of person", - "sensitivity": False, - "category": "", - }, - { - "id": "65410e3bd8e8336d82709825", - "name": "Age", - "description": "Age of person", - "sensitivity": False, - "category": "", - }, - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreement" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the data agreement should be created with version 1.0.0") -def is_data_agreement_created(context): - response_json = json.loads(context.response.content) - data_agreement_version = response_json["dataAgreement"]["version"] - data_agreement_id = response_json["dataAgreement"]["id"] - context.config.userdata.data_agreement_id = data_agreement_id - assert data_agreement_version == "1.0.0" - - -@when("the admin reads a data agreement") -def read_data_agreement(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - data_agreement_id = context.config.userdata.data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then("the admin should be able to view the data agreement") -def view_data_agreement(context): - assert context.response.status_code == 200 - - -@when("the admin updates a data agreement") -def update_data_agreement(context): - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": "Issue Passports", - "purposeDescription": "Issue Passport", - "lawfulBasis": "consent", - "methodOfUse": "data_source", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": True, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "complete", - "dataAttributes": [ - { - "id": "65410e3bd8e8336d82709824", - "name": "Name", - "description": "Name of customer", - "sensitivity": False, - "category": "", - }, - { - "id": "65410e3bd8e8336d82709825", - "name": "Age", - "description": "Age of customer", - "sensitivity": False, - "category": "", - }, - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - data_agreement_id = context.config.userdata.data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.put(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the data agreement should be updated") -def is_data_agreement_updated(context): - assert context.response.status_code == 200 - - -@when("the admin deletes a data agreement") -def delete_data_agreement(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - data_agreement_id = context.config.userdata.data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.delete(url, verify=False, headers=headers) - context.response = response - - -@then("the data agreement should be deleted") -def is_data_agreement_deleted(context): - assert context.response.status_code == 200 - - -@when("the admin creates a data agreement in draft mode") -def create_draft_data_agreement(context): - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": "Issue License", - "purposeDescription": "Issue License", - "lawfulBasis": "consent", - "methodOfUse": "null", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": False, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "draft", - "dataAttributes": [ - { - "id": "65410e3bd8e8336d82709824", - "name": "Name", - "description": "Name of person", - "sensitivity": False, - "category": "", - }, - { - "id": "65410e3bd8e8336d82709825", - "name": "Age", - "description": "Age of person", - "sensitivity": False, - "category": "", - }, - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreement" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the data agreement should be in draft mode with version 1.0.0") -def is_data_agreement_draft(context): - assert context.response.status_code == 200 - response_json = json.loads(context.response.content) - data_agreement_version = response_json["dataAgreement"]["version"] - data_agreement_id = response_json["dataAgreement"]["id"] - context.config.userdata.draft_data_agreement_id = data_agreement_id - assert data_agreement_version == "1.0.0" - - -@when("the admin creates a data agreement in publish mode") -def create_publish_data_agreement(context): - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": "Issue Certificate", - "purposeDescription": "Issue Certificate", - "lawfulBasis": "consent", - "methodOfUse": "null", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": True, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "complete", - "dataAttributes": [ - { - "id": "65410e3bd8e8336d82709824", - "name": "Name", - "description": "Name of person", - "sensitivity": False, - "category": "", - }, - { - "id": "65410e3bd8e8336d82709825", - "name": "Age", - "description": "Age of person", - "sensitivity": False, - "category": "", - }, - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreement" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the data agreement should be in publish mode with version 1.0.0") -def is_published_data_agreement(context): - assert context.response.status_code == 200 - response_json = json.loads(context.response.content) - data_agreement_version = response_json["dataAgreement"]["version"] - data_agreement_id = response_json["dataAgreement"]["id"] - context.config.userdata.published_data_agreement_id = data_agreement_id - assert data_agreement_version == "1.0.0" - - -@given("there are data agreements") -def data_agreements(context): - pass - - -@when("the admin views the list of data agreements") -def list_data_agreements(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreements" - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then("the admin should see a list of data agreements") -def is_list_of_data_agreement(context): - assert context.response.status_code == 200 - - -@given("there are draft data agreements") -def draft_data_agreements(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - params = {"lifecycle": "draft"} - url = base_url + "/config/data-agreements" - response = requests.get(url, verify=False, headers=headers, params=params) - context.response = response - - -@then("the admin should see a list of draft data agreements") -def list_draft_data_agreements(context): - assert context.response.status_code == 200 - - -@given("there are published data agreements") -def published_data_agreements(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - params = {"lifecycle": "complete"} - url = base_url + "/config/data-agreements" - response = requests.get(url, verify=False, headers=headers, params=params) - context.response = response - - -@then("the admin should see a list of published data agreements") -def list_published_data_agreements(context): - assert context.response.status_code == 200 - - -@given("there is a published data agreement") -def published_data_agreement(context): - data_agreement_id = context.config.userdata.published_data_agreement_id - context.data_agreement_id = data_agreement_id - context.purpose = "Issue Certificate" - - -@when("the admin updates the data agreement") -def update_data_agreement(context): - purpose = context.purpose - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": purpose, - "purposeDescription": "Issue license and certificate", - "lawfulBasis": "consent", - "methodOfUse": "data_source", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": True, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "complete", - "dataAttributes": [ - { - "id": "65410e3bd8e8336d82709824", - "name": "Name", - "description": "Name of customer", - "sensitivity": False, - "category": "", - }, - { - "id": "65410e3bd8e8336d82709825", - "name": "Age", - "description": "Age of customer", - "sensitivity": False, - "category": "", - }, - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - data_agreement_id = context.data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.put(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the data agreement version should be incremented") -def is_data_agreement_version_incremented(context): - assert context.response.status_code == 200 - response_json = json.loads(context.response.content) - data_agreement_version = response_json["dataAgreement"]["version"] - data_agreement_id = response_json["dataAgreement"]["id"] - context.published_data_agreement_id = data_agreement_id - assert data_agreement_version == "2.0.0" - - -@given("there is a draft data agreement") -def draft_data_agreement(context): - data_agreement_id = context.config.userdata.draft_data_agreement_id - context.data_agreement_id = data_agreement_id - context.purpose = "Issue Lisense" - - -@then("the data agreement version should not be incremented") -def is_data_agreement_version_same(context): - response_json = json.loads(context.response.content) - data_agreement_version = response_json["dataAgreement"]["version"] - data_agreement_id = response_json["dataAgreement"]["id"] - cleanup_data_agreement(context) - assert data_agreement_version == "1.0.0" - -def cleanup_data_agreement(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - data_agreement_id = context.config.userdata.published_data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.delete(url, verify=False, headers=headers) - data_agreement_id = context.config.userdata.draft_data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.delete(url, verify=False, headers=headers) diff --git a/test/gherkin/steps/getting_started.py b/test/gherkin/steps/getting_started.py deleted file mode 100644 index d56e0ca..0000000 --- a/test/gherkin/steps/getting_started.py +++ /dev/null @@ -1,76 +0,0 @@ -from behave import * -import requests -import json - - -@given("the admin is logged into the Admin dashboard") -def step_impl(context): - username = context.config.userdata.get("username") - password = context.config.userdata.get("password") - base_url = context.config.userdata.get("base_url") - data = { - "username": username, - "password": password, - } - url = base_url + "/onboard/admin/login" - response = requests.post(url, json=data, verify=False) - response_json = json.loads(response.content) - context.access_token = response_json["accessToken"] - - -@when("the admin updates the organization name, description, location, and policy URL") -def step_impl(context): - base_url = context.config.userdata.get("base_url") - data = { - "organisation": { - "name": "Retail company", - "description": "Retail electronic company", - "sector": "Retail", - "location": "Sweden", - "policyUrl": "http://localhost.com", - } - } - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/onboard/organisation" - response = requests.put(url, json=data, verify=False, headers=headers) - response_json = json.loads(response.content) - context.response = response - - -@then("the organization information should be updated") -def step_impl(context): - assert context.response.status_code == 200 - - -@when("the admin updates the organization logo and cover image") -def step_impl(context): - base_url = context.config.userdata.get("base_url") - - headers = { - "Authorization": f"Bearer {context.access_token}" - } - logo_file_path = "assets/Sports.jpg" - cover_image_file_path = "assets/Default_Cover_Image.jpg" - - # update logo image - files = { - "orgimage": ("Sports.jpg", open(logo_file_path, "rb")), - } - url = base_url + "/onboard/organisation/logoimage" - response = requests.post(url, files=files, verify=False, headers=headers) - context.response_logo_image = response - - # update cover image - files = { - "orgimage": ("Default_Cover_Image.jpg", open(cover_image_file_path, "rb")), - } - url = base_url + "/onboard/organisation/coverimage" - response = requests.post(url, files=files, verify=False, headers=headers) - context.response_cover_image = response - - -@then("the logo and cover image should be updated") -def step_impl(context): - - assert context.response_logo_image.status_code == 200 - assert context.response_cover_image.status_code == 200 diff --git a/test/gherkin/steps/login.py b/test/gherkin/steps/login.py deleted file mode 100644 index 88a189b..0000000 --- a/test/gherkin/steps/login.py +++ /dev/null @@ -1,29 +0,0 @@ -from behave import * -import requests -import json - - -@given("an organization admin for Data4Diabetes organization") -def step_impl(context): - pass - - -@when("the admin logs into the Admin dashboard") -def step_impl(context): - username = context.config.userdata.get("username") - password = context.config.userdata.get("password") - base_url = context.config.userdata.get("base_url") - data = { - "username": username, - "password": password, - } - url = base_url + "/onboard/admin/login" - response = requests.post(url, json=data,verify=False) - context.response = response - - -@then("the admin should be able to access pages in the admin dashboard") -def step_impl(context): - response_json = json.loads(context.response.content) - context.access_token = response_json["accessToken"] - assert context.response.status_code == 200 diff --git a/test/gherkin/steps/personal_data.py b/test/gherkin/steps/personal_data.py deleted file mode 100644 index dadf0ba..0000000 --- a/test/gherkin/steps/personal_data.py +++ /dev/null @@ -1,200 +0,0 @@ -from behave import * -import requests -import json - - -@when("the admin lists the data attributes as a table") -def list_data_attributes(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreements/data-attributes" - response = requests.get(url, verify=False, headers=headers) - context.response = response - response_json = json.loads(context.response.content) - - -@then("the admin should see a paginated list of data attributes") -def is_list_of_data_attributes(context): - assert context.response.status_code == 200 - - -@when("the admin updates a data attribute name") -def updates_data_attributes(context): - create_data_agreements(context) - data_attribute_id = context.config.userdata.data_attribute_id - data = { - "dataAttribute": { - "name": "Age", - "description": "Age of the customer", - "sensitivity": False, - "category": "", - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreements/data-attribute/" + data_attribute_id - response = requests.put(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the data attribute name should be updated") -def is_data_attributes_updated(context): - assert context.response.status_code == 200 - response_json = json.loads(context.response.content) - data_attribute_name = response_json["dataAttribute"]["name"] - assert data_attribute_name == "Age" - - -@when("the admin filters data attributes to see all data attributes") -def list_all_data_attributes(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreements/data-attributes" - response = requests.get(url, verify=False, headers=headers) - context.response = response - response_json = json.loads(context.response.content) - - -@then("the admin should see a list of all data attributes") -def is_list_of_all_data_attributes(context): - assert context.response.status_code == 200 - - -@when( - "the admin filters data attributes to see data attributes associated with Data Source" -) -def list_da_associated_with_data_source(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreements/data-attributes" - params = {"methodOfUse": "data_source"} - response = requests.get(url, verify=False, headers=headers,params=params) - context.response = response - - - -@then("the admin should see a list of data attributes associated with Data Source") -def is_da_associated_with_data_source(context): - assert context.response.status_code == 200 - - - -@when( - "the admin filters data attributes to see data attributes associated with Data Using Service" -) -def list_da_associated_with_data_using_service(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreements/data-attributes" - params = {"methodOfUse": "data_using_service"} - response = requests.get(url, verify=False, headers=headers,params=params) - context.response = response - - -@then( - "the admin should see a list of data attributes associated with Data Using Service" -) -def is_da_associated_with_data_using_service(context): - assert context.response.status_code == 200 - cleanup_data_agreement(context) - - -def create_data_agreements(context): - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": "Issue Certificate", - "purposeDescription": "Issue Certificate", - "lawfulBasis": "consent", - "methodOfUse": "data_source", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": True, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "complete", - "dataAttributes": [ - { - "name": "Age", - "description": "Age of person", - "sensitivity": False, - "category": "", - }, - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreement" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - response_json = json.loads(context.response.content) - data_source_data_agreement_id = response_json["dataAgreement"]["id"] - context.config.userdata.data_source_data_agreement_id = data_source_data_agreement_id - data = { - "dataAgreement": { - "controllerId": "652657969380f35fa1c30245", - "controllerUrl": "string", - "controllerName": "string", - "policy": { - "name": "Updated Policy", - "url": "https://igrant.io/policy.html", - "jurisdiction": "London,GB", - "industrySector": "Retail", - "dataRetentionPeriodDays": 350, - "geographicRestriction": "Not restricted", - "storageLocation": "London", - "thirdPartyDataSharing": True, - }, - "purpose": "Issue License", - "purposeDescription": "Issue License", - "lawfulBasis": "consent", - "methodOfUse": "data_using_service", - "dpiaDate": "2023-10-31T14:24", - "dpiaSummaryUrl": "https://privacyant.se/dpia_results.html", - "active": True, - "forgettable": False, - "compatibleWithVersionId": False, - "lifecycle": "complete", - "dataAttributes": [ - { - "name": "Name", - "description": "Name of person", - "sensitivity": False, - "category": "", - } - ], - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/data-agreement" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - response_json = json.loads(context.response.content) - data_using_service_data_agreement_id = response_json["dataAgreement"]["id"] - data_attribute_id = response_json["dataAgreement"]["dataAttributes"][0]["id"] - context.config.userdata.data_attribute_id = data_attribute_id - context.config.userdata.data_using_service_data_agreement_id = data_using_service_data_agreement_id - -def cleanup_data_agreement(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - data_agreement_id = context.config.userdata.data_source_data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.delete(url, verify=False, headers=headers) - data_agreement_id = context.config.userdata.data_using_service_data_agreement_id - url = base_url + "/config/data-agreement/" + data_agreement_id - response = requests.delete(url, verify=False, headers=headers) \ No newline at end of file diff --git a/test/gherkin/steps/privacy_dashboard.py b/test/gherkin/steps/privacy_dashboard.py deleted file mode 100644 index 18f7bf9..0000000 --- a/test/gherkin/steps/privacy_dashboard.py +++ /dev/null @@ -1,42 +0,0 @@ -from behave import * -import requests -import json - -@when("the admin views the deployed privacy dashboard information") -def views_privacy_dashboard(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/privacy-dashboard" - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then("the admin should see the current deployed privacy dashboard version, domain URL, and deployment status") -def sees_privacy_dashboard(context): - response_json = json.loads(context.response.content) - assert context.response.status_code == 200 - version = response_json["version"] - hostname = response_json["hostname"] - status = response_json["statusStr"] - assert version == "v1.0.0" - assert hostname == "retail-staging-privacy.igrant.io" - assert status == "Deployed" - - -@given("Consent BB is in single tenant mode") -def step_impl(context): - pass - - -@when("the admin checks the configuration of the privacy dashboard") -def step_impl(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/privacy-dashboard" - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then(u'the "Configure" button should be disabled') -def step_impl(context): - pass \ No newline at end of file diff --git a/test/gherkin/steps/user_access.py b/test/gherkin/steps/user_access.py deleted file mode 100644 index 3730f5f..0000000 --- a/test/gherkin/steps/user_access.py +++ /dev/null @@ -1,122 +0,0 @@ -from behave import * -import requests -import json - - -@when("the admin creates an identity provider configuration") -def create_idp(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/idp/open-ids" - response = requests.get(url, verify=False, headers=headers) - response_json = json.loads(response.content) - if len(response_json["idps"]) > 0: - idp_id = response_json["idps"][0]["id"] - url = base_url + "/config/idp/open-id/" + idp_id - response = requests.delete(url, verify=False, headers=headers) - data = { - "idp": { - "issuerUrl": "http://keycloak:8080/realms/3pp-application", - "authorisationUrl": "http://keycloak:8080/realms/3pp-application/protocol/openid-connect/auth", - "tokenUrl": "http://keycloak:8080/realms/3pp-application/protocol/openid-connect/token", - "logoutUrl": "http://keycloak:8080/realms/3pp-application/protocol/openid-connect/logout", - "clientId": "3pp", - "clientSecret": "0c7v1bd2M6a85MUDda2hKKY4tuZTxOrW", - "jwksUrl": "http://keycloak:8080/realms/3pp-application/protocol/openid-connect/certs", - "userInfoUrl": "http://keycloak:8080/realms/3pp-application/protocol/openid-connect/userinfo", - "defaultScope": "openid", - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/config/idp/open-id" - response = requests.post(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the identity provider configuration should be created") -def is_idp_created(context): - response_json = json.loads(context.response.content) - idp_id = response_json["idp"]["id"] - context.config.userdata.idp_id = idp_id - assert context.response.status_code == 200 - - -@when("the admin reads an identity provider configuration") -def read_idp(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - idp_id = context.config.userdata.idp_id - url = base_url + "/config/idp/open-id/" + idp_id - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then("the admin should be able to view the identity provider configuration") -def view_idp(context): - assert context.response.status_code == 200 - - -@when("the admin updates an identity provider configuration") -def updates_idp(context): - data = { - "idp": { - "issuerUrl": "http://keycloak:9090/realms/3pp-application", - "authorisationUrl": "http://keycloak:9090/realms/3pp-application/protocol/openid-connect/auth", - "tokenUrl": "http://keycloak:9090/realms/3pp-application/protocol/openid-connect/token", - "logoutUrl": "http://keycloak:9090/realms/3pp-application/protocol/openid-connect/logout", - "clientId": "3pp", - "clientSecret": "0c7v1bd2M6a85MUDda2hKKY4tuZTxOrW", - "jwksUrl": "http://keycloak:9090/realms/3pp-application/protocol/openid-connect/certs", - "userInfoUrl": "http://keycloak:9090/realms/3pp-application/protocol/openid-connect/userinfo", - "defaultScope": "openid", - } - } - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - idp_id = context.config.userdata.idp_id - url = base_url + "/config/idp/open-id/" + idp_id - response = requests.put(url, json=data, verify=False, headers=headers) - context.response = response - - -@then("the identity provider configuration should be updated") -def is_idp_updated(context): - assert context.response.status_code == 200 - - -@when("the admin deletes an identity provider configuration") -def deletes_idp(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - idp_id = context.config.userdata.idp_id - url = base_url + "/config/idp/open-id/" + idp_id - response = requests.delete(url, verify=False, headers=headers) - context.response = response - - -@then("the identity provider configuration should be deleted") -def is_idp_deleted(context): - assert context.response.status_code == 200 - - -@when("the admin bulk onboards individuals using a CSV file upload") -def bulk_onboard_of_individuals(context): - base_url = context.config.userdata.get("base_url") - - headers = { - "Authorization": f"Bearer {context.access_token}" - } - csv_file_path = "assets/bulk_adding_of_individuals.csv" - - files = { - "individuals": ("bulk_adding_of_individuals.csv", open(csv_file_path, "rb")), - } - url = base_url + "/config/individual/upload" - response = requests.post(url, files=files, verify=False, headers=headers) - context.response = response - - -@then("the individuals should be created in the consent BB identity provider") -def is_individuals_created(context): - assert context.response.status_code == 200 diff --git a/test/gherkin/steps/user_records.py b/test/gherkin/steps/user_records.py deleted file mode 100644 index 01f2e92..0000000 --- a/test/gherkin/steps/user_records.py +++ /dev/null @@ -1,74 +0,0 @@ -from behave import * -import requests -import json - -@when("the admin views the list of consent records") -def list_consent_records(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/audit/consent-records" - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then("the admin should see a paginated list of consent records") -def is_list_of_consent_records(context): - assert context.response.status_code == 200 - - -@when("the admin clicks the eye icon in the actions column of a consent record") -def step_impl(context): - pass - - -@then("the admin should be able to see the corresponding data agreement") -def step_impl(context): - pass - - -@when("the admin filters consent records to see all consent records") -def view_consent_records(context): - base_url = context.config.userdata.get("base_url") - headers = {"Authorization": f"Bearer {context.access_token}"} - url = base_url + "/audit/consent-records" - response = requests.get(url, verify=False, headers=headers) - context.response = response - - -@then("the admin should see a list of all consent records") -def is_list_of_consent_records(context): - assert context.response.status_code == 200 - - -@when("the admin filters consent records by the purpose of the data agreement") -def step_impl(context): - pass - - -@then("the admin should see a filtered list of consent records") -def step_impl(context): - pass - - -@when("the admin filters consent records by lawful bases (GDPR)") -def step_impl(context): - pass - - -@when("the admin uses the free search bar to search for consent records by Data Agreement ID") -def step_impl(context): - pass - -@then("the admin should see the relevant consent records") -def step_impl(context): - pass - - -@when("the admin uses the free search bar to search for consent records by Consent Record ID") -def step_impl(context): - pass - - -@when("the admin uses the free search bar to search for consent records by Individual ID") -def step_impl(context): - pass \ No newline at end of file diff --git a/test/stories/admin_dashboard/account/developer_api.md b/test/stories/admin_dashboard/account/developer_api.md deleted file mode 100644 index b8dd5e8..0000000 --- a/test/stories/admin_dashboard/account/developer_api.md +++ /dev/null @@ -1,11 +0,0 @@ -# Developer APIs and Credentials - -All API requests require you to authenticate using the credentials displayed. - -In developer API page, the organisation admin can perform following: - -1. View organisation id, organisation admin user id (logged in user id), configured API base URL used by admin dashboard to communicate with API server -2. CRUD on API keys -3. When creating API key, it is possible to specify the expiry in days, scopes (service, config, audit, onboard). In return an API key is received. This API key is one time copyable. As the next time it will be hidden an not accessible anymore. -4. API key can be updated to refresh the API key and is one time copyable. -5. List of API keys are displayed in a paginated table. \ No newline at end of file diff --git a/test/stories/admin_dashboard/account/manage_admin.md b/test/stories/admin_dashboard/account/manage_admin.md deleted file mode 100644 index b2f3e8e..0000000 --- a/test/stories/admin_dashboard/account/manage_admin.md +++ /dev/null @@ -1,9 +0,0 @@ -# Manage admin - -Manage admin user configurations. - -In manage admin, the organisation admin can perform following: - -1. Update organisation admin avatar image -2. Update organisation admin name -3. Reset password \ No newline at end of file diff --git a/test/stories/admin_dashboard/account/view_logs.md b/test/stories/admin_dashboard/account/view_logs.md deleted file mode 100644 index 9ca9f3f..0000000 --- a/test/stories/admin_dashboard/account/view_logs.md +++ /dev/null @@ -1,8 +0,0 @@ -# View logs - -Provides all logs, can also be filtered against various log categories. - -In view logs page, the organisation admin can perform following: - -1. View list of admin logs -2. Filter the logs by different categories 1) all 2) Security 3) API calls 4) Organisation 5) Webhooks 6) End user \ No newline at end of file diff --git a/test/stories/admin_dashboard/account/webhooks.md b/test/stories/admin_dashboard/account/webhooks.md deleted file mode 100644 index 97ec869..0000000 --- a/test/stories/admin_dashboard/account/webhooks.md +++ /dev/null @@ -1,17 +0,0 @@ -# Webhooks - -Manage webhooks for user events. Webhooks allow external services to be notified when certain events happen. - -In webhooks page, the organisation admin can perform following: - -1. View list of webhooks endpoints configured -2. CRUD webhook endpoints. Each webhook endpoint has a status, which indicates whether the webhook endpoint currently down or up. -3. On create/update, organisation admin has to specify the following details: - 1. Payload URL - Webhook URL to which the payload is send to. - 2. Content type - Content type to be used for webhook payload - 3. Skip SSL verification - To skip ssl certificate verificate when sending the webhook using http client - 4. Secret key - Webhook URL can check if the recieved event is indeed from a trusted source. - 5. Events to subscribe, i.e when these events occur, it will trigger the webhook - 1. When individuals opt-in to a data agreement (consent.allowed) - 2. When individuals opt-out of a data agreement (consent.disallowed) -4. On clicking the webhook, it is possible to see list of recent deliveries made to it, whether it was successfully delivered or not, time of delivery and delivery id. \ No newline at end of file diff --git a/test/stories/admin_dashboard/data_agreements.md b/test/stories/admin_dashboard/data_agreements.md deleted file mode 100644 index db3d846..0000000 --- a/test/stories/admin_dashboard/data_agreements.md +++ /dev/null @@ -1,10 +0,0 @@ -### Data Agreements - -In data agreements page, the organisation admin can perform following: - -1. Create/Update global policy configuration. This has to be done prior to creating a data agreement. Data policy configuration in a data agreement is pre-filled with default values from global policy configuration during creation. -2. Create/Read/Update/Delete data agreements -3. There are 2 ways a data agreement can be created - 1) in draft mode 2) in publish mode -4. Draft data agreements are not visible to individuals using privacy dashboard. Only published data agreements are visible to individuals. -5. It is also possible to access list of all data agreements as a table. This list is paginated (in fact all the listing APIs are paginated) -6. Organisation admin can filter the list of data agreements to see 1) all data agreements 2) draft data agreements 3) published data agreements \ No newline at end of file diff --git a/test/stories/admin_dashboard/getting_started.md b/test/stories/admin_dashboard/getting_started.md deleted file mode 100644 index 463e2da..0000000 --- a/test/stories/admin_dashboard/getting_started.md +++ /dev/null @@ -1,6 +0,0 @@ -### Getting Started - -In getting started page, the organisation admin can perform following: - -1. Update organisation name, description, location, policy URL -2. Update organisation logo and cover image. \ No newline at end of file diff --git a/test/stories/admin_dashboard/login.md b/test/stories/admin_dashboard/login.md deleted file mode 100644 index 5b8503a..0000000 --- a/test/stories/admin_dashboard/login.md +++ /dev/null @@ -1,3 +0,0 @@ -# Login - -An organsation admin for Data4Diabetes organisation has logged into Admin dashboard. After log-in, he can access pages in admin dashboard. \ No newline at end of file diff --git a/test/stories/admin_dashboard/manage_users/user_access.md b/test/stories/admin_dashboard/manage_users/user_access.md deleted file mode 100644 index 45aef6b..0000000 --- a/test/stories/admin_dashboard/manage_users/user_access.md +++ /dev/null @@ -1,6 +0,0 @@ -# User Access - -In user access page, the organisation admin can perform following: - -1. Create/Read/Update/Delete identity provider configuration. Identity provider configuration enables an organisation admin to onboard individuals from their existing IT systems to consent BB. For e.g. Radisson hotels can configure IDP and then their existing users can login using radisson credentials. -2. Bulk onboard individuals using CSV file upload. In this case, individuals will be created in consent BB IDP. \ No newline at end of file diff --git a/test/stories/admin_dashboard/manage_users/user_records.md b/test/stories/admin_dashboard/manage_users/user_records.md deleted file mode 100644 index b6a8d20..0000000 --- a/test/stories/admin_dashboard/manage_users/user_records.md +++ /dev/null @@ -1,8 +0,0 @@ -# User Records - -In user records page, the organisation admin can perform following: - -1. List of consent records as a table with pagination. A consent record indicates whether an individual has opted-in or out of data agreement. -2. In the table, there is actions column, which has an eye icon, on clicking the eye icon it is possible to see the corresponding data agreement. -3. It is possible to filter consent records table by 1) all 2) Purpose of the data agreement 3) Lawful bases (GDPR) -4. As free search bar is available which supports search by data agreement id, consent record id, individual id. \ No newline at end of file diff --git a/test/stories/admin_dashboard/personal_data.md b/test/stories/admin_dashboard/personal_data.md deleted file mode 100644 index 2065ae5..0000000 --- a/test/stories/admin_dashboard/personal_data.md +++ /dev/null @@ -1,7 +0,0 @@ -# Personal Data - -In personal data page, the organisation admin can perform following: - -1. List the data attributes as table. (all listing supports pagination) A data attribute is personal data that is exposed/consumed through a data agreement. For e.g. For marketing and campaign purposes an organisation would need Name, Age, Phone number personal data from individual/end users. -2. Update data attribue name -3. Filter data attribues by method of use of data agreements to which they are associated to. 1) all 2) Data Source 3) Data Using Service \ No newline at end of file diff --git a/test/stories/admin_dashboard/privacy_board.md b/test/stories/admin_dashboard/privacy_board.md deleted file mode 100644 index 16d9a3f..0000000 --- a/test/stories/admin_dashboard/privacy_board.md +++ /dev/null @@ -1,8 +0,0 @@ -# Privacy Dashboard - -Deploy and manage privacy board for your organisation towards end users. - -In privacy dashboard page, the organisation admin can perform following: - -1. View the current deployed privacy dashboard version and domain url from which it can be accessed and know deployment status (not configured or deployed) -2. If consent BB is in single tenant mode, the privacy dashboard cannot be updated, i.e. to change deployed docker image version or domain url, there fore the configure button is disabled. \ No newline at end of file diff --git a/test/stories/pre-requisite.md b/test/stories/pre-requisite.md deleted file mode 100644 index 4bf29a2..0000000 --- a/test/stories/pre-requisite.md +++ /dev/null @@ -1,11 +0,0 @@ -# Consent BB - -Following are the components in a Consent BB architecture: - -1. Admin dashboard -2. Privacy dashboard (iOS/Android/Web) - - -## Pre-requisite - -Data4Diabetes organisation have setup a Consent BB instance in their kubernetes cluster. \ No newline at end of file diff --git a/test/stories/privacy_dashboard/home.md b/test/stories/privacy_dashboard/home.md deleted file mode 100644 index ea20b96..0000000 --- a/test/stories/privacy_dashboard/home.md +++ /dev/null @@ -1 +0,0 @@ -## Privacy dashboard \ No newline at end of file