diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 000000000..70ccfcb8a
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,11 @@
+docs
+.git
+.github
+LICENSE
+README.md
+renovate.json
+**/staticroot
+**/__pycache__
+**/.pytest_cache
+**/.gitkeep
+**/.gitignore
diff --git a/.github/workflows/testing-pipline.yml b/.github/workflows/testing-pipline.yml
index 599b9d4e4..f5ec499e8 100644
--- a/.github/workflows/testing-pipline.yml
+++ b/.github/workflows/testing-pipline.yml
@@ -44,7 +44,7 @@ jobs:
- uses: actions/checkout@v3
- run: |
sudo apt-get update
- sudo apt-get install -y libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2
+ sudo apt-get install -y libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2-dev
- uses: browser-actions/setup-chrome@v1
- uses: actions/cache@v3
with:
@@ -119,7 +119,7 @@ jobs:
- name: Allure report action # Step to generate Allure report
if: (success() || failure()) && github.event_name != 'pull_request'
- uses: simple-elf/allure-report-action@v1.7
+ uses: simple-elf/allure-report-action@v1.13
with:
allure_results: CodeListLibrary_project/clinicalcode/tests/allure-results
allure_report: CodeListLibrary_project/clinicalcode/tests/allure-report
diff --git a/CodeListLibrary_project/assets/style.css b/CodeListLibrary_project/assets/style.css
deleted file mode 100644
index 561524c69..000000000
--- a/CodeListLibrary_project/assets/style.css
+++ /dev/null
@@ -1,319 +0,0 @@
-body {
- font-family: Helvetica, Arial, sans-serif;
- font-size: 12px;
- /* do not increase min-width as some may use split screens */
- min-width: 800px;
- color: #999;
-}
-
-h1 {
- font-size: 24px;
- color: black;
-}
-
-h2 {
- font-size: 16px;
- color: black;
-}
-
-p {
- color: black;
-}
-
-a {
- color: #999;
-}
-
-table {
- border-collapse: collapse;
-}
-
-/******************************
- * SUMMARY INFORMATION
- ******************************/
-#environment td {
- padding: 5px;
- border: 1px solid #e6e6e6;
- vertical-align: top;
-}
-#environment tr:nth-child(odd) {
- background-color: #f6f6f6;
-}
-#environment ul {
- margin: 0;
- padding: 0 20px;
-}
-
-/******************************
- * TEST RESULT COLORS
- ******************************/
-span.passed,
-.passed .col-result {
- color: green;
-}
-
-span.skipped,
-span.xfailed,
-span.rerun,
-.skipped .col-result,
-.xfailed .col-result,
-.rerun .col-result {
- color: orange;
-}
-
-span.error,
-span.failed,
-span.xpassed,
-.error .col-result,
-.failed .col-result,
-.xpassed .col-result {
- color: red;
-}
-
-.col-links__extra {
- margin-right: 3px;
-}
-
-/******************************
- * RESULTS TABLE
- *
- * 1. Table Layout
- * 2. Extra
- * 3. Sorting items
- *
- ******************************/
-/*------------------
- * 1. Table Layout
- *------------------*/
-#results-table {
- border: 1px solid #e6e6e6;
- color: #999;
- font-size: 12px;
- width: 100%;
-}
-#results-table th,
-#results-table td {
- padding: 5px;
- border: 1px solid #e6e6e6;
- text-align: left;
-}
-#results-table th {
- font-weight: bold;
-}
-
-/*------------------
- * 2. Extra
- *------------------*/
-.logwrapper {
- max-height: 230px;
- overflow-y: scroll;
- background-color: #e6e6e6;
-}
-.logwrapper.expanded {
- max-height: none;
-}
-.logwrapper.expanded .logexpander:after {
- content: "collapse [-]";
-}
-.logwrapper .logexpander {
- z-index: 1;
- position: sticky;
- top: 10px;
- width: max-content;
- border: 1px solid;
- border-radius: 3px;
- padding: 5px 7px;
- margin: 10px 0 10px calc(100% - 80px);
- cursor: pointer;
- background-color: #e6e6e6;
-}
-.logwrapper .logexpander:after {
- content: "expand [+]";
-}
-.logwrapper .logexpander:hover {
- color: #000;
- border-color: #000;
-}
-.logwrapper .log {
- min-height: 40px;
- position: relative;
- top: -50px;
- height: calc(100% + 50px);
- border: 1px solid #e6e6e6;
- color: black;
- display: block;
- font-family: "Courier New", Courier, monospace;
- padding: 5px;
- padding-right: 80px;
- white-space: pre-wrap;
-}
-
-div.media {
- border: 1px solid #e6e6e6;
- float: right;
- height: 240px;
- margin: 0 5px;
- overflow: hidden;
- width: 320px;
-}
-
-.media-container {
- display: grid;
- grid-template-columns: 25px auto 25px;
- align-items: center;
- flex: 1 1;
- overflow: hidden;
- height: 200px;
-}
-
-.media-container--fullscreen {
- grid-template-columns: 0px auto 0px;
-}
-
-.media-container__nav--right,
-.media-container__nav--left {
- text-align: center;
- cursor: pointer;
-}
-
-.media-container__viewport {
- cursor: pointer;
- text-align: center;
- height: inherit;
-}
-.media-container__viewport img,
-.media-container__viewport video {
- object-fit: cover;
- width: 100%;
- max-height: 100%;
-}
-
-.media__name,
-.media__counter {
- display: flex;
- flex-direction: row;
- justify-content: space-around;
- flex: 0 0 25px;
- align-items: center;
-}
-
-.collapsible td:not(.col-links) {
- cursor: pointer;
-}
-.collapsible td:not(.col-links):hover::after {
- color: #bbb;
- font-style: italic;
- cursor: pointer;
-}
-
-.col-result {
- width: 130px;
-}
-.col-result:hover::after {
- content: " (hide details)";
-}
-
-.col-result.collapsed:hover::after {
- content: " (show details)";
-}
-
-#environment-header h2:hover::after {
- content: " (hide details)";
- color: #bbb;
- font-style: italic;
- cursor: pointer;
- font-size: 12px;
-}
-
-#environment-header.collapsed h2:hover::after {
- content: " (show details)";
- color: #bbb;
- font-style: italic;
- cursor: pointer;
- font-size: 12px;
-}
-
-/*------------------
- * 3. Sorting items
- *------------------*/
-.sortable {
- cursor: pointer;
-}
-.sortable.desc:after {
- content: " ";
- position: relative;
- left: 5px;
- bottom: -12.5px;
- border: 10px solid #4caf50;
- border-bottom: 0;
- border-left-color: transparent;
- border-right-color: transparent;
-}
-.sortable.asc:after {
- content: " ";
- position: relative;
- left: 5px;
- bottom: 12.5px;
- border: 10px solid #4caf50;
- border-top: 0;
- border-left-color: transparent;
- border-right-color: transparent;
-}
-
-.hidden, .summary__reload__button.hidden {
- display: none;
-}
-
-.summary__data {
- flex: 0 0 550px;
-}
-.summary__reload {
- flex: 1 1;
- display: flex;
- justify-content: center;
-}
-.summary__reload__button {
- flex: 0 0 300px;
- display: flex;
- color: white;
- font-weight: bold;
- background-color: #4caf50;
- text-align: center;
- justify-content: center;
- align-items: center;
- border-radius: 3px;
- cursor: pointer;
-}
-.summary__reload__button:hover {
- background-color: #46a049;
-}
-.summary__spacer {
- flex: 0 0 550px;
-}
-
-.controls {
- display: flex;
- justify-content: space-between;
-}
-
-.filters,
-.collapse {
- display: flex;
- align-items: center;
-}
-.filters button,
-.collapse button {
- color: #999;
- border: none;
- background: none;
- cursor: pointer;
- text-decoration: underline;
-}
-.filters button:hover,
-.collapse button:hover {
- color: #ccc;
-}
-
-.filter__label {
- margin-right: 10px;
-}
diff --git a/CodeListLibrary_project/clinicalcode/context_processors/general.py b/CodeListLibrary_project/clinicalcode/context_processors/general.py
index 2fe0433a6..c96da8281 100644
--- a/CodeListLibrary_project/clinicalcode/context_processors/general.py
+++ b/CodeListLibrary_project/clinicalcode/context_processors/general.py
@@ -7,6 +7,7 @@ def general_var(request):
return {
'USER_CREATE_CONTEXT': permission_utils.user_has_create_context(request),
'IS_BRAND_ADMIN': permission_utils.is_requestor_brand_admin(request),
+ 'GA4_STUDIO_LINK': settings.GA4_STUDIO_LINK,
'MEDIA_URL': settings.MEDIA_URL,
'CLL_READ_ONLY': settings.CLL_READ_ONLY,
'SHOWADMIN': settings.SHOWADMIN,
diff --git a/CodeListLibrary_project/clinicalcode/entity_utils/concept_utils.py b/CodeListLibrary_project/clinicalcode/entity_utils/concept_utils.py
index 18be99d41..d12215b33 100644
--- a/CodeListLibrary_project/clinicalcode/entity_utils/concept_utils.py
+++ b/CodeListLibrary_project/clinicalcode/entity_utils/concept_utils.py
@@ -279,7 +279,11 @@ def get_concept_headers(concept_information, default=None):
end as is_published,
concept.phenotype_owner_id,
codingsystem.id as coding_system_id,
- codingsystem.name as coding_system_name
+ codingsystem.name as coding_system_name,
+ case
+ when concept.is_deleted is null then false
+ else concept.is_deleted
+ end as is_deleted
from concept_information as info,
json_array_elements(info.doc) as obj
join public.clinicalcode_concept as concept
@@ -909,10 +913,11 @@ def get_clinical_concept_data(concept_id, concept_history_id, include_reviewed_c
if not latest_version:
latest_version = historical_concept
+ ph_owner_id = concept.phenotype_owner.id if concept.phenotype_owner is not None else None
concept_data['latest_version'] = {
'id': latest_version.id,
'history_id': latest_version.history_id,
- 'is_out_of_date': historical_concept.history_id < latest_version.history_id,
+ 'is_out_of_date': (requested_entity_id is None or requested_entity_id != ph_owner_id) and historical_concept.history_id < latest_version.history_id,
}
concept_data['is_published'] = is_concept_published(concept_id, concept_history_id)
diff --git a/CodeListLibrary_project/clinicalcode/entity_utils/constants.py b/CodeListLibrary_project/clinicalcode/entity_utils/constants.py
index a2120233b..0626806d8 100644
--- a/CodeListLibrary_project/clinicalcode/entity_utils/constants.py
+++ b/CodeListLibrary_project/clinicalcode/entity_utils/constants.py
@@ -105,6 +105,15 @@ class ENTITY_STATUS(int, enum.Enum):
FINAL = 2
+class DELETION_QUERY(int, enum.Enum):
+ """
+ Used to alter query parameters examining the status of UGC
+ """
+ ANY = 0
+ ACTIVE = 1
+ DELETED = 2
+
+
class APPROVAL_STATUS(int, enum.Enum):
"""
Approval status of a published entity
diff --git a/CodeListLibrary_project/clinicalcode/entity_utils/permission_utils.py b/CodeListLibrary_project/clinicalcode/entity_utils/permission_utils.py
index c578b98c7..aa636dc4f 100644
--- a/CodeListLibrary_project/clinicalcode/entity_utils/permission_utils.py
+++ b/CodeListLibrary_project/clinicalcode/entity_utils/permission_utils.py
@@ -25,8 +25,8 @@
from ..models.Organisation import Organisation, OrganisationAuthority
from .constants import (
- ORGANISATION_ROLES, APPROVAL_STATUS,
- GROUP_PERMISSIONS, WORLD_ACCESS_PERMISSIONS
+ APPROVAL_STATUS, DELETION_QUERY,
+ ORGANISATION_ROLES, GROUP_PERMISSIONS, WORLD_ACCESS_PERMISSIONS
)
@@ -967,7 +967,7 @@ def get_accessible_entity_history(
def get_accessible_entities(
request,
consider_user_perms=True,
- only_deleted=False,
+ deletion_query=DELETION_QUERY.ACTIVE,
status=[APPROVAL_STATUS.APPROVED],
min_group_permission=ORGANISATION_ROLES.MEMBER,
consider_brand=True,
@@ -980,7 +980,7 @@ def get_accessible_entities(
Args:
request (RequestContext): the HTTPRequest
consider_user_perms (boolean): Whether to consider user perms i.e. superuser, moderation status etc
- only_deleted (boolean): Whether to incl/excl deleted entities
+ deletion_query (enum): Specifies how deleted entities should be handled
status (list): A list of publication statuses to consider
group_permissions (list): A list of which group permissions to consider
consider_brand (boolean): Whether to consider the request Brand (only applies to Moderators, Non-Auth'd and Auth'd accounts)
@@ -1011,15 +1011,16 @@ def get_accessible_entities(
if brand is not None:
results = GenericEntity.objects.filter(brands__overlap=[brand.id])
- if only_deleted:
- results = results.filter(is_deleted=True)
- else:
- results = results.exclude(is_deleted=True)
-
results = GenericEntity.history \
.filter(id__in=list(results.values_list('id', flat=True)))
else:
results = GenericEntity.history.all()
+
+ if deletion_query == DELETION_QUERY.ACTIVE:
+ results = results.exclude(is_deleted=True)
+ elif deletion_query == DELETION_QUERY.DELETED:
+ results = results.filter(is_deleted=True)
+
return results.latest_of_each()
# Anon user query
@@ -1063,22 +1064,6 @@ def get_accessible_entities(
cursor.execute(sql, query_params)
return GenericEntity.history.filter(history_id__in=[row[1] for row in cursor.fetchall()])
- # Clean publication status
- pub_status = status.copy() if isinstance(status, list) else []
- if consider_user_perms and is_member(user, 'Moderators'):
- pub_status += [
- APPROVAL_STATUS.REQUESTED,
- APPROVAL_STATUS.PENDING,
- APPROVAL_STATUS.REJECTED
- ]
-
- if len(pub_status) > 0:
- pub_status = [
- x.value if x in APPROVAL_STATUS else gen_utils.parse_int(x, default=None)
- for x in pub_status
- if x in APPROVAL_STATUS or gen_utils.parse_int(x, default=None) is not None
- ]
-
# Non-anon user
# i.e. dependent on user role
org_view_clause = ''
@@ -1098,30 +1083,61 @@ def get_accessible_entities(
'role_enum': min_group_permission
})
- if len(pub_status) < 1:
- clauses += f'''
- or hist_entity.publish_status != {APPROVAL_STATUS.PENDING.value}
- '''
- elif APPROVAL_STATUS.ANY in pub_status or APPROVAL_STATUS.ANY.value in pub_status:
- clauses += f'''
- or hist_entity.publish_status = {APPROVAL_STATUS.APPROVED.value}
- '''
+ # Clean publication status
+ pub_status = status.copy() if isinstance(status, list) else []
+ if consider_user_perms:
+ if user.is_superuser:
+ pub_status += [
+ APPROVAL_STATUS.ANY,
+ APPROVAL_STATUS.REQUESTED,
+ APPROVAL_STATUS.PENDING,
+ APPROVAL_STATUS.REJECTED
+ ]
+ elif is_member(user, 'Moderators'):
+ pub_status += [
+ APPROVAL_STATUS.REQUESTED,
+ APPROVAL_STATUS.PENDING,
+ APPROVAL_STATUS.REJECTED
+ ]
+
+ if len(pub_status) > 0:
+ pub_status = [
+ x.value if x in APPROVAL_STATUS else gen_utils.parse_int(x, default=None)
+ for x in pub_status
+ if x in APPROVAL_STATUS or gen_utils.parse_int(x, default=None) is not None
+ ]
+
+ if not consider_user_perms or not user.is_superuser or not is_member(user, 'Moderators'):
+ if len(pub_status) < 1:
+ clauses += f'''
+ or hist_entity.publish_status != {APPROVAL_STATUS.PENDING.value}
+ '''
+ elif APPROVAL_STATUS.ANY in pub_status or APPROVAL_STATUS.ANY.value in pub_status:
+ clauses += f'''
+ or hist_entity.publish_status = {APPROVAL_STATUS.APPROVED.value}
+ '''
+ else:
+ clauses += '''
+ or hist_entity.publish_status = any(%(pub_status)s)
+ '''
+ query_params.update({ 'pub_status': pub_status })
else:
- clauses += '''
- or hist_entity.publish_status = any(%(pub_status)s)
- '''
- query_params.update({ 'pub_status': pub_status })
+ clauses += '''
+ or hist_entity.publish_status = any(%(pub_status)s)
+ '''
+ query_params.update({ 'pub_status': pub_status })
+ # Deletion status
conditional = ''
- if only_deleted:
- conditional = '''
- and live_entity.id is not null and live_entity.is_deleted = true
- '''
- else:
- conditional = '''
- and (live_entity.is_deleted is null or live_entity.is_deleted = false)
- and (hist_entity.is_deleted is null or hist_entity.is_deleted = false)
- '''
+ if deletion_query == DELETION_QUERY.ACTIVE:
+ conditional = '''
+ and (live_entity.is_deleted is null or live_entity.is_deleted = false)
+ and (hist_entity.is_deleted is null or hist_entity.is_deleted = false)
+ '''
+ elif deletion_query == DELETION_QUERY.DELETED:
+ conditional = '''
+ and live_entity.id is not null and live_entity.is_deleted = true
+ '''
sql = f'''
select t0.id, t0.history_id
@@ -1498,9 +1514,15 @@ def get_accessible_detail_entity(request, entity_id, entity_history_id=None):
is_viewable = False
is_editable = False
- is_published = historical_entity.publish_status == APPROVAL_STATUS.APPROVED.value
is_org_accessible = False
+ pub_ent = None
+ if historical_entity.publish_status == APPROVAL_STATUS.APPROVED.value:
+ pub_ent = PublishedGenericEntity.objects.filter(entity_id=entity_id, entity_history_id=entity_history_id)
+ pub_ent = pub_ent.first() if pub_ent.exists() and pub_ent.first().approval_status == APPROVAL_STATUS.APPROVED.value else None
+
+ is_published = pub_ent is not None
+
if user is not None:
is_owner = live_entity.owner == user
is_moderatable = False
diff --git a/CodeListLibrary_project/clinicalcode/entity_utils/search_utils.py b/CodeListLibrary_project/clinicalcode/entity_utils/search_utils.py
index 02d069851..6b4cf1d67 100644
--- a/CodeListLibrary_project/clinicalcode/entity_utils/search_utils.py
+++ b/CodeListLibrary_project/clinicalcode/entity_utils/search_utils.py
@@ -708,7 +708,8 @@ def get_template_entities(request, template_id, method='GET', force_term=True, f
entities = permission_utils.get_accessible_entities(
request,
- status=[constants.APPROVAL_STATUS.ANY]
+ status=[constants.APPROVAL_STATUS.APPROVED],
+ deletion_query=constants.DELETION_QUERY.ACTIVE,
)
metadata_filters = [key for key, value in constants.metadata.items() if 'search' in value and 'filterable' in value.get('search')]
@@ -815,7 +816,8 @@ def get_renderable_entities(request, entity_types=None, method='GET', force_term
# Get entities relating to the user
entities = permission_utils.get_accessible_entities(
request,
- status=[constants.APPROVAL_STATUS.ANY]
+ status=[constants.APPROVAL_STATUS.APPROVED],
+ deletion_query=constants.DELETION_QUERY.ACTIVE,
)
if isinstance(entity_types, list) and len(entity_types) > 0:
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/README.md b/CodeListLibrary_project/clinicalcode/tests/legacy/README.md
deleted file mode 100644
index 6a7dcaa96..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/README.md
+++ /dev/null
@@ -1,33 +0,0 @@
-
-## CODE LIST LIBRARY TEST CODE
-
-_26/10/2018, Pete Arnold_
-
-The code is currently under development.
-
-The test run procedure will run all tests in all directories within the
-clinicalcode directory tree not just those in the test directory. Old tests may
-be moved soon.
-
-
-# The directory structure
-
-Assuming the CodeListLibrary/CodeListLibrary_project directory is the base
-directory. The tests have been gathered together at:
-
- clinicalcode/tests
-
-This directory should contain any webdriver modules (e.g. chromedriver.exe). It
-will also contain the base test classes and functions. The tests are gathered
-in two folders - unit_tests and functional_tests.
-
-
-# To run the tests :-
-
-To run all of the tests, use:
-
- manage.py test
-
-Note that this will not work if there is a tests.py file in the clinicalcode
-directory as well as the tests directory.
-
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/__init__.py b/CodeListLibrary_project/clinicalcode/tests/legacy/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_test_base.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_test_base.py
deleted file mode 100644
index 6aa9aabf3..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_test_base.py
+++ /dev/null
@@ -1,99 +0,0 @@
-'''
- Test base class
-
- Set-up and tear-down etc. for unit tests and functional tests.
-'''
-import datetime
-import os
-import time
-
-from clinicalcode.tests.test_base import *
-#from django.conf import settings
-from cll import test_settings as settings
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from selenium import webdriver
-from selenium.common.exceptions import WebDriverException
-from selenium.webdriver.common.keys import Keys
-
-SCREEN_DUMP_LOCATION = os.path.join(os.path.dirname(os.path.abspath(__file__)),
- 'screendumps')
-
-base_url = settings.WEBAPP_HOST
-login_url = base_url + '/account/login?next=/'
-'''
- Test helper functions.
-'''
-MAX_WAIT = 10
-
-
-def wait(fn):
-
- def modified_fn(*args, **kwargs):
- start_time = time.time()
- while True:
- try:
- return fn(*args, **kwargs)
- except (AssertionError, WebDriverException) as e:
- if time.time() - start_time > MAX_WAIT:
- raise e
- time.sleep(0.5)
-
- return modified_fn
-
-
-class FunctionalTest(StaticLiveServerTestCase):
-
- def setUp(self):
- if settings.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings.REMOTE_TEST_HOST,
- desired_capabilities=settings.chrome_options.to_capabilities())
- self.browser.implicitly_wait(settings.IMPLICTLY_WAIT)
- else:
- self.browser = webdriver.Chrome()
-
- def list2reason(self, exc_list):
- if exc_list and exc_list[-1][0] is self:
- return exc_list[-1][1]
-
- def tearDown(self):
- print("Functional test tear-down ...")
- self.result = getattr(self, '_outcomeForDoCleanups',
- self._resultForDoCleanups)
- #error = self.list2reason(result.errors)
- #failure = self.list2reason(result.failures)
- #ok = not error and not failure
- if self._test_has_failed():
- if not os.path.exists(SCREEN_DUMP_LOCATION):
- os.makedirs(SCREEN_DUMP_LOCATION)
- for ix, handle in enumerate(self.browser.window_handles):
- self._windowid = ix
- self.browser.switch_to_window(handle)
- self.take_screenshot()
- self.dump_html()
- self.browser.quit()
- #super(StaticLiveServerTestCase).tearDown()
-
- def _test_has_failed(self):
- # slightly obscure but couldn't find a better way!
- return any(error for (method, error) in self.result.errors)
-
- def take_screenshot(self):
- filename = self._get_filename() + '.png'
- print(('sending screenshot to', filename))
- self.browser.get_screenshot_as_file(filename)
-
- def dump_html(self):
- filename = self._get_filename() + '.html'
- print(('dumping page HTML to', filename))
- with open(filename, 'w') as f:
- f.write(self.browser.page_source.encode('utf8'))
-
- def _get_filename(self):
- timestamp = datetime.datetime.now().isoformat().replace(':', '.')[:19]
- return '{folder}/{classname}.{method}-window{windowid}-{timestamp}'.format(
- folder=SCREEN_DUMP_LOCATION,
- classname=self.__class__.__name__,
- method=self._testMethodName,
- windowid=self._windowid,
- timestamp=timestamp)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/__init__.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/chromedriver b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/chromedriver
deleted file mode 100644
index e334db3e0..000000000
Binary files a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/chromedriver and /dev/null differ
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/chromedriver.exe b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/chromedriver.exe
deleted file mode 100644
index 4f5f3f055..000000000
Binary files a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/chromedriver.exe and /dev/null differ
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/__init__.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/test_functional_read_only_conf_concept.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/test_functional_read_only_conf_concept.py
deleted file mode 100644
index 5ef58d2c9..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/test_functional_read_only_conf_concept.py
+++ /dev/null
@@ -1,561 +0,0 @@
-import sys
-import time
-from datetime import datetime
-from os.path import dirname
-from unittest import skip, skipIf
-
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-# from django.conf import settings
-# from cll import read_only_test_settings
-# from cll import test_settings as settings
-from cll import read_only_test_settings as settings
-from decouple import Config, RepositoryEnv
-from django.contrib.auth import logout
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from django.test import modify_settings, override_settings
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.common.exceptions import NoSuchElementException
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-'''
- If arguments does not contain read_only substring then skip the test
- because it means that read only settings are not used and tests will fail.
- See manage.py to see how it works.
-'''
-
-
-@skipIf('read_only' not in sys.argv[-1], "READ ONLY TEST SKIPPED")
-class ReadOnlyTestConcept(StaticLiveServerTestCase):
-
- def setUp(self):
- # settings for gitlab running
- location = dirname(dirname(__file__))
- if settings.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings.REMOTE_TEST_HOST,
- desired_capabilities=settings.chrome_options.to_capabilities())
- self.browser.implicitly_wait(settings.IMPLICTLY_WAIT)
- else:
- if settings.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings.chrome_options)
- super(ReadOnlyTestConcept, self).setUp()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings.REMOTE_TEST:
- self.WEBAPP_HOST = settings.WEBAPP_HOST
- '''data'''
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
- view_group_user = User.objects.create_user(username=vgp_user,
- password=vgp_password,
- email=None)
- edit_group_user = User.objects.create_user(username=egp_user,
- password=egp_password,
- email=None)
-
- # Groups: a group that is not permitted and one that is.
- permitted_group = Group.objects.create(name="permitted_group")
- forbidden_group = Group.objects.create(name="forbidden_group")
- view_group = Group.objects.create(name="view_group")
- edit_group = Group.objects.create(name="edit_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(permitted_group)
- view_group_user.groups.add(view_group)
- edit_group_user.groups.add(edit_group)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- self.concept_everybody_can_edit = Concept.objects.create(
- name="concept_everybody_can_edit",
- description="concept_everybody_can_edit",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- update_friendly_id()
-
-
- def tearDown(self):
- self.browser.quit()
- super(ReadOnlyTestConcept, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- '''
- A user cannot revert a concept.
- '''
-
- def test_normal_user_cannot_revert(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/version/',
- # self.concept_everybody_can_edit.history.first().history_id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'concept_history_detail',
- kwargs={
- 'pk':
- self.concept_everybody_can_edit.id,
- 'concept_history_id':
- self.concept_everybody_can_edit.history.first().history_id
- }))
-
- time.sleep(settings.TEST_SLEEP_TIME)
- # self.wait_to_be_logged_in(nm_user)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'revert-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_normal_user_cannot_revert_through_url(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/revert/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_owner_cannot_revert(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'revert-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_owner_cannot_revert_through_url(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/revert/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- '''
- A user cannot fork a concept.
- '''
-
- def test_normal_user_cannot_fork_in_detail(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'fork-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_normal_user_cannot_fork_through_url(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/fork/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_normal_user_cannot_fork_in_history(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'fork-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_normal_user_cannot_fork_through_history_url(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/fork/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_owner_cannot_fork_in_detail(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'fork-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_owner_cannot_fork_through_url(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/fork/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_owner_cannot_fork_in_history(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
-
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'fork-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_owner_cannot_fork_through_history_url(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/fork/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- '''
- A super user CANNOT create, edit, revert, or fork a working set.
- '''
-
- def test_super_user_cannot_create(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s' % (self.WEBAPP_HOST, '/concepts/create/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_super_user_cannot_edit(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/update/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_super_user_cannot_revert(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'revert-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_super_user_cannot_revert_through_url(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/revert/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_super_user_cannot_fork_in_detail(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
- # self.wait_to_be_logged_in(su_user)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'fork-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_super_user_cannot_fork_through_url(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/fork/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_super_user_cannot_fork_in_hisotry(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'fork-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_super_user_cannot_fork_through_history_url(self):
- self.login(su_user, su_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.first().history_id,
- '/revert/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- '''
- A user cannot edit by creating their own URL string to bypass the interface.
- '''
-
- def test_normal_user_cannot_edit_by_own_url(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/update/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_owner_cannot_edit_by_own_url(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/update/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/test_functional_read_only_conf_workingset.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/test_functional_read_only_conf_workingset.py
deleted file mode 100644
index 3d1dbe2a3..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/read_only/test_functional_read_only_conf_workingset.py
+++ /dev/null
@@ -1,304 +0,0 @@
-import sys
-import time
-from datetime import datetime
-from os.path import dirname
-from unittest import skip, skipIf
-
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-# from django.conf import settings
-# from cll import read_only_test_settings
-# from cll import test_settings as settings
-from cll import read_only_test_settings as settings
-from decouple import Config, RepositoryEnv
-from django.contrib.auth import logout
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from django.test import override_settings
-from selenium import webdriver
-from selenium.common.exceptions import NoSuchElementException
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-'''
- If arguments does not contain read_only substring then skip the test
- because it means that read only settings are not used and tests will fail.
- See manage.py to see how it works.
-'''
-
-
-@skipIf('read_only' not in sys.argv[-1], "READ ONLY TEST SKIPPED")
-class ReadOnlyTestWorkingSet(StaticLiveServerTestCase):
-
- def setUp(self):
-
- location = dirname(dirname(__file__))
- if settings.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings.REMOTE_TEST_HOST,
- desired_capabilities=settings.chrome_options.to_capabilities())
- else:
- if settings.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings.chrome_options)
- super(ReadOnlyTestWorkingSet, self).setUp()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings.REMOTE_TEST:
- self.WEBAPP_HOST = settings.WEBAPP_HOST
-
- # Users: a normal user and a super_user.
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
- view_group_user = User.objects.create_user(username=vgp_user,
- password=vgp_password,
- email=None)
- edit_group_user = User.objects.create_user(username=egp_user,
- password=egp_password,
- email=None)
-
- # Groups: a group that is not permitted and one that is.
- permitted_group = Group.objects.create(name="permitted_group")
- forbidden_group = Group.objects.create(name="forbidden_group")
- view_group = Group.objects.create(name="view_group")
- edit_group = Group.objects.create(name="edit_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(permitted_group)
- view_group_user.groups.add(view_group)
- edit_group_user.groups.add(edit_group)
-
- self.workingset_everybody_can_edit = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.EDIT,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- update_friendly_id()
-
- def tearDown(self):
- self.browser.quit()
- super(ReadOnlyTestWorkingSet, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- '''
- A user cannot revert a working set.
- '''
-
- def test_normal_user_cannot_revert(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'revert-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
-
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_normal_user_cannot_revert_through_url(self):
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.first().history_id,
- '/revert/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
- # self.wait_to_be_logged_in(nm_user)
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_owner_cannot_revert(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'revert-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
-
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_owner_cannot_revert_through_url(self):
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.first().history_id,
- '/revert/'))
- time.sleep(settings.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- '''
- A super user CANNOT create, edit, revert a working set.
- '''
-
- def test_super_user_cannot_create(self):
- browser = self.browser
- # get the test server url
- browser.get('%s%s' % (self.WEBAPP_HOST, '/workingsets/create/'))
-
- self.login(su_user, su_password)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_super_user_cannot_edit(self):
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/update/'))
-
- self.login(su_user, su_password)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_super_user_cannot_revert(self):
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.first().history_id,
- '/detail/'))
-
- self.login(su_user, su_password)
-
- exist = True
- try:
- button = self.browser.find_element(By.ID, 'revert-btn')
- is_disabled = button.get_attribute("disabled")
- self.assertTrue(is_disabled)
-
- return True
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_super_user_cannot_revert_through_url(self):
- browser = self.browser
- # get the test server url
- browser.get(
- '%s%s%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.first().history_id,
- '/revert/'))
-
- self.login(su_user, su_password)
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- '''
- A user cannot edit by creating their own URL string to bypass the interface.
- '''
-
- def test_normal_user_cannot_edit_by_own_url(self):
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/update/'))
-
- self.login(nm_user, nm_password)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_owner_cannot_edit_by_own_url(self):
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/update/'))
-
- self.login(ow_user, ow_password)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_functional_other.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_functional_other.py
deleted file mode 100644
index a828cf3be..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_functional_other.py
+++ /dev/null
@@ -1,1262 +0,0 @@
-import random
-import time
-from datetime import datetime
-
-from clinicalcode.models import Tag, Brand
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from clinicalcode.views.Concept import concept_codes_to_csv
-from clinicalcode.views.WorkingSet import workingset_to_csv
-from cll import test_settings as settings_cll
-from decouple import Config, RepositoryEnv
-from django.conf import settings as setting_django
-from django.contrib.auth import logout
-from django.contrib.auth.models import AnonymousUser
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from django.test import (Client, LiveServerTestCase, RequestFactory,
- override_settings)
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.common.exceptions import NoSuchElementException
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-# from django.conf import settings
-# from cll import settings as settings_cll
-# from cll import test_settings as settings
-
-
-class OtherTest(StaticLiveServerTestCase):
-
- def setUp(self):
- # chrome_options = webdriver.ChromeOptions()
-
- # chrome_options.add_experimental_option( "prefs",{'profile.managed_default_content_settings.javascript': 'enable'})
- # chrome_options.add_argument('--headless')
- # chrome_options.add_argument("--no-sandbox")
- # chrome_options.add_argument("--disable-dev-shm-usage")
- #
- # chrome_options.add_argument("--start-maximized")
- # chrome_options.add_argument("--disable-gpu")
- # #chrome_options.add_argument("--window-size=1280,800")
- # chrome_options.add_argument("--allow-insecure-localhost")
-
- self.factory = RequestFactory()
-
- location = os.path.dirname(__file__)
- if settings_cll.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings_cll.REMOTE_TEST_HOST,
- desired_capabilities=settings_cll.chrome_options.
- to_capabilities())
- else:
- if settings_cll.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings_cll.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings_cll.chrome_options)
- super(OtherTest, self).setUp()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings_cll.REMOTE_TEST:
- self.WEBAPP_HOST = self.WEBAPP_HOST
-
- # Users: a normal user and a super_user.
- self.normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- self.owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
-
- permitted_group = Group.objects.create(name="permitted_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(permitted_group)
-
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- self.brand = self.create_brand("HDRUK", "cll/static/img/brands/HDRUK")
-
- self.nameTagsOrCollections = [
- "Phenotype_library", "Adolescent Data Platform (ADP)", "BREATHE", "CALIBER", "PIONEER",
- "SAIL","ClinicalCodes Repository", "COVID-19","DATAMIND","BHF Data Science Centre",
- "feasibility-check","TECC"
- ]
-
- self.tags = [self.creat_tag(i,self.brand) for i in self.nameTagsOrCollections[:6]]
- self.collections = [self.creat_collection(j,self.brand) for j in self.nameTagsOrCollections[6:]]
-
- self.concept_everybody_can_view = Concept.objects.create(
- name="concept everybody can view",
- description="concept description",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- tags=[1],
- code_attribute_header=[],
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.VIEW)
- self.concept_everybody_can_view.save()
-
- self.concept_everybody_can_edit = Concept.objects.create(
- name="concept everybody can edit",
- description="concept description",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- tags=[1],
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- self.concept_none_can_access = Concept.objects.create(
- name="concept everybody can edit",
- description="concept description",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- tags=[1],
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.EDIT,
- owner_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- self.child_concept = Concept.objects.create(
- name="child concept",
- description="child concept",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=self.owner_user,
- tags=[1],
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.VIEW)
-
- self.concept_with_excluded_codes = Concept.objects.create(
- name="child concept",
- description="child concept",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- tags=[1],
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- component = Component.objects.create(
- comment="child concept",
- component_type=1,
- concept=self.concept_everybody_can_view,
- concept_ref=self.child_concept,
- concept_ref_history_id=self.child_concept.history.first(
- ).history_id,
- created_by=self.owner_user,
- logical_type=1,
- name="child concept")
-
- code_child = CodeList.objects.create(component=component,
- description="child")
- self.code_child = Code.objects.create(code_list=code_child,
- code="45512354",
- description="child test")
-
- component_excluded = Component.objects.create(
- comment="Component 2 exclusion",
- component_type=2,
- concept=self.concept_with_excluded_codes,
- created_by=self.owner_user,
- logical_type=2,
- name="Component 2 exclusion")
-
- code_list = CodeList.objects.create(component=component_excluded,
- description="Code list exclusion")
- self.code_excluded1 = Code.objects.create(code_list=code_list,
- code="45554",
- description="Exclusion Test")
- self.code_excluded2 = Code.objects.create(code_list=code_list,
- code="24212",
- description="Exclusion test")
-
- self.concept_with_excluded_and_included_codes = Concept.objects.create(
- name="child concept",
- description="child concept",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- tags=[1],
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.VIEW)
-
- component_included = Component.objects.create(
- comment="Component 2 exclusion",
- component_type=2,
- concept=self.concept_with_excluded_and_included_codes,
- created_by=self.owner_user,
- logical_type=1,
- name="Component 2 exclusion")
-
- component_excluded2 = Component.objects.create(
- comment="Component 2 exclusion",
- component_type=2,
- concept=self.concept_with_excluded_and_included_codes,
- created_by=self.owner_user,
- logical_type=2,
- name="Component 2 exclusion")
-
- code_list_excluded = CodeList.objects.create(
- component=component_excluded2, description="Code list exclusion")
- code_list_included = CodeList.objects.create(
- component=component_included, description="Code list inclusion")
-
- # These are the same two instances of the same code to make it included and excluded
- self.code_excluded3 = Code.objects.create(
- code_list=code_list_excluded,
- code="1111",
- description="Inclusion/Exclusion test")
- self.code_included = Code.objects.create(
- code_list=code_list_included,
- code="1111",
- description="Inclusion/Exclusion Test")
-
- self.workingset_everybody_can_view = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"3":{"ttt|3":"yyy"}}],
- concept_version={"3": 1},
- created_by=super_user,
- updated_by=super_user,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.VIEW,
- owner_access=Permissions.VIEW,
- world_access=Permissions.VIEW)
-
- self.workingset_everybody_can_edit = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{str(self.concept_everybody_can_view.id):{"ttt|3":"yyy"}},
- {str(self.concept_everybody_can_edit.id):{"ttt|3":"yyy"}}],
- concept_version={
- (str(self.concept_everybody_can_view.id)):
- self.concept_everybody_can_view.history.first().history_id,
- (str(self.concept_everybody_can_edit.id)):
- self.concept_everybody_can_edit.history.first().history_id
- },
- created_by=super_user,
- updated_by=super_user,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.VIEW,
- owner_access=Permissions.VIEW,
- world_access=Permissions.EDIT)
-
- self.workingset_none_can_access = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{str(self.concept_everybody_can_view.id):{"ttt|3":"yyy"}}],
- concept_version={
- (str(self.concept_everybody_can_view.id)):
- self.concept_everybody_can_view.history.first().history_id
- },
- created_by=super_user,
- updated_by=super_user,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.EDIT,
- world_access=Permissions.NONE)
-
- concept_info_list = [{str(self.concept_with_excluded_codes.id):{"ttt|3":"yyy"}}]
-
- self.workingset_with_excluded_codes = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=concept_info_list,
- concept_version={
- (str(self.concept_with_excluded_codes.id)):
- self.concept_with_excluded_codes.history.first().history_id
- },
- # "1"
- created_by=super_user,
- updated_by=super_user,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.EDIT,
- world_access=Permissions.NONE)
-
- concept_info_list2 = [{str(self.concept_with_excluded_and_included_codes.id):{"ttt|3":"yyy"}}]
-
- self.workingset_with_excluded_and_included_codes = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=concept_info_list2,
- concept_version={
- (str(self.concept_with_excluded_and_included_codes.id)):
- self.concept_with_excluded_and_included_codes.history.first().
- history_id
- },
- # "1"
- created_by=super_user,
- updated_by=super_user,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.EDIT,
- world_access=Permissions.NONE)
-
- update_friendly_id()
- save_stat(self.WEBAPP_HOST)
-
- def creat_tag(self, nametag, brand):
- tag = Tag.objects.create(collection_brand=brand,
- description=nametag,
- created_by=self.owner_user,
- tag_type=1,
- display=random.randint(1, 6)).save()
- return tag
-
- def creat_collection(self, nametag, brand):
- collection = Tag.objects.create(collection_brand=brand,
- description=nametag,
- created_by=self.owner_user,
- tag_type=2,
- display=random.randint(1, 6)).save()
- return collection
-
- def create_brand(self, nameBrand, pathBrand):
- brand = Brand.objects.create(name=nameBrand,
- description='',
- logo_path=pathBrand,
- css_path=pathBrand,
- owner=self.owner_user).save()
- return brand
-
- def tearDown(self):
- # self.browser.refresh()
- self.browser.quit()
- super(OtherTest, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- # self.browser.get('%s%s' % (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
- self.browser.get(
- '%s%s' % (self.live_server_url.replace('localhost', '127.0.0.1'),
- '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- '''
- If one or more of workingset concepts is deleted or revoked permission
- I do not have permission to view, cannot export csv and run api
- '''
-
- def test_revoking_permission(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/update/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- browser.find_element(
- By.XPATH,
- ".//input[@type='radio' and @name='world_access' and @value='1']"
- ).click() # Change world access permission to none
- browser.find_element(By.ID, "save-changes").click() # save
-
- self.logout()
- # ----------------------
- self.login(nm_user, nm_password) # logging as normal user
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/detail/'))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('workingset_detail',
- kwargs={'pk': self.workingset_everybody_can_edit.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- export_button = self.browser.find_element(By.ID, 'export-btn')
- is_disabled = export_button.get_attribute("disabled")
- self.assertTrue(is_disabled)
-
- # Try to export to csv bu URL
- # Todo needs to be confirmed which url should be used for reverse
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.concept_everybody_can_view.id, '/export/concepts/'))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_workingset_codes/',
- # self.workingset_everybody_can_edit.id))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('api:api_export_workingset_codes',
- kwargs={'pk': self.workingset_everybody_can_edit.id}))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("You do not have permission to perform this action."
- or "Permission denied" in browser.page_source)
-
- def test_deleting_concept(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/delete/'))
- browser.get(self.WEBAPP_HOST +
- reverse('concept_delete',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- submit_button = browser.find_element(
- By.XPATH, "//button[@type='submit']").click()
-
- is_deleted = Concept.objects.get(
- pk=self.concept_everybody_can_edit.id).is_deleted
- # print(self.concept_everybody_can_edit.id)
- self.assertTrue(
- is_deleted,
- "concept is not deleted!") # make sure that concept is deleted
-
- self.logout()
- # --------------------
- self.login(nm_user, nm_password) # logging as normal user
-
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/detail/'))
- #
- browser.get(self.WEBAPP_HOST +
- reverse('workingset_detail',
- kwargs={
- 'pk': self.workingset_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- export_button = self.browser.find_element(By.ID, 'export-btn')
- # print(str(export_button))
- is_disabled = export_button.get_attribute("disabled")
- # print(is_disabled)
- self.assertTrue(is_disabled)
-
- # Try to export to csv bu URL
- # Todo needs to be confirmed which url should be used for reverse
- browser.get('%s%s%s%s' %
- (self.WEBAPP_HOST, '/workingsets/WS',
- self.concept_everybody_can_view.id, '/export/concepts/'))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_workingset_codes/',
- # self.workingset_everybody_can_edit.id))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('api:api_export_workingset_codes',
- kwargs={'pk': self.workingset_everybody_can_edit.id}))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("You do not have permission to perform this action."
- or "Permission denied" in browser.page_source)
-
- '''
- Check if user has access to update, delete, API when
- concept world access value is set to VIEW. test export button AND API
- '''
-
- def test_access_to_concept_update(self):
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/update/'))
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_access_to_concept_delete(self):
- deleted_concept = self.concept_everybody_can_view
- deleted_concept.is_deleted = True
- deleted_concept.save()
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # deleted_concept.id, '/delete/'))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_delete', kwargs={'pk': deleted_concept.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- # print("bps="+browser.page_source)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- # self.logout()
-
- def test_access_to_concept_revert(self):
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/version/',
- # self.concept_everybody_can_view.history.first().history_id, '/revert/'))
- browser.get(self.WEBAPP_HOST + reverse(
- 'concept_history_revert',
- kwargs={
- 'pk':
- self.concept_everybody_can_view.id,
- 'concept_history_id':
- self.concept_everybody_can_view.history.first().history_id
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- # self.login(nm_user, nm_password)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_access_to_workingset_update(self):
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.concept_everybody_can_view.id, '/update/'))
- browser.get(self.WEBAPP_HOST +
- reverse('workingset_update',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_access_to_workingset_delete(self):
-
- self.login(nm_user, nm_password)
- browser = self.browser
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.concept_everybody_can_view.id, '/delete/'))
- browser.get(self.WEBAPP_HOST +
- reverse('workingset_delete',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_access_to_workingset_revert(self):
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.concept_everybody_can_view.id, '/version/',
- # self.concept_everybody_can_view.history.first().history_id, '/revert/'))
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'workingset_history_revert',
- kwargs={
- 'pk':
- self.concept_everybody_can_view.id,
- 'workingset_history_id':
- self.concept_everybody_can_view.history.first().history_id
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- # print(browser.page_source )
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source)
-
- def test_concept_api(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
-
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_concept_codes/',
- # self.concept_none_can_access.id))
-
- browser.get(self.WEBAPP_HOST +
- reverse('api:api_export_concept_codes',
- kwargs={'pk': self.concept_none_can_access.id}))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("You do not have permission to perform this action."
- or "Permission denied" in browser.page_source)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/concepts/C',
- # self.concept_none_can_access.id))
-
- browser.get(self.WEBAPP_HOST +
- reverse('api:concept_by_id',
- kwargs={
- 'pk': self.concept_none_can_access.id,
- }))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("Not found." in browser.page_source)
-
- def test_workingset_api(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_workingset_codes/',
- # self.workingset_none_can_access.id))
-
- browser.get(self.WEBAPP_HOST +
- reverse('api:api_export_workingset_codes',
- kwargs={'pk': self.workingset_none_can_access.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("You do not have permission to perform this action."
- or "Permission denied" in browser.page_source)
-
- '''
- If one or more child concepts of a concept is deleted or
- revoked permission I do not have permission to view
- '''
-
- def test_child_concept_revoked_permission(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
-
- # check if normal user can see concept
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # user should be able to see concept
- self.assertTrue("403: Permission denied" not in browser.page_source
- and # or
- "500: Page unavailable" not in browser.page_source)
-
- self.logout()
-
- # login as owner and change permission
- self.login(ow_user, ow_password)
-
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.child_concept.id, '/update/'))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_update', kwargs={
- 'pk': self.child_concept.id,
- }))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- browser.find_element(
- By.XPATH,
- ".//input[@type='radio' and @name='world_access' and @value='1']"
- ).click() # Change world access permission to none
- browser.find_element(By.ID, "save-changes").click() # save
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_view.id,
- }))
- # Update the child concept
- browser.find_element(By.XPATH, '//*[@title="Edit component"]').click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- # Time wait for changes for cicking apply button
- browser.find_element(By.ID, "saveBtn2").click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- self.logout()
-
- # login again as normal user and check if permission denied appears for concept with child
- self.login(nm_user, nm_password)
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- export_button = self.browser.find_element(By.ID, 'export-btn')
- is_disabled = export_button.get_attribute("disabled")
-
- self.assertTrue(is_disabled)
-
- # Try to export csv bu using URL
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/export/codes/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_codes_to_csv',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source
- or "Not found." in browser.page_source)
-
- def test_child_concept_deleted(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
-
- # check if normal user can see concept
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # user should be able to see concept
- self.assertTrue("403: Permission denied" not in browser.page_source
- or "500: Page unavailable" not in browser.page_source)
-
- self.logout()
-
- # login as owner and delete concept
- self.login(ow_user, ow_password)
-
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.child_concept.id, '/delete/'))
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_delete', kwargs={'pk': self.child_concept.id}))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- submit_button = browser.find_element(
- By.XPATH, "//button[@type='submit']").click()
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_view.id,
- }))
-
- # Time wait for changes for cicking apply button to save current parent concept
- browser.find_element(By.ID, "save-changes").click() # save
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- self.logout()
-
- # login again as normal user and check if permission denied appears for concept with child
- self.login(nm_user, nm_password)
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- export_button = self.browser.find_element(By.ID, 'export-btn')
-
- is_disabled = export_button.get_attribute("disabled")
- self.assertTrue(is_disabled)
-
- # Try to export csv bu using URL
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_view.id, '/export/codes/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_codes_to_csv',
- kwargs={'pk': self.concept_everybody_can_view.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue("403: Permission denied" in browser.page_source
- or "500: Page unavailable" in browser.page_source
- or "Not found." in browser.page_source)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_concept_codes/',
- # self.workingset_everybody_can_edit.id))
-
- # self.assertTrue("Permission denied" in browser.page_source)
-
- '''
- BrowsableAPI
- '''
-
- def test_if_buttons_exist(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- #browser.get('%s%s' % (self.WEBAPP_HOST, '/api/'))
- browser.get('%s%s' %
- (self.WEBAPP_HOST, reverse('api:root', kwargs={})))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- exist = True
- try:
- browser.find_element(By.XPATH, '//button[text()="OPTIONS"]')
- browser.find_element(By.XPATH, '//a[text()="GET"]')
- except NoSuchElementException:
- exist = False
-
- self.assertFalse(exist)
-
- def test_api_is_not_browsable(self):
-
- # self.assertTrue('rest_framework.renderers.BrowsableAPIRenderer' not in settings.REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'])
- test = True
- if setting_django.BROWSABLEAPI == True:
- test = False
-
- if 'DEFAULT_RENDERER_CLASSES' in setting_django.REST_FRAMEWORK:
- if 'rest_framework.renderers.BrowsableAPIRenderer' in setting_django.REST_FRAMEWORK[
- 'DEFAULT_RENDERER_CLASSES']:
- test = False
- print((
- "FROM ELSE: ",
- setting_django.REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES']))
- else:
- test = False # browsable=fail
-
- self.assertTrue(test)
-
- '''
- Test inclusion and exclusion of codes in a concept. (export CSV and API)
- '''
-
- def test_concept_codes_exclusion(self):
- # url = ('%s%s%s' % ('/concepts/C',
- # self.concept_with_excluded_codes.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'concept_codes_to_csv',
- kwargs={'pk': self.concept_with_excluded_codes.id})
-
- request = self.factory.get(url)
- request.user = self.normal_user
- request.CURRENT_BRAND = ''
-
- # pass request to the view
- response = concept_codes_to_csv(request,
- self.concept_with_excluded_codes.id)
-
- print(("RESPONSE ", response.content.decode('utf-8')))
-
- codes = response.content.decode(
- 'utf-8') # list with response content which contains codes
- test_code1 = self.code_excluded1.code
- test_code2 = self.code_excluded2.code #
-
- test = True
- if test_code1 in codes or test_code2 in codes:
- test = False
-
- self.assertTrue(test)
-
- def test_concept_codes_exclusion_in_api(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
-
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_concept_codes/',
- # self.concept_with_excluded_codes.id))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('api:api_export_concept_codes',
- kwargs={'pk': self.concept_with_excluded_codes.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- test_code1 = self.code_excluded1.code
- test_code2 = self.code_excluded2.code
-
- # Make sure that codes do not appear in API
- self.assertFalse(test_code1 in browser.page_source
- or test_code2 in browser.page_source)
-
- def test_concept_codes_inclusion_and_exclusion(self):
- # url = ('%s%s%s' % ('/concepts/C',
- # self.concept_with_excluded_and_included_codes.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'concept_codes_to_csv',
- kwargs={'pk': self.concept_with_excluded_and_included_codes.id})
-
- request = self.factory.get(url)
- request.user = self.normal_user
- request.CURRENT_BRAND = ''
-
- # pass request to the view
- response = concept_codes_to_csv(
- request, self.concept_with_excluded_and_included_codes.id)
-
- codes = response.content.decode(
- 'utf-8') # list with response content which contains codes
- test_code1 = self.code_included.code
- test_code2 = self.code_excluded3.code
-
- test = True
- if test_code1 in codes or test_code2 in codes:
- test = False
-
- self.assertTrue(test)
-
- def test_concept_codes_exclusion_and_inclusion_in_api(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
-
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_concept_codes/',
- # self.concept_with_excluded_codes.id))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('api:api_export_concept_codes',
- kwargs={'pk': self.concept_with_excluded_codes.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- test_code1 = self.code_included.code
- test_code2 = self.code_excluded3.code
-
- # Make sure that codes do not appear in API
- self.assertFalse(test_code1 in browser.page_source
- or test_code2 in browser.page_source)
-
- def test_workingset_exclusion_and_inclusion(self):
- # url = ('%s%s%s' % ('/workingsets/WS',
- # self.workingset_with_excluded_codes.id, '/export/concepts'))
-
- url = self.WEBAPP_HOST + reverse(
- 'workingset_to_csv',
- kwargs={'pk': self.workingset_with_excluded_codes.id})
- request = self.factory.get(url)
- request.user = self.owner_user
- request.CURRENT_BRAND = ''
-
- # pass request to the view
- response = workingset_to_csv(request,
- self.workingset_with_excluded_codes.id)
-
- codes = response.content.decode(
- 'utf-8') # list with response content which contains codes
- test_code1 = self.code_excluded1.code
- test_code2 = self.code_excluded2.code
-
- test = True
- if test_code1 in codes or test_code2 in codes:
- test = False
-
- self.assertTrue(test)
-
- def test_workingset_exclusion(self):
- # url = ('%s%s%s' % ('/workingsets/WS',
- # self.workingset_with_excluded_and_included_codes.id, '/export/concepts'))
-
- url = self.WEBAPP_HOST + reverse(
- 'workingset_to_csv',
- kwargs={'pk': self.workingset_with_excluded_and_included_codes.id})
- request = self.factory.get(url)
- request.user = self.owner_user
- request.CURRENT_BRAND = ''
-
- # pass request to the view
- response = workingset_to_csv(
- request, self.workingset_with_excluded_and_included_codes.id)
-
- codes = response.content.decode(
- 'utf-8') # list with response content which contains codes
- test_code1 = self.code_included.code
- test_code2 = self.code_excluded3.code
-
- test = True
- if test_code1 in codes or test_code2 in codes:
- test = False
-
- self.assertTrue(test)
-
- def test_export_workingset_codes_exclusion_and_inclusion_in_api(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
-
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_workingset_codes/',
- # self.workingset_with_excluded_and_included_codes.id))
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'api:api_export_workingset_codes',
- kwargs={'pk': self.workingset_with_excluded_and_included_codes.id})
- )
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- test_code1 = self.code_included.code
- test_code2 = self.code_excluded3.code
-
- # Make sure that codes do not appear in API
- self.assertFalse(test_code1 in browser.page_source
- or test_code2 in browser.page_source)
-
- def test_export_workingset_codes_exclusion_in_api(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
-
- browser.get('%s' % (self.WEBAPP_HOST))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_workingset_codes/',
- # self.workingset_with_excluded_codes.id))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('api:api_export_workingset_codes',
- kwargs={'pk': self.workingset_with_excluded_codes.id}))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- test_code1 = self.code_excluded1.code
- test_code2 = self.code_excluded2.code
-
- # Make sure that codes do not appear in API
- self.assertFalse(test_code1 in browser.page_source
- or test_code2 in browser.page_source)
-
- '''
- Export to CSV permission test
- '''
-
- def test_concept_to_csv_permission(self):
- # url = ('%s%s%s' % ('/concepts/C',
- # self.concept_none_can_access.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'concept_codes_to_csv',
- kwargs={'pk': self.concept_none_can_access.id})
-
- request = self.factory.get(url)
- request.user = self.normal_user
- request.CURRENT_BRAND = ''
-
- test = False
- try:
- response = concept_codes_to_csv(request,
- self.concept_none_can_access.id)
- except PermissionDenied as error:
- test = True
-
- self.assertTrue(test)
-
- def test_workingset_to_csv_permission(self):
- # url = ('%s%s%s' % ('/workingsets/WS',
- # self.workingset_none_can_access.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'workingset_to_csv',
- kwargs={'pk': self.workingset_none_can_access.id})
-
- request = self.factory.get(url)
- request.user = self.normal_user
- request.CURRENT_BRAND = ''
-
- test = False
- try:
- response = workingset_to_csv(request,
- self.workingset_none_can_access.id)
- except PermissionDenied as error:
- test = True
-
- self.assertTrue(test)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_hierarchical_code_lists.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_hierarchical_code_lists.py
deleted file mode 100644
index 7f32bacf2..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_hierarchical_code_lists.py
+++ /dev/null
@@ -1,832 +0,0 @@
-import time
-import unittest
-from datetime import datetime
-from urllib.parse import urlparse
-
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-# from django.conf import settings
-# from cll import settings as settings_cll
-# from cll import test_settings as settings
-from cll import test_settings as settings_cll
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-
-class HierarchicalCodeListsTest(StaticLiveServerTestCase):
-
- def setUp(self):
-
- location = os.path.dirname(__file__)
- if settings_cll.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings_cll.REMOTE_TEST_HOST,
- desired_capabilities=settings_cll.chrome_options.
- to_capabilities())
- self.browser.implicitly_wait(settings_cll.IMPLICTLY_WAIT)
- else:
- if settings_cll.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings_cll.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings_cll.chrome_options)
- super(HierarchicalCodeListsTest, self).setUp()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings_cll.REMOTE_TEST:
- self.WEBAPP_HOST = settings_cll.WEBAPP_HOST
- '''data'''
- self.super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- self.normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- self.owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- self.group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
-
- permitted_group = Group.objects.create(name="permitted_group")
- self.group_user.groups.add(permitted_group)
-
- self.coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- self.coding_system.save()
-
- self.concept_everybody_can_edit = self.add_concept(
- self,
- name="concept everybody can edit",
- world_access=Permissions.EDIT)
-
- concept_info_list = [{str(self.concept_everybody_can_edit.id):{"ttt|4":"yyy"}}]
-
- self.workingset_everybody_can_edit = WorkingSet.objects.create(
- name="wokringset everybody can access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- created_by=self.super_user,
- updated_by=self.super_user,
- owner=self.owner_user,
- concept_informations=concept_info_list,
- concept_version={
- (str(self.concept_everybody_can_edit.id)):
- str(self.concept_everybody_can_edit.history.first().history_id)
- },
- group=permitted_group,
- group_access=Permissions.VIEW,
- owner_access=Permissions.VIEW,
- world_access=Permissions.EDIT)
-
- self.child_concept_to_be_added = self.add_concept(
- self,
- name="child concept to be added",
- world_access=Permissions.VIEW)
-
- self.child_concept = self.add_concept(
- self,
- name="child concept to be updated",
- world_access=Permissions.VIEW)
- self.child_component = self.add_child_component(
- self,
- name="child to be updated",
- parent=self.concept_everybody_can_edit,
- concept_ref=self.child_concept,
- concept_ref_history_id=self.child_concept.history.first(
- ).history_id)
-
- self.concept_only_owner_can_access = self.add_concept(
- self,
- name="concept only owner can access",
- world_access=Permissions.NONE)
-
- # For the last test
- self.child_concept2 = self.add_concept(self,
- name="child concept 2",
- world_access=Permissions.VIEW)
- self.child_component2 = self.add_child_component(
- self,
- name="child 2",
- parent=self.child_concept,
- concept_ref=self.child_concept2,
- concept_ref_history_id=self.child_concept2.history.first(
- ).history_id)
-
- self.child_concept3 = self.add_concept(self,
- name="child concept 3",
- world_access=Permissions.VIEW)
- self.child_component3 = self.add_child_component(
- self,
- name="child 3",
- parent=self.child_concept2,
- concept_ref=self.child_concept3,
- concept_ref_history_id=self.child_concept3.history.first(
- ).history_id)
-
- update_friendly_id()
- save_stat(self.WEBAPP_HOST)
-
- @staticmethod
- def add_concept(self, name, world_access):
- concept = Concept.objects.create(
- name=name,
- description="child concept",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=self.super_user,
- modified_by=self.super_user,
- coding_system=self.coding_system,
- is_deleted=False,
- owner=self.owner_user,
- # group=self.permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.EDIT,
- world_access=world_access)
- concept.save()
-
- return concept
-
- @staticmethod
- def add_child_component(self, name, parent, concept_ref,
- concept_ref_history_id):
- child = Component.objects.create(
- comment="child concept",
- component_type=1,
- concept=parent,
- concept_ref=concept_ref,
- concept_ref_history_id=concept_ref_history_id,
- created_by=self.owner_user,
- logical_type=1,
- name=name)
-
- code_list = CodeList.objects.create(
- component=child, description="code_list_description")
-
- code_list.save()
-
- # insert some codes as a proper data structure
- Code.objects.create(code_list=code_list,
- code="c2",
- description="Test 2")
- Code.objects.create(code_list=code_list,
- code="c3",
- description="Test 3")
-
- child.save()
-
- return child
-
- def tearDown(self):
- # self.browser.refresh()
- # time.sleep(settings.TEST_SLEEP_TIME)
-
- self.browser.quit()
- super(HierarchicalCodeListsTest, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- '''
- When a child concept is added to a concept or working set, the latest version is always added.
- Functions checks both concept and workingset.
- '''
-
- def test_latest_version_added_after_adding_child_to_concept(self):
- # get latest version
- concept_latest_version = self.concept_everybody_can_edit.history.first(
- ).history_id
- print(("0 concept_latest_version=" + str(concept_latest_version)))
- workingset_latest_version = self.workingset_everybody_can_edit.history.first(
- ).history_id
- print(
- ("0 workingset_latest_version=" + str(workingset_latest_version)))
-
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/update/'))
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- wait = WebDriverWait(self.browser, 10)
- wait.until(EC.presence_of_element_located((By.ID, "conceptTypes")))
- # add child
- btn = browser.find_element(By.ID, 'conceptTypes')
- btn.click()
-
- time.sleep(2) # wait for popup
- btn.send_keys(Keys.DOWN)
- time.sleep(2)
- browser.find_element(By.ID, 'addConcept').click()
-
- wait.until(
- EC.presence_of_element_located((By.ID, "concept-search-text")))
-
- # time.sleep(2)
- concept_search_field = browser.find_element(By.ID,
- "concept-search-text")
-
- time.sleep(2) # wait to load component form
-
- concept_search_field.send_keys("child concept to be added")
-
- time.sleep(5) # wait to load concept prompt
-
- # click on a prompt to fill the field
- concept_search_field.send_keys(Keys.DOWN)
- concept_search_field.send_keys(Keys.ENTER)
-
- time.sleep(10)
- # #component_name = browser.find_element(By.ID,"id_name")
- # #component_name = browser.find_element(By.NAME,"name")
- # #component_name.send_keys('comp name')
-
- browser.find_element(By.ID, "saveBtn").click()
-
- time.sleep(5) # wait to submition be completed
-
- # wait = WebDriverWait(self.browser, 10)
- # wait.until(EC.presence_of_element_located(
- # (By.CLASS_NAME, "alert-success")))
-
- browser.find_element(By.ID, "save-changes").click() # save changes
-
- concept_latest_version_after_adding_child = self.concept_everybody_can_edit.history.first(
- ).history_id
- workingset_latest_version_after_adding_child = self.workingset_everybody_can_edit.history.first(
- ).history_id
- # print("1 concept_latest_version_after_adding_child=" + str(concept_latest_version_after_adding_child))
- # print("1 workingset_latest_version_after_adding_child=" + str(workingset_latest_version_after_adding_child))
-
- self.assertNotEqual(concept_latest_version,
- concept_latest_version_after_adding_child)
- # propagation sync is stopped
-
- # # Michal: no idea why is not working... in live it is working...
- # self.assertNotEquals(workingset_latest_version,
- # workingset_latest_version_after_adding_child)
- '''
- When a child concept is updated, any concept or working set that contains it automatically generates a new version.
- The update happens recursively.
- '''
- '''
- def test_latest_version_added_after_updating_child(self):
- # propagation sync is stopped
- # test is ignored
- pass
- return
-
- # get latest version
- concept_latest_version = self.concept_everybody_can_edit.history.first().history_id
- workingset_latest_version = self.workingset_everybody_can_edit.history.first().history_id
-
- self.login(ow_user, ow_password)
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.child_concept.id, '/update/'))
-
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- # update child
- browser.find_element(By.ID,"save-changes").click()
-
- wait = WebDriverWait(self.browser, 10)
- wait.until(EC.presence_of_element_located(
- (By.CLASS_NAME, "alert-success")))
-
- concept_latest_version_after_adding_child = self.concept_everybody_can_edit.history.first().history_id
- workingset_latest_version_after_adding_child = self.workingset_everybody_can_edit.history.first().history_id
-
- self.assertNotEquals(concept_latest_version,
- concept_latest_version_after_adding_child)
- self.assertNotEquals(workingset_latest_version,
- workingset_latest_version_after_adding_child)
- '''
- '''
- The version history shows this update as "Concept changed, automatic update" or something,
- and the user field makes it clear that this was a system update, not a user update.
- '''
- '''
- def test_version_history_shows_update(self):
- # propagation sync is stopped
- # cso this test is ignored
- pass
- return
- #######################
- #######################
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.child_concept.id, '/update/'))
-
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- WebDriverWait(browser, 10).until(
- EC.presence_of_element_located((By.ID, "save-changes"))
- )
- # update child
- browser.find_element(By.ID,"save-changes").click()
-
-
-
- browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- concept_history_change_reason = self.concept_everybody_can_edit.history.first(
- ).history_change_reason
-
- # check if change reason appears in the page
- self.assertTrue(concept_history_change_reason in browser.page_source)
-
- # repeat the same for workingset
- browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/detail/'))
- time.sleep(settings.TEST_SLEEP_TIME)
-
- workingset_history_change_reason = self.workingset_everybody_can_edit.history.first(
- ).history_change_reason
-
- self.assertTrue(
- workingset_history_change_reason in browser.page_source)
-
- '''
- '''
- When a user clicks "revert" or "fork" on a historical version of a concept or working set that has a child,
- there is a warning message "the new version will refer to the latest version of child concepts. Continue? Yes/no"
- '''
- '''def test_concept_warning_message_when_revert(self):
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.last().history_id, '/detail/'))
-
- self.login(ow_user, ow_password)
-
- browser.find_element(By.ID,"revert-btn").click()
- time.sleep(2)
- self.assertTrue("warning text" in browser.page_source)
-
- def test_concept_warning_message_when_fork(self):
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/version/',
- self.concept_everybody_can_edit.history.last().history_id, '/detail/'))
-
- self.login(ow_user, ow_password)
-
- browser.find_element(By.ID,"fork-btn").click()
- time.sleep(2)
- self.assertTrue("warning text" in browser.page_source)'''
- '''
- def xxtest_workingset_warning_message_when_revert(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- self.workingset_everybody_can_edit.id, '/version/',
- self.workingset_everybody_can_edit.history.last().history_id, '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- browser.find_element(By.ID,"revert-btn").click()
-
- time.sleep(2)
- self.assertTrue(
- "The concepts will automatically refer to the latest version" in browser.page_source)
- '''
- '''
- When one code list includes another code list as a component,
- the parent code list takes a copy of the codes, and it doesn't change when the child changes.
- '''
-
- def test_copy_of_codes(self):
- pass
-
- '''
- The parent code list stores and displays the version of the child code list that was used.
- '''
- '''def test_version_storing_of_the_child(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.concept_everybody_can_edit.id, '/detail/'))
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- # update child
- table = browser.find_element(By.ID,"component-table")
-
- # time.sleep(100)
-
-
- #For some reason component table is showing None value for version!!!!!!!
-
- table_rows = table.find_element_by_tag_name('tr')
- table_data = table.find_elements_by_tag_name('td')
-
- print("component history id: ", self.component.history.first().history_id)'''
- '''
- If the child code list is no longer the latest version (and there is access),
- then there is an "update" functionality to click a button and update the child to the latest.
- '''
-
- def test(self):
- pass
-
- '''
- If the user no longer has access to view the child code list, this is highlighted with a warning.
- '''
-
- def test_warning_message(self):
- # change permission of the child concept
- # self.child_concept.world_access = Permissions.NONE
- # self.child_concept.save()
-
- self.login(su_user, su_password)
-
- # ######################
- # from ... import db_utils
- #
- # print(self.child_concept.id)
- # print(Component.objects.all().count())
- # print(Component.objects.filter(concept_id=self.concept_everybody_can_edit.id).values_list('id', 'concept_id'))
- # print(Component.objects.get(concept_id=self.concept_everybody_can_edit.id).concept.id)
- # print(Component.objects.get(concept_id=self.concept_everybody_can_edit.id).concept_ref)
- # print(Component.objects.get(concept_id=self.concept_everybody_can_edit.id).concept_ref.id)
- # print(Component.objects.get(concept_id=self.concept_everybody_can_edit.id).concept_ref_history_id)
- #
- # concept_history_id = int(Concept.objects.get(pk=self.concept_everybody_can_edit.id).history.latest().history_id)
- #
- # concept = db_utils.getHistoryConcept(concept_history_id)
- #
- # concept_history_date = concept['history_date']
- # print(concept_history_date)
- # components = db_utils.getHistoryComponents(self.concept_everybody_can_edit.id, concept_history_date, skip_codes=True)
- # print(components)
- # #############################
-
- # self.login(nm_user, nm_password)
- browser = self.browser
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/detail/'))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_update', kwargs={
- 'pk': self.child_concept.id,
- }))
- # Find the no acces flag and click
- browser.find_element(By.ID, "id_world_access_0").click()
-
- # Wait for changes to apply
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.ID, "save-changes").click()
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
- # Update the child concept
- browser.find_element(By.XPATH, '//*[@title="Edit component"]').click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- # Time wait for changes for cicking apply button
- browser.find_element(By.ID, "saveBtn2").click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- self.logout()
-
- # login as user and see changes
- self.login(nm_user, nm_password)
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- # warning = browser.find_element_by_class_name("alert-danger").text
- self.assertTrue("no view permission" in browser.page_source)
-
- '''
- test if a child concept is pointing to the latest version when a parent is reverted or forked
- '''
-
- def test_concept_child_is_pointing_to_the_latest_version_when_parent_reverted(
- self):
-
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/version/',
- # self.concept_everybody_can_edit.history.last().history_id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'concept_history_detail',
- kwargs={
- 'pk':
- self.concept_everybody_can_edit.id,
- 'concept_history_id':
- self.concept_everybody_can_edit.history.last().history_id
- }))
-
- time.sleep(5)
- WebDriverWait(browser, 10).until(
- EC.presence_of_element_located((By.ID, "revert-btn")))
-
- # revert to the first version of the parent
- browser.find_element(By.ID, "revert-btn").click()
-
- time.sleep(2) # wait for pop up
-
- browser.find_element(By.XPATH,
- "//button[@type='submit']").click() # revert
-
- # go to the child details page
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.child_concept.id, '/detail/'))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_detail', kwargs={
- 'pk': self.child_concept.id,
- }))
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- latest = self.child_concept.history.first().history_id
-
- element = browser.find_element(By.ID, 'concept_history_id_div')
-
- self.assertEqual(''.join(filter(str.isdigit, str(element.text))),
- str(latest))
-
- def test_concept_child_is_pointing_to_the_latest_version_when_parent_forked(
- self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/version/',
- # self.concept_everybody_can_edit.history.last().history_id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'concept_history_detail',
- kwargs={
- 'pk':
- self.concept_everybody_can_edit.id,
- 'concept_history_id':
- self.concept_everybody_can_edit.history.last().history_id
- }))
-
- time.sleep(5)
- WebDriverWait(browser, 10).until(
- EC.presence_of_element_located((By.ID, "fork-btn")))
-
- # revert to the first version of the parent
- browser.find_element(By.ID, "fork-btn").click()
-
- time.sleep(2) # wait for pop up
-
- browser.find_element(By.XPATH,
- "//button[@type='submit']").click() # revert
-
- # go to the child details page
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.child_concept.id, '/detail/'))
-
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_detail', kwargs={
- 'pk': self.child_concept.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- latest = self.child_concept.history.first().history_id
-
- element = browser.find_element(By.ID, 'concept_history_id_div')
-
- self.assertEqual(''.join(filter(str.isdigit, str(element.text))),
- str(latest))
-
- def test_workingset_child_is_pointing_to_the_latest_version_when_parent_reverted(
- self):
- # unnecessary test
-
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/version/',
- # self.workingset_everybody_can_edit.history.last().history_id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'workingset_history_detail',
- kwargs={
- 'pk':
- self.workingset_everybody_can_edit.id,
- 'workingset_history_id':
- self.workingset_everybody_can_edit.history.last().history_id
- }))
-
- time.sleep(5)
- WebDriverWait(browser, 10).until(
- EC.presence_of_element_located((By.ID, "revert-btn")))
-
- # revert to the first version of the parent
- browser.find_element(By.ID, "revert-btn").click()
-
- time.sleep(2) # wait for pop up
-
- browser.find_element(By.XPATH,
- "//button[@type='submit']").click() # revert
-
- # go to the child details page
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- latest = self.concept_everybody_can_edit.history.first().history_id
-
- element = browser.find_element(By.ID, 'concept_history_id_div')
-
- self.assertEqual(''.join(filter(str.isdigit, str(element.text))),
- str(latest))
-
- '''
- A concept cannot be added as a child
- if you don't have permission to use that concept (i.e. view permission on all descendants).
- '''
-
- def test_child_cannot_be_added_without_permission(self):
- # login as normal so he does not have access to the child
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/update/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # try to add child
- browser.find_element(By.ID, 'conceptTypes').click()
-
- browser.implicitly_wait(5)
- browser.find_element(By.ID, 'addConcept').click()
-
- wait = WebDriverWait(self.browser, 10)
- wait.until(
- EC.presence_of_element_located((By.ID, "concept-search-text")))
-
- concept_search_field = browser.find_element(By.ID,
- "concept-search-text")
-
- time.sleep(2) # wait to load component form
-
- concept_search_field.send_keys("concept only owner can access")
-
- time.sleep(settings.TEST_SLEEP_TIME) # wait to load concept prompt
-
- # click on a prompt to fill the field
- concept_search_field.send_keys(Keys.DOWN)
- concept_search_field.send_keys(Keys.ENTER)
-
- browser.find_element(By.ID, "saveBtn").click()
-
- time.sleep(2)
-
- self.assertTrue("Please enter component name"
- # in browser.page_source
- in str(browser.switch_to.alert.text))
-
- '''
- A concept cannot be added as a child if it would create a circular situation
- (the current concept would be its own descendant). Test this with 4 levels of inheritance.
- '''
- '''def test_child_concept_cannot_be_added_to_itself(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- self.child_concept3.id, '/update/'))
-
-
- time.sleep(settings.TEST_SLEEP_TIME)
-
- wait = WebDriverWait(self.browser, 10)
- wait.until(EC.presence_of_element_located(
- (By.CSS_SELECTOR, "button.btn.btn-primary.dropdown-toggle")))
-
- # add child
- browser.find_element_by_css_selector(
- 'button.btn.btn-primary.dropdown-toggle').click()
- browser.find_element_by_link_text("Concept").click()
-
- wait.until(EC.presence_of_element_located(
- (By.ID, "concept-search-text")))
-
- concept_search_field = browser.find_element(By.ID,
- "concept-search-text")
-
- time.sleep(2) # wait to load component form
-
- concept_search_field.send_keys("concept everybody can edit")
-
- time.sleep(2) # wait to load concept prompt
-
- # click on a prompt to fill the field
- concept_search_field.send_keys(Keys.DOWN)
- concept_search_field.send_keys(Keys.ENTER)
-
- browser.find_element(By.XPATH,"//button[@type='submit']").click()
-
- # time.sleep(100) # wait to submition be completed'''
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_history.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_history.py
deleted file mode 100644
index dbd25fcf7..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_history.py
+++ /dev/null
@@ -1,334 +0,0 @@
-import time
-import unittest
-from datetime import datetime
-from urllib.parse import urlparse
-
-from clinicalcode.models import Brand
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.CodeRegex import CodeRegex
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.Tag import Tag
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-# from django.conf import settings
-# from cll import settings as settings_cll
-# from cll import test_settings as settings
-from cll import test_settings as settings_cll
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-
-class HistoryTest(StaticLiveServerTestCase):
-
- def setUp(self):
-
- location = os.path.dirname(__file__)
- if settings_cll.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings_cll.REMOTE_TEST_HOST,
- desired_capabilities=settings_cll.chrome_options.
- to_capabilities())
- self.browser.implicitly_wait(settings_cll.IMPLICTLY_WAIT)
- else:
- if settings_cll.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings_cll.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings_cll.chrome_options)
- super(HistoryTest, self).setUp()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings_cll.REMOTE_TEST:
- self.WEBAPP_HOST = settings_cll.WEBAPP_HOST
- # self.factory = RequestFactory()
-
- self.owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="test_code_list_library",
- table_name="clinicalcode_code",
- code_column_name="CODE",
- desc_column_name="DESCRIPTION")
- coding_system.save()
-
- self.brand = self.create_brand("HDRUK", "cll/static/img/brands/HDRUK")
-
- self.tag = Tag.objects.create(description="tagTest",
- tag_type=1,
- display =1,
- collection_brand=self.brand,
- created_by=self.owner_user)
- self.tag.save()
-
- self.collection = Tag.objects.create(description="collectionTest",
- tag_type=2,
- display=1,
- collection_brand=self.brand,
- created_by=self.owner_user)
- self.collection.save()
-
- self.concept1 = Concept.objects.create(name="concept level 4",
- description="concept level 4",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=self.owner_user,
- modified_by=self.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=self.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT,
- tags='{' + str(self.tag.id) +
- '}')
-
- self.comp1 = self.create_component_with_codes(
- self,
- comp_type=4,
- log_type=1,
- comp_name="comp1",
- comp_parent=self.concept1,
- code_list_description="com1 comp 1",
- codes_names_list=["i1", "i2"])
-
- self.comp_pk = self.comp1[0].pk
-
- self.codes = self.comp1[2]
-
- update_friendly_id()
- save_stat(self.WEBAPP_HOST)
-
- def create_brand(self, nameBrand, pathBrand):
- brand = Brand.objects.create(name=nameBrand,
- description='',
- logo_path=pathBrand,
- css_path=pathBrand,
- owner=self.owner_user).save()
- return brand
-
- def tearDown(self):
- self.browser.quit()
- super(HistoryTest, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- # Returns logical type of component and list of codes
-
- # Concept ref for reference to the child concept (optional)
- @staticmethod
- def create_component_with_codes(self,
- comp_type,
- log_type,
- comp_name,
- comp_parent,
- code_list_description,
- codes_names_list,
- concept_ref=None,
- concept_ref_history_id=None):
- component = Component.objects.create(component_type=comp_type,
- concept=comp_parent,
- created_by=self.owner_user,
- logical_type=log_type,
- name=comp_name)
-
- # if component type is child concept add reference to the child
- if comp_type == 1:
- component.concept_ref = concept_ref
- component.concept_ref_history_id = concept_ref_history_id
-
- code_list = CodeList.objects.create(component=component,
- description=code_list_description)
- list_of_codes = []
-
- codeRegex = CodeRegex.objects.create(component=component,
- regex_type=1,
- regex_code="i%",
- code_list=code_list,
- column_search=1)
-
- codeRegex.save()
-
- for name in codes_names_list:
- code = Code.objects.create(code_list=code_list,
- code=name,
- description="isudhfsuidhf")
- code.save()
- list_of_codes.append(code)
-
- code_list.save()
- component.save()
- comp_parent.save()
-
- return component, log_type, list_of_codes
-
- '''
- Select/express component is edited then concept is saved.
- The test checks if latest historical version of the concept contains
- the correct version of the component.
- '''
-
- def test_select_comp_after_edit(self):
-
- # remove one code and update the concept
- code = Code.objects.filter(id=self.codes[0].id)
- code.delete()
- self.concept1.save()
-
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept1.id, '/update/'))
- browser.get(
- self.WEBAPP_HOST +
- reverse('concept_update', kwargs={
- 'pk': self.concept1.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # go to the latest historical version of the concept
- href = "/concepts/C" + str(self.concept1.id) + "/version/" + str(
- self.concept1.history.first().history_id) + "/detail/"
- browser.find_element(By.XPATH, '//a[@href="' + href + '"]').click()
-
- # click the component details button
- id = "code-preview-" + str(self.comp_pk)
- browser.find_element(By.XPATH, '//button[@id="' + id + '"]').click()
-
- time.sleep(2)
-
- rows = browser.find_elements(
- By.XPATH, '//tbody[@id="expressionSelectContentArea"]/tr')
- # make sure there is one row of codes (there is one code)
- self.assertEqual(len(rows), 1)
-
- # check the name of the code
- name = browser.find_element(
- By.XPATH, '//tbody[@id="expressionSelectContentArea"]/tr/td').text
- self.assertEqual(name, "i2")
-
- '''
- Concept with a tag is created. Test checks if the latest historical version
- of the concept contains the tag.
- '''
-
- def test_history_tags(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- browser.get('%s%s' % (self.WEBAPP_HOST, '/concepts/create'))
-
- browser.get(self.WEBAPP_HOST + reverse('concept_create', kwargs=None))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
-
- # create a concept
- browser.find_element(By.ID, 'id_name').send_keys("concept2")
- tagField = browser.find_element(By.ID, 'concept-tag-form-container').find_element(By.CLASS_NAME,'tt-input')
- tagField.send_keys("tag")
-
- time.sleep(2) # wait to load concept prompt
-
- # click on a prompt to fill the field
- tagField.send_keys(Keys.DOWN)
- tagField.send_keys(Keys.ENTER)
-
- browser.find_element(By.ID, 'id_author').send_keys("conceptAuthor")
- browser.find_element(By.ID,
- 'id_description').send_keys("concept2222222")
- browser.find_element(By.ID, 'id_coding_system').send_keys(Keys.DOWN)
-
-
- browser.find_element(By.ID, 'save-changes').click()
- concept = Concept.objects.all().order_by('-id')[0]
-
- # go to the latest historical version of the concept
- href = "/concepts/C" + str(concept.id) + "/version/" + str(
- concept.history.first().history_id) + "/detail/"
- browser.find_element(By.XPATH, '//a[@href="' + href + '"]').click()
-
- # TO-DO assertTrue or equal that tag exist
- self.assertTrue("tagTest" in browser.page_source)
-
- def test_history_collection(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- browser.get('%s%s' % (self.WEBAPP_HOST, '/concepts/create'))
-
- browser.get(self.WEBAPP_HOST + reverse('concept_create', kwargs=None))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # create a concept
- browser.find_element(By.ID, 'id_name').send_keys("concept2")
- collectionField = browser.find_element(By.ID, 'concept-collection-form-container').find_element(By.CLASS_NAME,'tt-input')
-
- collectionField.send_keys("collection")
-
- time.sleep(2) # wait to load concept prompt
-
- # click on a prompt to fill the field
- collectionField.send_keys(Keys.DOWN)
- collectionField.send_keys(Keys.ENTER)
-
- browser.find_element(By.ID, 'id_author').send_keys("conceptAuthor")
- browser.find_element(By.ID,
- 'id_description').send_keys("concept2222222")
- browser.find_element(By.ID, 'id_coding_system').send_keys(Keys.DOWN)
-
- browser.find_element(By.ID, 'save-changes').click()
- concept = Concept.objects.all().order_by('-id')[0]
-
- # go to the latest historical version of the concept
- href = "/concepts/C" + str(concept.id) + "/version/" + str(
- concept.history.first().history_id) + "/detail/"
- browser.find_element(By.XPATH, '//a[@href="' + href + '"]').click()
-
- # TO-DO assertTrue or equal that tag exist
- self.assertTrue("collectionTest" in browser.page_source)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_inclusion_exclusion.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_inclusion_exclusion.py
deleted file mode 100644
index 4146528cc..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_inclusion_exclusion.py
+++ /dev/null
@@ -1,474 +0,0 @@
-from datetime import datetime
-from unittest.case import skip
-
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.CodeRegex import CodeRegex
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.PublishedConcept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from clinicalcode.views.Concept import concept_codes_to_csv
-# from cll import test_settings as settings
-from cll import test_settings as settings_cll
-from django.test import RequestFactory, TestCase, TransactionTestCase
-from rest_framework.reverse import reverse
-
-# from clinicalcode.publicsites.views import published_concept_codes_to_csv
-
-
-# @skip("skip for now")
-class InclusionExclusionTest(TestCase):
-
- @classmethod
- def setUpClass(cls):
- super(InclusionExclusionTest, cls).setUpClass()
- cls.factory = RequestFactory()
-
- cls.owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
- '''
- level 4
- The parent is excluded child so everything should be excluded
- '''
- '''cls.excl_level4_withexcl = Concept.objects.create(
- name="concept level 4",
- description="concept level 4",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT
- )
-
-
- cls.excl_comp_type4_4_3 = cls.create_component_with_codes(cls, comp_type=4, log_type=1, comp_name="excluded component 5", comp_parent=cls.excl_level4_withexcl,
- code_list_description="excluded code list", codes_names_list=["r2"])
-
-
- cls.level4_withexcl = Concept.objects.create(
- name="concept level 4",
- description="concept level 4",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT
- )
-
-
- cls.excl_comp_type4_4_2 = cls.create_component_with_codes(cls, comp_type=4, log_type=2, comp_name="excluded component 5", comp_parent=cls.level4_withexcl,
- code_list_description="excluded code list", codes_names_list=["r1"])
-
- cls.incl_level4 = Concept.objects.create(
- name="concept level 4",
- description="concept level 4",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT
- )
-
-
- cls.incl_comp_type4_4 = cls.create_component_with_codes(cls, comp_type=4, log_type=1, comp_name="included component 5", comp_parent=cls.incl_level4,
- code_list_description="included code list", codes_names_list=["i9", "i10"])
-
- cls.excl_comp_type4_4 = cls.create_component_with_codes(cls, comp_type=4, log_type=2, comp_name="excluded component 5", comp_parent=cls.incl_level4,
- code_list_description="included code list", codes_names_list=["i10"])'''
- '''
- level 3
- '''
- ''''cls.incl_level3 = Concept.objects.create(
- name="concept level 3",
- description="concept level 3",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT
- )
-
- cls.excl_child_component_4_2 = cls.create_component_with_codes(cls, comp_type=1, log_type=2, comp_name="excluded child concept 5_2", comp_parent=cls.incl_level3,
- code_list_description="included code list", codes_names_list=[], concept_ref=cls.excl_level4_withexcl,
- concept_ref_history_id=cls.excl_level4_withexcl.history.first().history_id)
-
- cls.incl_child_component_4_2 = cls.create_component_with_codes(cls, comp_type=1, log_type=1, comp_name="included child concept 5_2", comp_parent=cls.incl_level3,
- code_list_description="included code list", codes_names_list=[], concept_ref=cls.level4_withexcl,
- concept_ref_history_id=cls.level4_withexcl.history.first().history_id)
-
- cls.incl_child_component_4 = cls.create_component_with_codes(cls, comp_type=1, log_type=1, comp_name="included child concept 5", comp_parent=cls.incl_level3,
- code_list_description="included code list", codes_names_list=[], concept_ref=cls.incl_level4,
- concept_ref_history_id=cls.incl_level4.history.first().history_id)
-
- cls.incl_comp_type3_3 = cls.create_component_with_codes(cls, comp_type=3, log_type=1, comp_name="included component 4", comp_parent=cls.incl_level3,
- code_list_description="included code list", codes_names_list=["i7", "i8"])
-
- cls.excl_comp_type3_3 = cls.create_component_with_codes(cls, comp_type=3, log_type=2, comp_name="excluded component 4", comp_parent=cls.incl_level3,
- code_list_description="excluded code list", codes_names_list=["i2"])'''
- '''
- level 2
- '''
- '''cls.level2 = Concept.objects.create(
- name="concept level 2",
- description="concept level 2",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT
- )
-
- cls.incl_child_component_3 = cls.create_component_with_codes(cls, comp_type=1, log_type=1, comp_name="included child concept 4", comp_parent=cls.level2,
- code_list_description="included code list", codes_names_list=[], concept_ref=cls.incl_level3,
- concept_ref_history_id=cls.incl_level3.history.first().history_id)
-
- cls.incl_comp_type2_2 = cls.create_component_with_codes(cls, comp_type=2, log_type=1, comp_name="included component 3", comp_parent=cls.level2,
- code_list_description="included code list", codes_names_list=["e6", "e7", "ic9"])
-
- cls.excl_comp_type2_2 = cls.create_component_with_codes(cls, comp_type=2, log_type=2, comp_name="excluded component 3", comp_parent=cls.level2,
- code_list_description="excluded code list", codes_names_list=["e6", "e7", "i5"])'''
- '''
- level 1
- '''
- cls.level1 = Concept.objects.create(name="concept level 1",
- description="concept level 1",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT)
- '''cls.incl_child_component_2 = cls.create_component_with_codes(cls, comp_type=1, log_type=1, comp_name="included child concept 3", comp_parent=cls.level1,
- code_list_description="included code list", codes_names_list=[], concept_ref=cls.level2,
- concept_ref_history_id=cls.level2.history.first().history_id)
-
- cls.incl_comp_type2_1 = cls.create_component_with_codes(cls, comp_type=2, log_type=1, comp_name="included component 2", comp_parent=cls.level1,
- code_list_description="included code list", codes_names_list=["i4", "i5", "i6"])
-
- cls.excl_comp_type2_1 = cls.create_component_with_codes(cls, comp_type=2, log_type=2, comp_name="excluded component 2", comp_parent=cls.level1,
- code_list_description="excluded code list", codes_names_list=["e3", "e4"])
-
- cls.incl_comp_type3_1 = cls.create_component_with_codes(cls, comp_type=3, log_type=1, comp_name="included component 2", comp_parent=cls.level1,
- code_list_description="included code list", codes_names_list=["e3", "e4", "i6", "ic4", "ic5"])
-
- cls.excl_comp_type3_1 = cls.create_component_with_codes(cls, comp_type=3, log_type=2, comp_name="excluded component 2", comp_parent=cls.level1,
- code_list_description="excluded code list", codes_names_list=["i6"])
-
- cls.incl_comp_type4_1 = cls.create_component_with_codes(cls, comp_type=4, log_type=1, comp_name="included component 2", comp_parent=cls.level1,
- code_list_description="included code list", codes_names_list=["ic6", "ic7", "ic8"])
-
- cls.excl_comp_type4_1 = cls.create_component_with_codes(cls, comp_type=4, log_type=2, comp_name="excluded component 2", comp_parent=cls.level1,
- code_list_description="excluded code list", codes_names_list=["ic3", "ic8"])'''
- '''
- root
- '''
- cls.root = Concept.objects.create(name="root",
- description="root",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=cls.owner_user,
- modified_by=cls.owner_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=cls.owner_user,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT)
-
- cls.incl_child_component_1 = cls.create_component_with_codes(
- cls,
- comp_type=1,
- log_type=1,
- comp_name="included child concept",
- comp_parent=cls.root,
- code_list_description="included code list",
- codes_names_list=["i100", "i200", "i300"],
- concept_ref=cls.level1,
- concept_ref_history_id=cls.level1.history.first().history_id)
-
- cls.excl_child_component_1 = cls.create_component_with_codes(
- cls,
- comp_type=1,
- log_type=2,
- comp_name="excluded child concept",
- comp_parent=cls.root,
- code_list_description="included code list",
- codes_names_list=["i300"],
- concept_ref=cls.level1,
- concept_ref_history_id=cls.level1.history.first().history_id)
-
- cls.incl_comp_type2 = cls.create_component_with_codes(
- cls,
- comp_type=2,
- log_type=1,
- comp_name="included component",
- comp_parent=cls.root,
- code_list_description="included code list",
- codes_names_list=["i1", "i2", "i3"])
-
- cls.excl_comp_type2 = cls.create_component_with_codes(
- cls,
- comp_type=2,
- log_type=2,
- comp_name="excluded component",
- comp_parent=cls.root,
- code_list_description="excluded code list",
- codes_names_list=["i1", "e2"])
-
- cls.incl_comp_type3 = cls.create_component_with_codes(
- cls,
- comp_type=3,
- log_type=1,
- comp_name="included component",
- comp_parent=cls.root,
- code_list_description="included code list",
- codes_names_list=["ic1", "ic2"])
-
- cls.excl_comp_type3 = cls.create_component_with_codes(
- cls,
- comp_type=3,
- log_type=2,
- comp_name="excluded component",
- comp_parent=cls.root,
- code_list_description="excluded code list",
- codes_names_list=["ic2", "ec1"])
-
- cls.incl_comp_type4 = cls.create_component_with_codes(
- cls,
- comp_type=4,
- log_type=1,
- comp_name="included component",
- comp_parent=cls.root,
- code_list_description="included code list",
- codes_names_list=["ic3", "ic4"])
-
- cls.excl_comp_type4 = cls.create_component_with_codes(
- cls,
- comp_type=4,
- log_type=2,
- comp_name="excluded component",
- comp_parent=cls.root,
- code_list_description="excluded code list",
- codes_names_list=["ic4"])
-
- cls.root.save()
-
- cls.output = ['i2', 'i3', 'ic1', 'ic3', 'i100', 'i200']
- '''published concept'''
- cls.root_history_id = cls.root.history.first().history_id
- cls.published_root = PublishedConcept.objects.create(
- concept=cls.root,
- concept_history_id=cls.root_history_id,
- created_by=cls.owner_user)
-
- @classmethod
- def tearDownClass(cls):
- super(InclusionExclusionTest, cls).tearDownClass()
-
- # Returns logical type of component and list of codes
- # Concept ref for reference to the child concept (optional)
- @staticmethod
- def create_component_with_codes(self,
- comp_type,
- log_type,
- comp_name,
- comp_parent,
- code_list_description,
- codes_names_list,
- concept_ref=None,
- concept_ref_history_id=None):
- component = Component.objects.create(component_type=comp_type,
- concept=comp_parent,
- created_by=self.owner_user,
- logical_type=log_type,
- name=comp_name)
-
- # if component type is child concept add reference to the child
- if comp_type == 1:
- component.concept_ref = concept_ref
- component.concept_ref_history_id = concept_ref_history_id
-
- code_list = CodeList.objects.create(component=component,
- description=code_list_description)
- list_of_codes = []
-
- if comp_type != 1 and comp_type != 2:
- codeRegex = CodeRegex.objects.create(component=component,
- regex_type=1,
- regex_code="%i%",
- code_list=code_list)
-
- for name in codes_names_list:
- code = Code.objects.create(code_list=code_list,
- code=name,
- description=name)
- code.save()
- list_of_codes.append(code.code)
-
- code_list.save()
- component.save()
- comp_parent.save()
-
- return log_type, list_of_codes
-
- def get_codes_from_response(self, response):
- response = response.splitlines()
- response.pop(0) # remove headers
-
- codes = []
-
- for r in response:
- code = r.split(",")[0]
- codes.append(code)
-
- # sort both lists
- codes.sort()
- self.output.sort()
- print(("EXPECTED OUTPUT: ", self.output))
- print(("RESPONSE_CODES: ", codes))
-
- return codes
-
- def test_root(self):
- # url = ('%s%s%s' % ('/concepts/C',
- # self.root.id, '/export/codes'))
-
- url = reverse('concept_codes_to_csv', kwargs={'pk': self.root.id})
-
- request = self.factory.get(url)
- request.user = self.owner_user
- request.CURRENT_BRAND = ''
-
- response = concept_codes_to_csv(request, self.root.id)
-
- response_codes = self.get_codes_from_response(
- response.content.decode('utf-8'))
-
- expected_output = self.output
-
- self.assertEqual(response_codes, expected_output,
- "response codes and expected output are not equal")
-
- def test_published(self):
- from clinicalcode.views.Concept import history_concept_codes_to_csv
-
- # url = ('%s%s%s%s%s' % ('/concepts/C', self.published_root.concept_id
- # , '/version/', self.published_root.concept_history_id
- # , '/export/codes'))
-
- url = reverse('history_concept_codes_to_csv',
- kwargs={
- 'pk':
- self.published_root.concept_id,
- 'concept_history_id':
- self.published_root.concept_history_id
- })
- request = self.factory.get(url)
- request.user = self.owner_user
- request.CURRENT_BRAND = ''
-
- response = history_concept_codes_to_csv(
- request, self.published_root.concept_id,
- self.published_root.concept_history_id)
-
- response_codes = self.get_codes_from_response(
- response.content.decode('utf-8'))
-
- expected_output = self.output
-
- self.assertEqual(
- response_codes, expected_output,
- "response codes and expected output are not equal")
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_regular_expressions.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_regular_expressions.py
deleted file mode 100644
index ef9636e98..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_regular_expressions.py
+++ /dev/null
@@ -1,240 +0,0 @@
-import time
-from datetime import datetime
-from urllib.parse import urlparse
-
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.CodeRegex import CodeRegex
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from clinicalcode.views.Concept import concept_codes_to_csv
-# from django.conf import settings
-# from cll import settings as settings_cll
-# from cll import test_settings as settings
-from cll import test_settings as settings_cll
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from django.test import RequestFactory
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-
-class RegularExpressionsTest(StaticLiveServerTestCase):
-
- def setUp(self):
-
- location = os.path.dirname(__file__)
- if settings_cll.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings_cll.REMOTE_TEST_HOST,
- desired_capabilities=settings_cll.chrome_options.
- to_capabilities())
- self.browser.implicitly_wait(settings_cll.IMPLICTLY_WAIT)
- else:
- if settings_cll.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings_cll.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings_cll.chrome_options)
- super(RegularExpressionsTest, self).setUp()
-
- self.factory = RequestFactory()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings_cll.REMOTE_TEST:
- self.WEBAPP_HOST = settings_cll.WEBAPP_HOST
- '''data'''
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- self.owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
-
- permitted_group = Group.objects.create(name="permitted_group")
- group_user.groups.add(permitted_group)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- coding_system2 = CodingSystem.objects.create(
- name="Lookup table 2",
- description="Lookup Codes for testing purposes2",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- self.concept_everybody_can_edit = Concept.objects.create(
- name="concept everybody can edit",
- description="concept description",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=self.owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- self.code_list = self.create_component_with_codes(
- self,
- comp_name="included component",
- comp_parent=self.concept_everybody_can_edit,
- code_list_description="included code list",
- codes_names_list=["i1", "i2", "i3"])
-
- update_friendly_id()
- save_stat(self.WEBAPP_HOST)
-
- def tearDown(self):
- self.browser.quit()
- super(RegularExpressionsTest, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- # Returns logical type of component and list of codes
-
- # Concept ref for reference to the child concept (optional)
- @staticmethod
- def create_component_with_codes(self, comp_name, comp_parent,
- code_list_description, codes_names_list):
- component = Component.objects.create(component_type=2,
- concept=comp_parent,
- created_by=self.owner_user,
- logical_type=1,
- name=comp_name)
-
- code_list = CodeList.objects.create(component=component,
- description=code_list_description)
- code_list.save()
- list_of_codes = []
-
- codeRegex = CodeRegex.objects.create(component=component,
- regex_type=1,
- regex_code="%i%",
- code_list=code_list)
-
- for name in codes_names_list:
- code = Code.objects.create(code_list=code_list,
- code=name,
- description=name)
- code.save()
- list_of_codes.append(code.code)
-
- return list_of_codes
-
- def get_codes_from_response(self, response):
- response = response.splitlines()
- response.pop(0) # remove headers
-
- codes = []
-
- for r in response:
- code = r.split(",")[0]
- codes.append(code)
-
- print(("REPONSE_CODES: ", codes))
-
- return codes
-
- '''
- The match with expression functionality makes a copy of the codes,
- and the code list does not change if the lookup table changes.
- '''
-
- def test_regular_expression(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/update/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- coding_system_select = browser.find_element(By.ID, "id_coding_system")
-
- # Change lookup table
- coding_system_select.click()
- coding_system_select.send_keys(Keys.DOWN)
- coding_system_select.send_keys(Keys.ENTER)
-
- browser.find_element(By.ID, "save-changes").click() # save changes
-
- # url = ('%s%s%s' % ('/concepts/C',
- # self.concept_everybody_can_edit.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'concept_codes_to_csv',
- kwargs={'pk': self.concept_everybody_can_edit.id})
- request = self.factory.get(url)
- request.user = self.owner_user
- request.CURRENT_BRAND = ''
-
- # make export to csv request
- response = concept_codes_to_csv(request,
- self.concept_everybody_can_edit.id)
-
- codes = self.get_codes_from_response(response.content.decode('utf-8'))
-
- # Assert that the defined codes in setUp appears in the response
- for code in self.code_list:
- self.assertTrue(code in codes, code + " not in response")
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_search_filters.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_search_filters.py
deleted file mode 100644
index 20b97d6a1..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_search_filters.py
+++ /dev/null
@@ -1,745 +0,0 @@
-import random
-import string
-import time
-from datetime import datetime
-
-from clinicalcode.models.Brand import Brand
-from clinicalcode.models.Concept import *
-from clinicalcode.models.Phenotype import *
-from clinicalcode.models.Tag import Tag
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.tests.test_base import *
-# from cll import test_settings as settings
-from cll import test_settings as settings_cll
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-# from django.conf import settings
-# from cll import settings as settings_cll
-from django.test import RequestFactory
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-from unittest import skip, skipIf
-
-@skipIf(True, "SEARCH PAGE TEST SKIPPED")
-class SearchTest(StaticLiveServerTestCase):
- reset_sequences = True
-
- def setUp(self):
- location = os.path.dirname(__file__)
- self.NUM_PHENOTYPES = 100
-
- self.factory = RequestFactory()
- if settings_cll.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings_cll.REMOTE_TEST_HOST,
- desired_capabilities=settings_cll.chrome_options.
- to_capabilities())
- self.browser.implicitly_wait(settings_cll.IMPLICTLY_WAIT)
- else:
- if settings_cll.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings_cll.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings_cll.chrome_options)
-
- super(SearchTest, self).setUp()
-
- self.WEBAPP_HOST = self.live_server_url.replace(
- 'localhost', '127.0.0.1')
- if settings_cll.REMOTE_TEST:
- self.WEBAPP_HOST = settings_cll.WEBAPP_HOST
-
- self.load_data()
-
- def load_data(self):
- # Users: a normal user and a super_user.
- self.normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- self.owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
-
- self.permitted_group = Group.objects.create(name="permitted_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(self.permitted_group)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- self.concept_everybody_can_edit = Concept.objects.create(
- name="concept everybody can edit",
- description="concept description",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- tags=[1],
- is_deleted=False,
- owner=self.owner_user,
- group=self.permitted_group,
- group_access=Permissions.EDIT,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT)
- self.brand = self.create_brand("HDRUK", "cll/static/img/brands/HDRUK")
-
- self.nameTags = [
- "Phenotype_library", "ADP", "BREATHE", "CALIBER", "PIONEER",
- "SAIL", "BHF DSC"
- ]
- self.collectionOftags = []
-
- for i in range(len(self.nameTags)):
- self.collectionOftags.append(
- self.creat_tag(self.nameTags[i], self.brand))
-
- self.test_phenotypes = []
- for i in range(self.NUM_PHENOTYPES):
- self.test_phenotypes.append(
- self.create_test_phenotype(
- "Phenotype" + str(i + 1),
- "desc" + str(i + 1),
- tags=[random.randrange(len(self.nameTags)) + 1],
- group=self.permitted_group,
- is_deleted=random.choice([True, False]),
- owner=self.owner_user,
- author="test_author"))
-
- update_friendly_id()
- save_stat(self.WEBAPP_HOST)
-
- def create_test_phenotype(self, name, description, tags, group, is_deleted,
- owner, author):
- phenotype = Phenotype.objects.create(
- name=str(name),
- description="phenotype level " + str(description),
- author=author,
- layout="Phenotype",
- valid_event_data_range="01/01/1999 - 01/07/2016",
- phenotype_uuid="ideeee" + str(name),
- is_deleted=is_deleted,
- type=random.choice(
- ["Disease or Syndrome", "Biomarker", "Lifestyle Risk Factor"]),
- sex="Female,Male",
- phenoflowid=4,
- concept_informations= [{"concept_version_id": str(self.concept_everybody_can_edit.id),
- "concept_id": str(self.concept_everybody_can_edit.id),
- "attributes": []}],
- validation_performed=False,
- publication_doi="",
- publication_link=Google_website,
- source_reference=Google_website,
- validation="",
- publications=[],
- status="FINAL",
- secondary_publication_links="",
- citation_requirements="",
- created_by=self.owner_user,
- updated_by=self.owner_user,
- owner=owner,
- group_access=Permissions.EDIT,
- tags=tags,
- group=group,
- owner_access=Permissions.EDIT,
- world_access=Permissions.EDIT).save()
- return phenotype
-
- def creat_tag(self, nametag, brand):
- tag = Tag.objects.create(collection_brand=brand,
- description=nametag,
- created_by=self.owner_user,
- tag_type=2,
- display=random.randint(1, 6)).save()
- return tag
-
- def create_brand(self, nameBrand, pathBrand):
- brand = Brand.objects.create(name=nameBrand,
- description='',
- logo_path=pathBrand,
- css_path=pathBrand,
- owner=self.owner_user).save()
- return brand
-
- def tearDown(self):
- self.browser.quit()
- super(SearchTest, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- def test_tags_filter(self):
-
- self.login(su_user, su_password)
- browser = self.browser
-
- # Go to phenotype list
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- checkboxes = browser.find_elements(By.ID, "collection_id")
-
-
- # Iterate through checkboxes and make sure they are available
- for i in range(len(checkboxes)):
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- updated_element = browser.find_elements(By.NAME,
- "collection_id")[i]
-
- self.assertTrue(updated_element.is_enabled())
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- def test_tags_onrelevance(self):
-
- self.login(su_user, su_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- checkboxes = browser.find_elements(By.NAME, "collection_id")
-
- # Iterate through checkboxes and compare phenotype tags with actual chosen tag
- for i in range(1, len(checkboxes)):
-
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- element = browser.find_elements(By.CSS_SELECTOR,
- ".col-sm-12 > .tag")
-
- tag = browser.find_elements(By.CLASS_NAME,
- "form-check-label")[i - 1].text
-
- for j in range(1, len(element), 2):
- self.assertEqual(element[j].text, tag)
-
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- def xx_test_unexpected_symbol_search(self):
-
- self.login(su_user, su_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- checkboxes = browser.find_elements(By.NAME, "collection_id")
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- # Iterate through checkboxes and test could search bar handle the random symbols
- for i in range(1, len(checkboxes)):
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- browser.find_element(By.ID, "search").send_keys("Phenotype")
-
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.ID, "reset-form").click()
-
- # generate random symbol
- randomstring = ''.join([
- random.choice(string.ascii_letters + string.digits +
- string.punctuation) for _ in range(5)
- ])
-
- browser.find_element(By.ID, "search").send_keys(randomstring)
-
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
-
- self.assertTrue("No phenotypes" in browser.page_source)
-
- browser.find_element(By.ID, "reset-form").click()
-
- def xx_test_unexpected_phenotype_name(self):
- self.login(su_user, su_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- checkboxes = browser.find_elements(By.NAME, "collection_id")
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- # Iterate through checkboxes and test if search bar could find the unexpected name of the phenotype
- for i in range(1, len(checkboxes)):
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- browser.find_element(By.ID, "search").send_keys("Phenotype")
-
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- browser.find_element(By.ID, "reset-form").click()
-
- randomstring = ''.join([
- random.choice(string.ascii_letters + string.digits)
- for _ in range(5)
- ])
-
- # Create test phenotype
- self.create_test_phenotype(randomstring,
- "desc", [i],
- self.permitted_group,
- False,
- owner=self.owner_user,
- author="author")
-
- browser.find_element(By.ID, "search").send_keys(randomstring)
-
- time.sleep(5)
-
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
-
- time.sleep(10)
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- browser.find_element(By.ID, "reset-form").click()
-
- """
- NOT FOR REALEASE 1
- def test_blank_search_input(self):
- self.login(su_user, su_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes')
- )
- browser.find_element(By.XPATH,"//*[@id='show-advanced-search']").click()
-
- checkboxes = browser.find_elements(By.NAME,"collection_id")
-
- # Test how search bar could handle the empty search
- for i in range(1, len(checkboxes)):
- browser.find_elements(By.NAME,"collection_id")[i].click()
-
- browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- # Todo Should be discussed(Test empty in search space)
- browser.find_element(By.ID,"search").send_keys(Keys.SPACE)
- browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
- time.sleep(settings_cll.IMPLICTLY_WAIT)
- self.assertTrue("No phenotypes" not in browser.page_source)
- browser.find_element(By.ID,"reset-form").click()
-
- # Test empty in author search space
- browser.find_element(By.NAME,"author").send_keys(Keys.SPACE)
- browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
- time.sleep(settings_cll.IMPLICTLY_WAIT)
- self.assertTrue("No phenotypes" not in browser.page_source)
- browser.find_element(By.ID,"reset-form").click()
-
- # Test empty in owner search space
- browser.find_element(By.NAME,"owner").send_keys(Keys.SPACE)
- browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
- time.sleep(settings_cll.IMPLICTLY_WAIT)
- self.assertTrue("No phenotypes" not in browser.page_source)
- browser.find_element(By.ID,"reset-form").click()
-
- browser.find_elements(By.NAME,"collection_id")[i].click()
- """
-
- def xx_test_blank_phenotype_search(self):
- self.login(su_user, su_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- # Test if blank phenotype could be exist
-
- browser.find_element(By.ID, "search").send_keys(Keys.SPACE)
-
- browser.find_element(By.XPATH,
- '//button[@class = "btn btn-primary"]').click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- # Reset and create phenotype
- browser.find_element(By.ID, "reset-form").click()
-
- self.create_test_phenotype(" ",
- "desc", [1],
- self.permitted_group,
- False,
- owner=self.owner_user,
- author="author")
-
- browser.find_element(By.ID, "search").send_keys(Keys.SPACE)
-
- browser.find_element(By.XPATH,
- '//button[@class = "btn btn-primary"]').click()
-
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- def xx_test_all_tag(self):
-
- # Test 'all' tag when user wants to delete the previous search
- self.login(su_user, su_password)
-
- browser = self.browser
- self.create_test_phenotype("test",
- "desc", [1],
- self.permitted_group,
- False,
- owner=self.owner_user,
- author="test_author")
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- browser.find_elements(By.NAME, "collection_id")[0].click()
-
- browser.find_element(By.ID, "search").send_keys("test")
-
- browser.find_element(By.XPATH,
- '//button[@class = "btn btn-primary"]').click()
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- browser.find_element(By.ID, "search").clear()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_elements(By.NAME, "collection_id")[0].click()
- print(browser.find_element(By.ID, "search").text)
-
- self.assertTrue(browser.find_element(By.ID, "search").text == "")
-
- def xx_test_search(self):
- self.login(su_user, su_password)
-
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- checkboxes = browser.find_elements(By.NAME, "collection_id")
-
- # Iterate and check search by all tags except all tag
- for i in range(1, len(checkboxes)):
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- element = browser.find_element(By.XPATH,
- "//span[contains(text(),'PH')]")
-
- random_phenotype = element.text
- print(random_phenotype)
-
- # Test with actual name
- browser.find_element(By.ID, "search").send_keys(
- random_phenotype[6:].strip())
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
- time.sleep(settings_cll.IMPLICTLY_WAIT)
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- browser.find_element(By.ID, "reset-form").click()
-
- # Find phenotype by friendly ID (GOING to be extra feature)
- # browser.find_element(By.ID,"search").send_keys(random_phenotype[:3].strip())
- # browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
- # self.assertTrue("No phenotypes" not in browser.page_source)
- # time.sleep(settings_cll.IMPLICTLY_WAIT)
- # browser.find_element(By.ID,"reset-form").click()
-
- # time.sleep(settings_cll.IMPLICTLY_WAIT)
- # Find phenotype by full name
- # browser.find_element(By.ID,"search").send_keys(random_phenotype.strip())
- # browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
- # self.assertTrue("No phenotypes" not in browser.page_source)
- # time.sleep(settings_cll.IMPLICTLY_WAIT)
- # browser.find_element(By.ID,"reset-form").click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
- # Find by partial name of phenotype
- self.create_test_phenotype("COVID-19 infection",
- "desc", [i],
- self.permitted_group,
- False,
- owner=self.owner_user,
- author="author")
- browser.find_element(By.ID, "search").send_keys("infection")
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
- self.assertTrue("No phenotypes" not in browser.page_source)
- browser.find_element(By.ID, "reset-form").click()
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- def xx_test_deleted_phenotypes(self):
-
- self.login(su_user, su_password)
-
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- checkboxes = browser.find_elements(By.NAME, "collection_id")
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- # Iterate and check search by all tags except all tag
- for i in range(1, len(checkboxes)):
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.ID, "show_deleted_phenotypes").click()
-
- browser.find_element(
- By.XPATH, '//button[@class = "btn btn-primary"]').click()
-
-
- self.assertTrue("cl-card-deleted" in
- browser.page_source)
-
- browser.find_element(By.ID, "reset-form").click()
-
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- def xx_test_only_owned_phenotypes(self):
-
- # First login as superuser
- self.login(su_user, su_password)
- browser = self.browser
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.ID, "show_my_phenotypes").click()
-
- browser.find_element(By.XPATH,
- '//button[@class = "btn btn-primary"]').click()
-
- self.assertTrue("No phenotypes" in browser.page_source)
-
- self.logout()
-
- # After login to owner and check owned phenotypes
- self.login(ow_user, ow_password)
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.ID, "show_my_phenotypes").click()
-
- browser.find_element(By.XPATH,
- '//button[@class = "btn btn-primary"]').click()
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- def xx_test_author_filter(self):
-
- self.login(su_user, su_password)
- browser = self.browser
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- checkboxes = browser.find_elements(By.NAME, "collection_id")
-
- # Check author name with author names of phenotype
- for i in range(1, len(checkboxes)):
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.NAME, "author").send_keys("test_author")
-
- element = [
- k for k in browser.find_elements(By.CLASS_NAME, "col-sm-12")
- if "test_author" in k.text
- ]
-
- for j in range(1, len(element)):
- self.assertEqual(element[j].text, "test_author")
-
- browser.find_elements(By.NAME, "collection_id")[i].click()
-
- def xx_test_phenotype_with_all_attributes(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- browser.find_elements(By.NAME, "collection_id")[0].click()
-
- # Test phenotype which combines all filters
- self.create_test_phenotype("test",
- "desc", [1, 2, 3, 4, 5, 6, 7],
- self.permitted_group,
- False,
- owner=self.owner_user,
- author="owneruser")
-
- browser.find_element(By.NAME, "author").send_keys("owneruser")
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.ID, "search").send_keys("test")
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.NAME, "owner").send_keys("owneruser")
-
- browser.find_element(By.ID, "show_my_phenotypes").click()
-
- browser.find_element(By.XPATH,
- '//button[@class = "btn btn-primary"]').click()
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- """
- NOT FOR RELEASE 1
- def test_basic_to_advanced_search(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- # Search phenotype in basic search
- browser.find_element(By.ID,"search1").send_keys("Phenotype")
-
- browser.find_element(By.XPATH,'//button[@classxx = "btn btn-info"]').click()
-
- self.assertFalse(browser.find_element(By.ID,"search1").get_attribute("value") == "")
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- # Find phenotype in advanced search and go back to basic search to check the clear input
- browser.find_element(By.XPATH,"//*[@id='show-advanced-search']").click()
-
- browser.find_element(By.XPATH,'//button[@class = "btn btn-primary"]').click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- self.assertTrue("No phenotypes" not in browser.page_source)
-
- browser.find_element(By.ID,"search").clear()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.XPATH,"//*[@id='show-basic-search']").click()
-
- self.assertTrue(browser.find_element(By.ID,"search1").get_attribute("value") == "")
-
- """
-
- def xx_test_tag_input_bar(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST + reverse('search_phenotypes'))
-
- browser.find_element(By.XPATH,
- "//*[@id='show-advanced-search']").click()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.XPATH,
- "//*[@class='bootstrap-tagsinput']").click()
-
- browser.find_element(By.CLASS_NAME,
- "tt-input").send_keys("Phenotype_library")
-
- self.assertTrue("Nothing found." not in browser.page_source)
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.CLASS_NAME, "tt-input").clear()
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- browser.find_element(By.CLASS_NAME, "tt-input").send_keys("test")
-
- time.sleep(settings_cll.IMPLICTLY_WAIT)
-
- self.assertTrue("Nothing found." in browser.page_source)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_versioning.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_versioning.py
deleted file mode 100644
index e49a364ef..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/test_versioning.py
+++ /dev/null
@@ -1,683 +0,0 @@
-import time
-import xml.etree.ElementTree as ET
-from datetime import datetime
-from urllib.parse import urlparse
-
-from clinicalcode.db_utils import getGroupOfCodesByConceptId_HISTORICAL
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from clinicalcode.views.Concept import concept_codes_to_csv
-from clinicalcode.views.WorkingSet import workingset_to_csv
-# from django.conf import settings
-# from cll import settings as settings_cll
-# from cll import test_settings as settings
-from cll import test_settings as settings_cll
-from django.contrib.staticfiles.testing import StaticLiveServerTestCase
-from django.test import RequestFactory
-from rest_framework.reverse import reverse
-from selenium import webdriver
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support import expected_conditions as EC
-from selenium.webdriver.support.ui import WebDriverWait
-
-
-class VersioningTest(StaticLiveServerTestCase):
-
- def setUp(self):
- location = os.path.dirname(__file__)
- if settings_cll.REMOTE_TEST:
- self.browser = webdriver.Remote(
- command_executor=settings_cll.REMOTE_TEST_HOST,
- desired_capabilities=settings_cll.chrome_options.
- to_capabilities())
- self.browser.implicitly_wait(settings_cll.IMPLICTLY_WAIT)
- else:
- if settings_cll.IS_LINUX:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver"),
- chrome_options=settings_cll.chrome_options)
- else:
- self.browser = webdriver.Chrome(
- os.path.join(location, "chromedriver.exe"),
- chrome_options=settings_cll.chrome_options)
- super(VersioningTest, self).setUp()
-
- super(VersioningTest, self).setUp()
-
- self.factory = RequestFactory()
-
- self.WEBAPP_HOST = self.live_server_url.replace('localhost', '127.0.0.1')
- if settings_cll.REMOTE_TEST:
- self.WEBAPP_HOST = settings_cll.WEBAPP_HOST
- '''data'''
- super_user = User.objects.create_superuser(username=su_user, password=su_password, email=None)
- self.normal_user = User.objects.create_user(username=nm_user, password=nm_password, email=None)
- owner_user = User.objects.create_user(username=ow_user, password=ow_password, email=None)
- group_user = User.objects.create_user(username=gp_user, password=gp_password, email=None)
-
- # Groups: a group that is not permitted and one that is.
- permitted_group = Group.objects.create(name="permitted_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(permitted_group)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- self.concept_everybody_can_edit = Concept.objects.create(
- name="concept everybody can edit",
- description="concept description",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- self.child_concept = Concept.objects.create(
- name="child concept",
- description="child concept",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.VIEW)
-
- self.component = Component.objects.create(
- comment="child concept",
- component_type=1,
- concept=self.concept_everybody_can_edit,
- concept_ref=self.child_concept,
- created_by=owner_user,
- logical_type=1,
- name="child concept")
-
- self.component = Component.objects.create(
- comment="Component visibility test",
- component_type=2,
- concept=self.concept_everybody_can_edit,
- created_by=owner_user,
- logical_type=1,
- name="Component")
-
- self.code_list = CodeList.objects.create(
- component=self.component, description="Code list visibility test")
- self.code = Code.objects.create(code_list=self.code_list,
- code="45554",
- description="visibility test")
-
- # concept is updated two times to make hisotry
- self.concept_everybody_can_edit.author = "the_test_goat2"
- self.concept_everybody_can_edit.save()
- self.concept_everybody_can_edit.author = "the_test_goat2"
- self.concept_everybody_can_edit.save()
-
- concept_info_list = [{str(self.concept_everybody_can_edit.id):{"ttt|4":"yyy"}}]
-
- self.workingset_everybody_can_edit = WorkingSet.objects.create(
- name="wokringset everybody can access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- concept_informations=concept_info_list,
- concept_version={
- (str(self.concept_everybody_can_edit.id)):
- str(self.concept_everybody_can_edit.history.first().history_id)
- },
- group=permitted_group,
- group_access=Permissions.VIEW,
- owner_access=Permissions.VIEW,
- world_access=Permissions.EDIT)
-
- # workingset is updated two times to make hisotry
- self.workingset_everybody_can_edit.author = "the_test_goat2"
- self.workingset_everybody_can_edit.save()
- self.workingset_everybody_can_edit.author = "the_test_goat2"
- self.workingset_everybody_can_edit.save()
-
- update_friendly_id()
- save_stat(self.WEBAPP_HOST)
-
- def tearDown(self):
- self.browser.quit()
- super(VersioningTest, self).tearDown()
-
- def login(self, username, password):
- self.logout()
- self.browser.find_element(By.NAME, 'username').send_keys(username)
- self.browser.find_element(By.NAME, 'password').send_keys(password)
- self.browser.find_element(By.NAME, 'password').send_keys(Keys.ENTER)
-
- def logout(self):
- self.browser.get(
- '%s%s' %
- (self.WEBAPP_HOST, '/account/logout/?next=/account/login/'))
-
- def wait_to_be_logged_in(self, username):
- wait = WebDriverWait(self.browser, 10)
- element = wait.until(
- EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, 'p.navbar-text'), username))
-
- def get_codes_from_response(self, response):
- response = response.splitlines()
- response.pop(0) # remove headers
-
- codes = []
-
- for r in response:
- code = r.split(",")[0]
- codes.append(code)
-
- codes.sort()
- # self.output.sort()
- print(("REPONSE_CODES: ", codes))
-
- return codes
-
- '''
- Every version of a code list has a version ID (formerly the history ID)
- '''
-
- def test_concept_every_version_has_id(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- table = self.browser.find_element(By.ID, 'history-table')
- table_rows = table.find_elements(By.TAG_NAME,'tr')
-
- i = 1
- for row in table_rows:
- test = True
- if i != 1: # omit first row which contains headers
- table_data = row.find_elements(By.TAG_NAME,'td')
- id = table_data[0].text
- if id is None:
- test = False
- else:
- try:
- id = int(table_data[0].text)
- except:
- test = False
-
- self.assertTrue(test)
- i += 1
-
- def test_workingset_every_version_has_id(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- print(("WORKINGSET ID", self.workingset_everybody_can_edit.id))
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('workingset_detail',
- kwargs={
- 'pk': self.workingset_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- # self.wait_to_be_logged_in(ow_user)
-
- table = self.browser.find_element(By.ID, 'history-table')
- table_rows = table.find_elements(By.TAG_NAME,'tr')
-
- i = 1
- for row in table_rows:
- test = True
- if i != 1: # omit first row which contains headers
- table_data = row.find_elements(By.TAG_NAME,'td')
- id = table_data[0].text
- if id is None:
- test = False
- else:
- try:
- id = int(table_data[0].text)
- except:
- test = False
-
- self.assertTrue(test)
- i += 1
-
- '''
- The version ID is displayed along with the title.
- '''
-
- def test_concept_every_version_has_title(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- table = self.browser.find_element(By.ID, 'history-table')
- table_rows = table.find_elements(By.TAG_NAME,'tr')
-
- i = 1
- for row in table_rows:
- test = True
- if i != 1: # omit first row which contains headers
- table_data = row.find_elements(By.TAG_NAME,'td')
- title = table_data[1].text
- self.assertEqual(title, self.concept_everybody_can_edit.name)
- i += 1
-
- def test_workingset_every_version_has_title(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- print(("WORKINGSET ID", self.workingset_everybody_can_edit.id))
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('workingset_detail',
- kwargs={
- 'pk': self.workingset_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- table = self.browser.find_element(By.ID, 'history-table')
- table_rows = table.find_elements(By.TAG_NAME,'tr')
-
- i = 1
- for row in table_rows:
- test = True
- if i != 1: # omit first row which contains headers
- table_data = row.find_elements(By.TAG_NAME,'td')
- title = table_data[1].text
- self.assertEqual(title,
- self.workingset_everybody_can_edit.name)
- i += 1
-
- '''
- There is a URL to refer to a specific version of a code list
- '''
-
- def test_concept_every_version_has_url(self):
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_detail',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- links = self.browser.find_elements(By.CLASS_NAME, 'version-link')
-
- id_index = 0
- for link in links:
- url = link.get_attribute("href")
- u = urlparse(url)
- # check if url is valid
- self.assertEqual(u.scheme, 'http')
- path = u.path.split('/')
- # check if url contains concept id
- self.assertEqual(int(path[2]), self.concept_everybody_can_edit.id)
- # check if url contains unique history id
- version_id = self.concept_everybody_can_edit.history.all(
- )[id_index].history_id
- self.assertEqual(int(path[4]), version_id)
- id_index += 1
-
- def test_workingset_every_version_has_url(self):
- self.login(ow_user, ow_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s' % (self.WEBAPP_HOST, '/workingsets/'))
-
- browser.get(self.WEBAPP_HOST + reverse('workingset_list'))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- links = self.browser.find_elements(By.CLASS_NAME, 'version-link')
-
- id_index = 0
- for link in links:
- url = link.get_attribute("href")
- u = urlparse(url)
- # check if url is valid
- self.assertEqual(u.scheme, 'http')
- path = u.path.split('/')
- # check if url contains workingset id
- self.assertEqual(int(path[2]),
- self.workingset_everybody_can_edit.id)
- # check if url contains unique history id
- version_id = self.workingset_everybody_can_edit.history.all(
- )[id_index].history_id
- self.assertEqual(int(path[4]), version_id)
- id_index += 1
-
- '''
- There is a URL that always refers to the latest version of a code list
- '''
-
- def test_concept_has_url_to_latest_ver(self):
-
- latest_version = self.concept_everybody_can_edit.history.first(
- ).history_id
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/version/',
- # latest_version, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('concept_history_detail',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- 'concept_history_id': latest_version
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # url = ('%s%s%s' % ('/concepts/C',
- # self.concept_everybody_can_edit.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'concept_codes_to_csv',
- kwargs={'pk': self.concept_everybody_can_edit.id})
- request = self.factory.get(url)
- request.user = self.normal_user
- request.CURRENT_BRAND = ''
-
- # make export to csv request
- response = concept_codes_to_csv(request,
- self.concept_everybody_can_edit.id)
-
- codes = self.get_codes_from_response(response.content.decode('utf-8'))
-
- historical_codes = getGroupOfCodesByConceptId_HISTORICAL(
- self.concept_everybody_can_edit.id, latest_version)[0]['code']
-
- # test if live codes equals historical codes
- self.assertEqual(codes[0], historical_codes)
-
- title = self.browser.find_element(By.TAG_NAME, 'h2').text
- # title = self.browser.find_elements_by_tag_name('i')
-
- # test if page contains concept name
- self.assertTrue(self.concept_everybody_can_edit.name in title)
-
- def test_workingset_has_url_to_latest_ver(self):
- latest_version = self.workingset_everybody_can_edit.history.first(
- ).history_id
-
- self.login(nm_user, nm_password)
-
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s%s%s' % (self.WEBAPP_HOST, '/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/version/',
- # latest_version, '/detail/'))
-
- browser.get(self.WEBAPP_HOST +
- reverse('workingset_history_detail',
- kwargs={
- 'pk': self.workingset_everybody_can_edit.id,
- 'workingset_history_id': latest_version
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # url = ('%s%s%s' % ('/workingsets/WS',
- # self.workingset_everybody_can_edit.id, '/export/codes'))
-
- url = self.WEBAPP_HOST + reverse(
- 'workingset_to_csv',
- kwargs={'pk': self.workingset_everybody_can_edit.id})
- request = self.factory.get(url)
- request.user = self.normal_user
- request.CURRENT_BRAND = ''
-
- # make export to csv request
- response = workingset_to_csv(request,
- self.workingset_everybody_can_edit.id)
-
- codes = self.get_codes_from_response(response.content.decode('utf-8'))
-
- # check if workingset returns code contained by concept
- self.assertEqual(codes, ['45554'])
-
- title = self.browser.find_element(By.TAG_NAME, 'h2').text
-
- # title = self.browser.find_elements_by_tag_name('i')
-
- # test if page contains concept name
- self.assertTrue(self.workingset_everybody_can_edit.name in title)
-
- '''
- The API can get the latest version of a code list
- '''
-
- def test_concept_has_url_to_latest_ver_in_api(self):
- latest_version = self.concept_everybody_can_edit.history.first().history_id
-
- self.login(nm_user, nm_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST)
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- # get the test server url
- # browser.get('%s%s%s' % (self.WEBAPP_HOST, '/api/export_concept_codes/',
- # self.concept_everybody_can_edit.id))
-
- browser.get(self.WEBAPP_HOST +
- reverse('api:api_export_concept_codes',
- kwargs={'pk': self.concept_everybody_can_edit.id}))
-
- tree = ET.fromstring(browser.page_source)
-
- for x in tree.iter("concept_version_id"):
- self.assertEqual(int(x.text), latest_version)
-
- def test_workingset_has_url_to_latest_ver_in_api(self):
- latest_version = self.concept_everybody_can_edit.history.first().history_id
-
- self.login(nm_user, nm_password)
- browser = self.browser
-
- browser.get(self.WEBAPP_HOST)
-
- browser.get(self.WEBAPP_HOST + reverse('api:api_export_workingset_codes', kwargs={'pk': self.workingset_everybody_can_edit.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- tree = ET.fromstring(browser.page_source)
-
- for x in tree.iter("concept_version_id"):
- self.assertEqual(int(x.text), latest_version)
-
- '''
- The API can get a specific version of a code list
- '''
-
- def test_concept_api_get_specific_version(self):
-
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(self.WEBAPP_HOST)
-
-
- browser.get(self.WEBAPP_HOST +
- reverse('api:api_export_concept_codes',
- kwargs={'pk': self.concept_everybody_can_edit.id}))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue(
- self.code.code in browser.page_source
- and self.concept_everybody_can_edit.name in browser.page_source)
-
- def test_workingset_api_get_specific_version(self):
-
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- browser.get(self.WEBAPP_HOST)
-
- browser.get(self.WEBAPP_HOST + reverse(
- 'api:api_export_workingset_codes_byVersionID',
- kwargs={
- 'pk':
- self.workingset_everybody_can_edit.id,
- 'workingset_history_id':
- self.workingset_everybody_can_edit.history.first().history_id
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
-
- self.assertTrue(
- self.code.code in browser.page_source
- and self.concept_everybody_can_edit.name in browser.page_source)
-
- '''
- When a child concept is added to a parent concept, it adds the latest version by default (but the version number can be changed).
- '''
-
- def test_latest_version_exist_after_adding_child(self):
- # get latest version
- latest_version = self.concept_everybody_can_edit.history.first(
- ).history_id
-
- self.login(nm_user, nm_password)
- browser = self.browser
- # get the test server url
- # browser.get('%s%s%s%s' % (self.WEBAPP_HOST, '/concepts/C',
- # self.concept_everybody_can_edit.id, '/update/'))
- browser.get(self.WEBAPP_HOST +
- reverse('concept_update',
- kwargs={
- 'pk': self.concept_everybody_can_edit.id,
- }))
-
- time.sleep(settings_cll.TEST_SLEEP_TIME)
- # add child
- # try to add child
- browser.find_element(By.ID, 'conceptTypes').click()
-
- browser.implicitly_wait(5)
- browser.find_element(By.ID, 'addConcept').click()
-
- wait = WebDriverWait(self.browser, 10)
- wait.until(
- EC.presence_of_element_located((By.ID, "concept-search-text")))
-
- concept_search_field = browser.find_element(By.ID,
- "concept-search-text")
-
- time.sleep(3) # wait to load component form
-
- concept_search_field.send_keys("concept")
-
- time.sleep(3) # wait to load concept prompt
-
- concept_search_field.send_keys(Keys.DOWN)
- concept_search_field.send_keys(Keys.ENTER)
-
- browser.find_element(By.ID, "saveBtn").click()
-
- time.sleep(4) # wait to submition be completed
-
- latest_version_after_adding_child = self.concept_everybody_can_edit.history.first(
- ).history_id
- self.assertNotEqual(latest_version, latest_version_after_adding_child)
-
- '''
- When a child concept is updated, the parent concept does not change
- '''
-
- def test_concept_version_when_child_concept_updated(self):
- latest_version = self.concept_everybody_can_edit.history.first(
- ).history_id
-
- self.child_concept.author = "the_test_goat2"
- self.child_concept.save()
-
- latest_version_after_child_updatge = self.concept_everybody_can_edit.history.first(
- ).history_id
-
- self.assertEqual(latest_version, latest_version_after_child_updatge)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/tests.py b/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/tests.py
deleted file mode 100644
index a69704f9a..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/functional_tests/tests.py
+++ /dev/null
@@ -1,1413 +0,0 @@
-# from datetime import datetime
-# from django.test import TestCase
-# from django.contrib.auth.models import User
-# from clinicalcode.models.CodingSystem import CodingSystem
-# from clinicalcode.models.Concept import Concept
-# from clinicalcode.models.Component import Component
-# from clinicalcode.models.CodeList import CodeList
-# from clinicalcode.models.Code import Code
-# from clinicalcode.db_utils import getGroupOfCodesByConceptId
-#
-#
-# # Create your tests here.
-#
-#
-# class GroupConceptCodesTestCase(TestCase):
-#
-# @classmethod
-# def setUpTestData(cls):
-# '''
-# create all the concepts, components, code lists, code regexes and codes to use within the test database
-# '''
-# user = User.objects.create_user(
-# username="david",
-# email="d.m.bown@swansea.ac.uk",
-# password="password")
-#
-# coding_system = CodingSystem.objects.create(
-# name="Lookup table",
-# description="Lookup Codes for testing purposes",
-# link=Google_website,
-# database_connection_name="default",
-# table_name="clinicalcode_lookup",
-# code_column_name="code",
-# desc_column_name="description")
-# coding_system.save()
-#
-# concept_heart_disease_1 = Concept.objects.create(
-# name="Heart disease 1",
-# description="Heart disease 1",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_disease_1_id = concept_heart_disease_1.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_disease_1,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="1", description="Test 1")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="11", description="Test 11")
-# Code.objects.create(code_list=code_list, code="12", description="Test 12")
-# Code.objects.create(code_list=code_list, code="16", description="Test 16")
-# Code.objects.create(code_list=code_list, code="21", description="Test 21")
-# Code.objects.create(code_list=code_list, code="24", description="Test 24")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_disease_1,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="45", description="Test 45")
-#
-# concept_heart_attack_2a = Concept.objects.create(
-# name="Heart attack 2a",
-# description="Heart attack 2a",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_attack_2a_id = concept_heart_attack_2a.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_attack_2a,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="2", description="Test 2")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_attack_2a,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="3", description="Test 3")
-#
-# concept_heart_failure_2b = Concept.objects.create(
-# name="Heart failure 2b",
-# description="Heart failure 2b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_failure_2b_id = concept_heart_failure_2b.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_failure_2b,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-# Code.objects.create(code_list=code_list, code="12", description="Test 12")
-# Code.objects.create(code_list=code_list, code="16", description="Test 16")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_failure_2b,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# concept_heart_attack_3a = Concept.objects.create(
-# name="Heart attack 3a",
-# description="Heart attack 3a",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_attack_3a_id = concept_heart_attack_3a.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_attack_3a,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="6", description="Test 6")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_attack_3a,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="7", description="Test 7")
-#
-# concept_heart_attack_3b = Concept.objects.create(
-# name="Heart attack 3b",
-# description="Heart attack 3b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_attack_3b_id = concept_heart_attack_3b.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_attack_3b,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_attack_3b,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="4", description="Test 4")
-#
-# concept_heart_failure_3a = Concept.objects.create(
-# name="Heart failure 3a",
-# description="Heart failure 3a",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_failure_3a_id = concept_heart_failure_3a.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_failure_3a,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-# Code.objects.create(code_list=code_list, code="9", description="Test 9")
-# Code.objects.create(code_list=code_list, code="10", description="Test 10")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_failure_3a,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="9", description="Test 9")
-#
-# concept_heart_failure_3b = Concept.objects.create(
-# name="Heart failure 3b",
-# description="Heart failure 3b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.concept_heart_failure_3b_id = concept_heart_failure_3b.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=concept_heart_failure_3b,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="11", description="Test 11")
-# Code.objects.create(code_list=code_list, code="12", description="Test 12")
-# Code.objects.create(code_list=code_list, code="13", description="Test 13")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=concept_heart_failure_3b,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="12", description="Test 12")
-# Code.objects.create(code_list=code_list2, code="13", description="Test 13")
-#
-# # add the concept links
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=concept_heart_disease_1,
-# concept_ref=concept_heart_attack_2a,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 4 exclusion",
-# component_type=1,
-# concept=concept_heart_disease_1,
-# concept_ref=concept_heart_failure_2b,
-# created_by=user,
-# logical_type=2,
-# name="Component 4 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=concept_heart_attack_2a,
-# concept_ref=concept_heart_attack_3a,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 4 exclusion",
-# component_type=1,
-# concept=concept_heart_attack_2a,
-# concept_ref=concept_heart_attack_3b,
-# created_by=user,
-# logical_type=2,
-# name="Component 4 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 exclusion",
-# component_type=1,
-# concept=concept_heart_failure_2b,
-# concept_ref=concept_heart_failure_3a,
-# created_by=user,
-# logical_type=2,
-# name="Component 3 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 4 inclusion",
-# component_type=1,
-# concept=concept_heart_failure_2b,
-# concept_ref=concept_heart_failure_3b,
-# created_by=user,
-# logical_type=1,
-# name="Component 4 inclusion")
-#
-# # test 2
-# # level 1 circ system
-# circ_system_1 = Concept.objects.create(
-# name="Circ system 1",
-# description="Circ system 1",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.circ_system_1_id = circ_system_1.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=circ_system_1,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="2", description="Test 2")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="6", description="Test 6")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-# Code.objects.create(code_list=code_list, code="13", description="Test 13")
-# Code.objects.create(code_list=code_list, code="16", description="Test 16")
-# Code.objects.create(code_list=code_list, code="19", description="Test 19")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=circ_system_1,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="16", description="Test 16")
-# Code.objects.create(code_list=code_list2, code="2", description="Test 2")
-# # end of level 1 circ system
-#
-# # level 2 acute rheu
-# acute_rheu_2a = Concept.objects.create(
-# name="Acute rheu 2a",
-# description="Acute rheu 2a",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.acute_rheu_2a_id = acute_rheu_2a.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=acute_rheu_2a,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=acute_rheu_2a,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="1", description="Test 1")
-# # end of level 2 acute rheu
-#
-# # level 2 chronic rheu
-# chronic_rheu_2b = Concept.objects.create(
-# name="Chronic rheu 2b",
-# description="Chronic rheu 2b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.chronic_rheu_2b_id = chronic_rheu_2b.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=chronic_rheu_2b,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="2", description="Test 2")
-# Code.objects.create(code_list=code_list, code="10", description="Test 10")
-# Code.objects.create(code_list=code_list, code="12", description="Test 12")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=chronic_rheu_2b,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="3", description="Test 3")
-# # end of level 2 chronic rheu
-#
-# # level 2 hypertensive dis
-# hypertensive_dis_2c = Concept.objects.create(
-# name="hypertensive dis 2c",
-# description="hypertensive dis 2c",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.hypertensive_dis_2c_id = hypertensive_dis_2c.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=hypertensive_dis_2c,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="12", description="Test 12")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-# Code.objects.create(code_list=code_list, code="14", description="Test 14")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=hypertensive_dis_2c,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="8", description="Test 8")
-# # end of level 2 hypertensive dis
-#
-# # level 3 heart inv
-# heart_inv_3a = Concept.objects.create(
-# name="Heart inv 3a",
-# description="Heart inv 3a",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.heart_inv_3a_id = heart_inv_3a.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=heart_inv_3a,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="1", description="Test 1")
-# Code.objects.create(code_list=code_list, code="6", description="Test 6")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-#
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=heart_inv_3a,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="2", description="Test 2")
-# Code.objects.create(code_list=code_list2, code="7", description="Test 7")
-# # end of heart inv
-#
-# # no heart inv
-# no_heart_inv_3b = Concept.objects.create(
-# name="No heart 3b",
-# description="No heart 3b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.no_heart_inv_3b_id = no_heart_inv_3b.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=no_heart_inv_3b,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-# Code.objects.create(code_list=code_list, code="9", description="Test 9")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=no_heart_inv_3b,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="9", description="Test 9")
-# Code.objects.create(code_list=code_list2, code="12", description="Test 12")
-# # end of level 3 no heart inv
-#
-# # level 3 mit dis
-# mit_dis_3c = Concept.objects.create(
-# name="Mit dis 3b",
-# description="Mit dis 3b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.mit_dis_3c_id = mit_dis_3c.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=mit_dis_3c,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="2", description="Test 2")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="10", description="Test 10")
-# Code.objects.create(code_list=code_list, code="11", description="Test 11")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=mit_dis_3c,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list2, code="10", description="Test 10")
-# # end of level 3 mit dis
-#
-# # level 3 renal dis
-# renal_dis_3d = Concept.objects.create(
-# name="Renal dis 3d",
-# description="Renal dis 3d",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.renal_dis_3d_id = renal_dis_3d.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=renal_dis_3d,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="6", description="Test 6")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=renal_dis_3d,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="5", description="Test 5")
-# # end of level 3 renal dis
-#
-# # heart dis
-# heart_dis_3e = Concept.objects.create(
-# name="Heart dis 3e",
-# description="Heart dis 3e",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.heart_dis_3e_id = heart_dis_3e.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=heart_dis_3e,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-# Code.objects.create(code_list=code_list, code="12", description="Test 12")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=heart_dis_3e,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list2, code="5", description="Test 5")
-# # end of level 3 heart dis
-#
-# # level 4 stenosis
-# stenosis_4a = Concept.objects.create(
-# name="stenosis 4a",
-# description="stenosis 4a",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.stenosis_4a_id = stenosis_4a.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=stenosis_4a,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="6", description="Test 6")
-# Code.objects.create(code_list=code_list, code="8", description="Test 8")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=stenosis_4a,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="6", description="Test 6")
-# # end of level 4 stenosis
-#
-# # level 4 valve
-# valve_4b = Concept.objects.create(
-# name="valve 4b",
-# description="valve 4b",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.valve_4b_id = valve_4b.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=valve_4b,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="1", description="Test 1")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=valve_4b,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="5", description="Test 5")
-# # end of level 4 valve
-#
-# # level 4 renal fail
-# fail_4c = Concept.objects.create(
-# name="fail_4c",
-# description="fail_4c",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.fail_4c_id = fail_4c.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=fail_4c,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="5", description="Test 5")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=fail_4c,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="8", description="Test 8")
-# Code.objects.create(code_list=code_list2, code="7", description="Test 7")
-# # end of level 4 renal fail
-#
-# # level 4 renal no fail
-# no_fail_4d = Concept.objects.create(
-# name="no_fail_4d",
-# description="no_fail_4d",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.no_fail_4d_id = no_fail_4d.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=no_fail_4d,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="4", description="Test 4")
-# Code.objects.create(code_list=code_list, code="7", description="Test 7")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=no_fail_4d,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="8", description="Test 8")
-# # end of level 4 renal no fail
-#
-# # level 4 heart dis failure
-# failure_4e = Concept.objects.create(
-# name="failure_4e",
-# description="failure_4e",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.failure_4e_id = failure_4e.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=failure_4e,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="9", description="Test 9")
-# Code.objects.create(code_list=code_list, code="10", description="Test 10")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=failure_4e,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="10", description="Test 10")
-# # end of level 4 heart dis failure
-#
-# # level 4 heart dis no fail
-# no_fail_4f = Concept.objects.create(
-# name="no_fail_4f",
-# description="no_fail_4f",
-# author="David Bown",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# shared=1,
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# editable=1,
-# created_by=user,
-# modified_by=user,
-# coding_system=coding_system,
-# is_deleted=False)
-# cls.no_fail_4f_id = no_fail_4f.concept_id
-#
-# component = Component.objects.create(
-# comment="Component 1 inclusion",
-# component_type=2,
-# concept=no_fail_4f,
-# created_by=user,
-# logical_type=1,
-# name="Component 1 inclusion")
-#
-# code_list = CodeList.objects.create(component=component, description="Code list 1 inclusion")
-# Code.objects.create(code_list=code_list, code="3", description="Test 3")
-# Code.objects.create(code_list=code_list, code="9", description="Test 9")
-# Code.objects.create(code_list=code_list, code="10", description="Test 10")
-#
-# component2 = Component.objects.create(
-# comment="Component 2 exclusion",
-# component_type=2,
-# concept=no_fail_4f,
-# created_by=user,
-# logical_type=2,
-# name="Component 2 exclusion")
-#
-# code_list2 = CodeList.objects.create(component=component2, description="Code list 2 exclusion")
-# Code.objects.create(code_list=code_list2, code="10", description="Test 10")
-# # end of level 4 heart dis no fail
-#
-# # add the concept links
-# component = Component.objects.create(
-# comment="Component 4 exclusion",
-# component_type=1,
-# concept=circ_system_1,
-# concept_ref=acute_rheu_2a,
-# created_by=user,
-# logical_type=2,
-# name="Component 4 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=circ_system_1,
-# concept_ref=chronic_rheu_2b,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 5 exclusion",
-# component_type=1,
-# concept=circ_system_1,
-# concept_ref=hypertensive_dis_2c,
-# created_by=user,
-# logical_type=2,
-# name="Component 5 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 5 exclusion",
-# component_type=1,
-# concept=acute_rheu_2a,
-# concept_ref=heart_inv_3a,
-# created_by=user,
-# logical_type=2,
-# name="Component 5 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=acute_rheu_2a,
-# concept_ref=no_heart_inv_3b,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=chronic_rheu_2b,
-# concept_ref=mit_dis_3c,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=hypertensive_dis_2c,
-# concept_ref=renal_dis_3d,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 exclusion",
-# component_type=1,
-# concept=hypertensive_dis_2c,
-# concept_ref=heart_dis_3e,
-# created_by=user,
-# logical_type=2,
-# name="Component 3 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=mit_dis_3c,
-# concept_ref=stenosis_4a,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 exclusion",
-# component_type=1,
-# concept=mit_dis_3c,
-# concept_ref=valve_4b,
-# created_by=user,
-# logical_type=2,
-# name="Component 3 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=renal_dis_3d,
-# concept_ref=fail_4c,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 exclusion",
-# component_type=1,
-# concept=renal_dis_3d,
-# concept_ref=no_fail_4d,
-# created_by=user,
-# logical_type=2,
-# name="Component 3 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 exclusion",
-# component_type=1,
-# concept=heart_dis_3e,
-# concept_ref=failure_4e,
-# created_by=user,
-# logical_type=2,
-# name="Component 3 exclusion")
-#
-# component = Component.objects.create(
-# comment="Component 3 inclusion",
-# component_type=1,
-# concept=heart_dis_3e,
-# concept_ref=no_fail_4f,
-# created_by=user,
-# logical_type=1,
-# name="Component 3 inclusion")
-#
-# def test_export_concept_codes_heart_disease_1(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_disease_1_id)
-#
-# expected_result = [{'code': u'1', 'description': u'Test 1'}, {'code': u'2', 'description': u'Test 2'}, {'code': u'21', 'description': u'Test 21'}, {'code': u'24', 'description': u'Test 24'}, {'code': u'3', 'description': u'Test 3'}, {'code': u'4', 'description': u'Test 4'}, {'code': u'6', 'description': u'Test 6'}]
-#
-# self.assertEqual(len(codes), 7)
-# self.assertListEqual(codes, expected_result)
-#
-# def test_export_concept_codes_heart_failure_3b(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_failure_3b_id)
-#
-# expected_result = [{'code': u'11', 'description': u'Test 11'}]
-#
-# self.assertEqual(len(codes), 1, msg="Codes returned do not match")
-# self.assertListEqual(codes, expected_result)
-#
-# def test_export_concept_codes_heart_failure_3a(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_failure_3a_id)
-#
-# expected_result = [{'code': u'10', 'description': u'Test 10'}, {'code': u'8', 'description': u'Test 8'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(codes, expected_result)
-#
-# def test_export_concept_codes_heart_attack_3b(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_attack_3b_id)
-#
-# expected_result = [{'code': u'5', 'description': u'Test 5'}]
-#
-# self.assertEqual(len(codes), 1, msg="Codes returned do not match")
-# self.assertListEqual(codes, expected_result)
-#
-# def test_export_concept_codes_heart_attack_3a(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_attack_3a_id)
-#
-# expected_result = [{'code': u'5', 'description': u'Test 5'}, {'code': u'6', 'description': u'Test 6'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(codes, expected_result)
-#
-# def test_export_concept_codes_heart_attack_2a(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_attack_2a_id)
-#
-# expected_result = [{'code': u'2', 'description': u'Test 2'}, {'code': u'6', 'description': u'Test 6'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(codes, expected_result)
-#
-# def test_export_concept_codes_heart_failure_2b(self):
-# codes = getGroupOfCodesByConceptId(self.concept_heart_failure_2b_id)
-#
-# expected_result = [{'code': u'11', 'description': u'Test 11'}, {'code': u'12', 'description': u'Test 12'}, {'code': u'16', 'description': u'Test 16'}]
-#
-# self.assertEqual(len(codes), 3, msg="Codes returned do not match")
-# self.assertListEqual(codes, expected_result)
-#
-# def test_group_circ_system_1(self):
-# codes = getGroupOfCodesByConceptId(self.circ_system_1_id)
-#
-# expected_result = [{'code': u'8', 'description': u'Test 8'}, {'code': u'13', 'description': u'Test 13'}, {'code': u'19', 'description': u'Test 19'}, {'code': u'2', 'description': u'Test 2'}, {'code': u'10', 'description': u'Test 10'}, {'code': u'11', 'description': u'Test 11'}, {'code': u'12', 'description': u'Test 12'}]
-#
-# self.assertEqual(len(codes), 7)
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_acute_rheu_2a(self):
-# codes = getGroupOfCodesByConceptId(self.acute_rheu_2a_id)
-#
-# expected_result = [{'code': u'3', 'description': u'Test 3'}, {'code': u'4', 'description': u'Test 4'}, {'code': u'7', 'description': u'Test 7'}]
-#
-# self.assertEqual(len(codes), 3, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_chronic_rheu_2b(self):
-# codes = getGroupOfCodesByConceptId(self.chronic_rheu_2b_id)
-#
-# expected_result = [{'code': u'2', 'description': u'Test 2'}, {'code': u'10', 'description': u'Test 10'}, {'code': u'8', 'description': u'Test 8'}, {'code': u'11', 'description': u'Test 11'}, {'code': u'12', 'description': u'Test 12'}, {'code': u'5', 'description': u'Test 5'}]
-#
-# self.assertEqual(len(codes), 6, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_hypertensive_dis_2c(self):
-# codes = getGroupOfCodesByConceptId(self.hypertensive_dis_2c_id)
-#
-# expected_result = [{'code': u'6', 'description': u'Test 6'}, {'code': u'5', 'description': u'Test 5'}, {'code': u'7', 'description': u'Test 7'}, {'code': u'14', 'description': u'Test 14'}]
-#
-# self.assertEqual(len(codes), 4, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_heart_inv_3a(self):
-# codes = getGroupOfCodesByConceptId(self.heart_inv_3a_id)
-#
-# expected_result = [{'code': u'6', 'description': u'Test 6'}, {'code': u'8', 'description': u'Test 8'}, {'code': u'1', 'description': u'Test 1'}]
-#
-# self.assertEqual(len(codes), 3, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_no_heart_inv_3b(self):
-# codes = getGroupOfCodesByConceptId(self.no_heart_inv_3b_id)
-#
-# expected_result = [{'code': u'7', 'description': u'Test 7'}, {'code': u'8', 'description': u'Test 8'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_mit_dis_3c(self):
-# codes = getGroupOfCodesByConceptId(self.mit_dis_3c_id)
-#
-# expected_result = [{'code': u'2', 'description': u'Test 2'}, {'code': u'5', 'description': u'Test 5'}, {'code': u'8', 'description': u'Test 8'}, {'code': u'11', 'description': u'Test 11'}]
-#
-# self.assertEqual(len(codes), 4, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_renal_dis_3d(self):
-# codes = getGroupOfCodesByConceptId(self.renal_dis_3d_id)
-#
-# expected_result = [{'code': u'6', 'description': u'Test 6'}, {'code': u'5', 'description': u'Test 5'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_heart_dis_3e(self):
-# codes = getGroupOfCodesByConceptId(self.heart_dis_3e_id)
-#
-# expected_result = [ {'code': u'12', 'description': u'Test 12'}, {'code': u'8', 'description': u'Test 8'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_stenosis_4a(self):
-# codes = getGroupOfCodesByConceptId(self.stenosis_4a_id)
-#
-# expected_result = [{'code': u'4', 'description': u'Test 4'}, {'code': u'5', 'description': u'Test 5'}, {'code': u'8', 'description': u'Test 8'}]
-#
-# self.assertEqual(len(codes), 3, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_valve_4b(self):
-# codes = getGroupOfCodesByConceptId(self.valve_4b_id)
-#
-# expected_result = [{'code': u'3', 'description': u'Test 3'}, {'code': u'1', 'description': u'Test 1'}, {'code': u'4', 'description': u'Test 4'}]
-#
-# self.assertEqual(len(codes), 3, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_fail_4c(self):
-# codes = getGroupOfCodesByConceptId(self.fail_4c_id)
-#
-# expected_result = [{'code': u'5', 'description': u'Test 5'}, {'code': u'3', 'description': u'Test 3'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_no_fail_4d(self):
-# codes = getGroupOfCodesByConceptId(self.no_fail_4d_id)
-#
-# expected_result = [{'code': u'3', 'description': u'Test 3'}, {'code': u'7', 'description': u'Test 7'}, {'code': u'4', 'description': u'Test 4'}]
-#
-# self.assertEqual(len(codes), 3, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_failure_4e(self):
-# codes = getGroupOfCodesByConceptId(self.failure_4e_id)
-#
-# expected_result = [{'code': u'3', 'description': u'Test 3'}, {'code': u'9', 'description': u'Test 9'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
-#
-# def test_export_concept_codes_no_fail_4f(self):
-# codes = getGroupOfCodesByConceptId(self.no_fail_4f_id)
-#
-# expected_result = [{'code': u'3', 'description': u'Test 3'}, {'code': u'9', 'description': u'Test 9'}]
-#
-# self.assertEqual(len(codes), 2, msg="Codes returned do not match")
-# self.assertListEqual(sorted(codes), sorted(expected_result))
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/test_base.py b/CodeListLibrary_project/clinicalcode/tests/legacy/test_base.py
deleted file mode 100644
index f9e9c2f44..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/test_base.py
+++ /dev/null
@@ -1,77 +0,0 @@
-'''
- Test base class
- Set-up and tear-down etc. which are common for unit and functional tests.
-'''
-import os
-import time
-
-import requests
-
-import urllib3
-from django.db import connection, connections # , transaction
-from rest_framework.reverse import reverse
-
-SCREEN_DUMP_LOCATION = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'screendumps')
-'''
- Global test parameters.
-'''
-su_user = 'superuser'
-su_password = 'superuserPassword'
-ow_user = 'owneruser'
-ow_password = 'owneruserPassword'
-gp_user = 'groupuser'
-gp_password = 'groupuserPassword'
-vgp_user = 'viewGroupUser'
-vgp_password = 'viewGroupUserPassword'
-egp_user = 'editGroupUser'
-egp_password = 'editGroupUserPassword'
-nm_user = 'reginald'
-nm_password = 'reginaldspassword'
-Google_website = "https://www.google.com"
-
-
-def update_friendly_id():
- update_sqls = [
- "UPDATE clinicalcode_historicalconcept SET friendly_id = concat('C', cast(id as text));",
- "UPDATE clinicalcode_concept SET friendly_id = concat('C', cast(id as text));",
- "UPDATE clinicalcode_historicalworkingset SET friendly_id = concat('WS', cast(id as text));",
- "UPDATE clinicalcode_workingset SET friendly_id = concat('WS', cast(id as text));"
- ]
-
- for sql in update_sqls:
- with connection.cursor() as cursor:
- try:
- cursor.execute(sql)
- except:
- pass
-
- print("###### update_friendly_id #############################")
-
-
-def save_stat000(host):
- url_run = host + reverse("HDRUK_run_statistics")
- resp_stat = requests.get(url_run)
-
-
- print((str(resp_stat.status) + "#### Run-stat ####"))
-
- url_save = host + reverse("collections_run_filters")
- resp_stat = requests.get(url_save)
-
- print((str(resp_stat.status) + "#### Run-stat-filters save ####"))
-
-def save_stat(host):
- http = urllib3.PoolManager()
-
- url_run = host + "/admin/run-stat/"
- resp_stat = http.request("GET", url_run)
-
- print("#### Run-stat- HDRUK home page ####" + "(status-code= " + str(resp_stat.status) + ")")
-
- url_save = host + "/admin/run-stat-filters/"
- resp_stat = http.request("GET", url_save)
-
- print("#### Run-stat-filters save ####" + "(status-code= " + str(resp_stat.status) + ")")
-
-
-
\ No newline at end of file
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_test_base.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_test_base.py
deleted file mode 100644
index f14506d7e..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_test_base.py
+++ /dev/null
@@ -1,5 +0,0 @@
-'''
- Unit test base class
-
- Set-up and tear-down etc. for unit tests tests.
-'''
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/__init__.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/__init__.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/test_read_only_conf_concept.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/test_read_only_conf_concept.py
deleted file mode 100644
index 611a73737..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/test_read_only_conf_concept.py
+++ /dev/null
@@ -1,119 +0,0 @@
-import sys
-from datetime import datetime
-from unittest import skip, skipIf
-
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from decouple import Config, RepositoryEnv
-from django.conf import settings
-from django.test import TestCase, override_settings
-
-'''
- If arguments does not contain read_only substring then skip the test
- because it means that read only settings are not used and tests will fail.
- See manage.py to see how it works.
-'''
-
-
-@skipIf('read_only' not in sys.argv[-1], "READ ONLY TEST SKIPPED")
-class ReadOnlyTest(TestCase):
-
- @classmethod
- def setUpTestData(cls):
-
- # Users: a normal user and a super_user.
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
- view_group_user = User.objects.create_user(username=vgp_user,
- password=vgp_password,
- email=None)
- edit_group_user = User.objects.create_user(username=egp_user,
- password=egp_password,
- email=None)
-
- # Groups: a group that is not permitted and one that is.
- permitted_group = Group.objects.create(name="permitted_group")
- forbidden_group = Group.objects.create(name="forbidden_group")
- view_group = Group.objects.create(name="view_group")
- edit_group = Group.objects.create(name="edit_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(permitted_group)
- view_group_user.groups.add(view_group)
- edit_group_user.groups.add(edit_group)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- cls.concept_everybody_can_edit = Concept.objects.create(
- name="concept_noone_can_access",
- description="concept_noone_can_access",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- '''
- A concept owner cannot edit.
- '''
-
- def test_owner_not_allowed_to_edit(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(None,
- Concept,
- ReadOnlyTest.concept_everybody_can_edit.id,
- user=owner)
- self.assertFalse(permitted)
-
- '''
- A user cannot create a new concept.
- '''
-
- def test_user_not_allowed_to_create(self):
- permitted = allowed_to_create()
- self.assertFalse(permitted)
-
- '''
- A super user CANNOT create, edit, revert, or fork a concept.
- '''
-
- def test_super_user_not_allowed_to_edit(self):
- super = User.objects.get(username=su_user)
- permitted = allowed_to_edit(None,
- Concept,
- ReadOnlyTest.concept_everybody_can_edit.id,
- user=super)
- self.assertFalse(permitted)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/test_read_only_conf_workingset.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/test_read_only_conf_workingset.py
deleted file mode 100644
index e0896b8c4..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/read_only/test_read_only_conf_workingset.py
+++ /dev/null
@@ -1,105 +0,0 @@
-import sys
-from datetime import datetime
-from unittest import skip, skipIf
-
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from decouple import Config, RepositoryEnv
-from django.test import TestCase, override_settings
-
-'''
- If arguments does not contain read_only substring then skip the test
- because it means that read only settings are not used and tests will fail.
- See manage.py to see how it works.
-'''
-
-
-@skipIf('read_only' not in sys.argv[-1], "READ ONLY TEST SKIPPED")
-class ReadOnlyTest(TestCase):
-
- @classmethod
- def setUpTestData(cls):
-
- # Users: a normal user and a super_user.
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
- view_group_user = User.objects.create_user(username=vgp_user,
- password=vgp_password,
- email=None)
- edit_group_user = User.objects.create_user(username=egp_user,
- password=egp_password,
- email=None)
-
- # Groups: a group that is not permitted and one that is.
- permitted_group = Group.objects.create(name="permitted_group")
- forbidden_group = Group.objects.create(name="forbidden_group")
- view_group = Group.objects.create(name="view_group")
- edit_group = Group.objects.create(name="edit_group")
- # Add the group to the group-user's groups.
- group_user.groups.add(permitted_group)
- view_group_user.groups.add(view_group)
- edit_group_user.groups.add(edit_group)
-
- cls.workingset_everybody_can_edit = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- '''
- A working set owner cannot edit.
- '''
-
- def test_owner_not_allowed_to_edit(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- ReadOnlyTest.workingset_everybody_can_edit.id,
- user=owner)
- self.assertFalse(permitted)
-
- '''
- A user cannot create a new working set.
- '''
-
- def test_user_not_allowed_to_create(self):
- permitted = allowed_to_create()
- self.assertFalse(permitted)
-
- '''
- A super user CANNOT create, edit, revert, or fork a working set.
- '''
-
- def test_super_user_not_allowed_to_edit(self):
- super = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- ReadOnlyTest.workingset_everybody_can_edit.id,
- user=super)
- self.assertFalse(permitted)
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/test_permissions.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/test_permissions.py
deleted file mode 100644
index 21fe313b0..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/test_permissions.py
+++ /dev/null
@@ -1,854 +0,0 @@
-# '''
-# Unit Tests for Permissions
-#
-# For deciding who gets to access what.
-# '''
-#
-# from django.test import TestCase
-# # Test system imports specifically for these tests.
-# from clinicalcode.tests.test_base import *
-# from clinicalcode.tests.unit_test_base import *
-# from clinicalcode.permissions import *
-# # Additional imports to support these tests.
-# from clinicalcode.models.Concept import *
-# # Additional imports to support test database creation.
-# from datetime import datetime
-#
-#
-# class PermissionTest(TestCase):
-#
-# def test_permission_values(self):
-# '''
-# Check that the values to be used in the database are expected and
-# make sure that if they are changed, this test asks that that is
-# correct.
-# !!! This is intentional constants checking.
-# '''
-# self.assertEqual(Permissions.NONE, 1)
-# self.assertEqual(Permissions.VIEW, 2)
-# self.assertEqual(Permissions.EDIT, 3)
-#
-#
-# def allowed_to_view_concept(self, user_name, user_password, concept):
-# user = User.objects.get(username=user_name);
-# login = self.client.login(username=user_name, password=user_password)
-# self.assertTrue(login)
-# permitted = allowed_to_view(user, Concept, concept)
-# return permitted
-#
-#
-# def allowed_to_edit_concept(self, user_name, user_password, concept):
-# user = User.objects.get(username=user_name);
-# login = self.client.login(username=user_name, password=user_password)
-# self.assertTrue(login)
-# permitted = allowed_to_edit(user, Concept, concept)
-# return permitted
-#
-#
-# def test_concept_view_permissions(self):
-# '''
-# Test Concept view permission.
-# - that we must be logged-in
-# - that a superuser can always access a Concept
-# - that we can only access as the owner if we have View/Edit
-# permission
-# - that we can only access as the group-member if we belong to a
-# group with View/Edit permission
-# - that we can only access as the otherwise if everyone has
-# View/Edit permission
-# - that we are allowed to view if we have edit permission
-# '''
-# def test_not_allowed_to_view_when_not_loggedin(self):
-# user = User.objects.get(username=nm_user);
-# self.client.logout()
-# permitted = allowed_to_view(user, Concept,
-# PermissionTest.concept_noone_can_access.id)
-# self.assertFalse(permitted)
-#
-# def test_allowed_to_view_when_everyone_is(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(gp_user, gp_password,
-# PermissionTest.concept_everyone_can_view.id))
-#
-# def test_allowed_to_view_when_in_group(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(gp_user, gp_password,
-# PermissionTest.concept_group_can_view.id))
-#
-# def test_not_allowed_to_view_when_not_in_group(self):
-# self.assertFalse(
-# self.allowed_to_view_concept(nm_user, nm_password,
-# PermissionTest.concept_group_can_view.id))
-# self.assertFalse(
-# self.allowed_to_view_concept(ow_user, ow_password,
-# PermissionTest.concept_group_can_view.id))
-#
-# def test_allowed_to_view_when_owner(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(ow_user, ow_password,
-# PermissionTest.concept_owner_can_view.id))
-#
-# def test_not_allowed_to_view_when_not_owner(self):
-# self.assertFalse(
-# self.allowed_to_view_concept(nm_user, nm_password,
-# PermissionTest.concept_owner_can_view.id))
-# self.assertFalse(
-# self.allowed_to_view_concept(gp_user, gp_password,
-# PermissionTest.concept_owner_can_view.id))
-#
-# def test_allowed_to_view_when_superuser(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_noone_can_access.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_owner_can_view.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_group_can_view.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_owner_and_group_can_view.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_owner_can_view.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_group_can_view.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_group_and_owner_can_view.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_can_view.id))
-#
-#
-# print"test_concept_view_permissions"
-# test_not_allowed_to_view_when_not_loggedin(self)
-# test_allowed_to_view_when_everyone_is(self)
-# test_allowed_to_view_when_superuser(self)
-# test_allowed_to_view_when_in_group(self)
-# test_not_allowed_to_view_when_not_in_group(self)
-# test_allowed_to_view_when_owner(self)
-# test_not_allowed_to_view_when_not_owner(self)
-#
-# def test_concept_view_with_edit_permissions(self):
-# '''
-# Test Concept view access with edit permission.
-# Same tests as for view access with view permission but with
-# concepts that have EDIT rather than VIEW permission.
-# '''
-# def test_allowed_to_view_when_everyone_is(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(gp_user, gp_password,
-# PermissionTest.concept_everyone_can_edit.id))
-#
-# def test_allowed_to_view_when_in_group(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(gp_user, gp_password,
-# PermissionTest.concept_group_can_edit.id))
-#
-# def test_not_allowed_to_view_when_not_in_group(self):
-# self.assertFalse(
-# self.allowed_to_view_concept(nm_user, nm_password,
-# PermissionTest.concept_group_can_edit.id))
-# self.assertFalse(
-# self.allowed_to_view_concept(ow_user, ow_password,
-# PermissionTest.concept_group_can_edit.id))
-#
-# def test_allowed_to_view_when_owner(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(ow_user, ow_password,
-# PermissionTest.concept_owner_can_edit.id))
-#
-# def test_not_allowed_to_view_when_not_owner(self):
-# self.assertFalse(
-# self.allowed_to_view_concept(nm_user, nm_password,
-# PermissionTest.concept_owner_can_edit.id))
-# self.assertFalse(
-# self.allowed_to_view_concept(gp_user, gp_password,
-# PermissionTest.concept_owner_can_edit.id))
-#
-# def test_allowed_to_view_when_superuser(self):
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_owner_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_group_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_owner_and_group_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_owner_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_group_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_group_and_owner_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_view_concept(su_user, su_password,
-# PermissionTest.concept_everyone_can_edit.id))
-#
-#
-# print"test_concept_view_with_edit_permissions"
-# test_allowed_to_view_when_everyone_is(self)
-# test_allowed_to_view_when_superuser(self)
-# test_allowed_to_view_when_in_group(self)
-# test_not_allowed_to_view_when_not_in_group(self)
-# test_allowed_to_view_when_owner(self)
-# test_not_allowed_to_view_when_not_owner(self)
-#
-# def test_concept_edit_permissions(self):
-# '''
-# Test Concept edit permission.
-# Same tests as for view permission except that we are testing that
-# we are allowed to edit with concepts with EDIT permission.
-# Add tests that we are not allowed to edit the VIEW permitted
-# concepts.
-# '''
-# def test_not_allowed_to_edit_when_not_loggedin(self):
-# user = User.objects.get(username=nm_user);
-# self.client.logout()
-# permitted = allowed_to_edit(user, Concept,
-# PermissionTest.concept_noone_can_access.id)
-# self.assertFalse(permitted)
-#
-# def test_allowed_to_edit_when_everyone_is(self):
-# self.assertTrue(
-# self.allowed_to_edit_concept(gp_user, gp_password,
-# PermissionTest.concept_everyone_can_edit.id))
-#
-# def test_not_allowed_to_edit_when_everyone_can_view(self):
-# self.assertFalse(
-# self.allowed_to_edit_concept(gp_user, gp_password,
-# PermissionTest.concept_everyone_can_view.id))
-#
-# def test_allowed_to_edit_when_in_group(self):
-# self.assertTrue(
-# self.allowed_to_edit_concept(gp_user, gp_password,
-# PermissionTest.concept_group_can_edit.id))
-#
-# def test_not_allowed_to_edit_when_in_group_can_view(self):
-# self.assertFalse(
-# self.allowed_to_edit_concept(gp_user, gp_password,
-# PermissionTest.concept_group_can_view.id))
-#
-# def test_not_allowed_to_edit_when_in_view_group(self):
-# self.assertFalse(
-# self.allowed_to_edit_concept(vgp_user, vgp_password,
-# PermissionTest.concept_group_can_edit.id))
-#
-# def test_not_allowed_to_edit_when_not_in_group(self):
-# self.assertFalse(
-# self.allowed_to_edit_concept(nm_user, nm_password,
-# PermissionTest.concept_group_can_edit.id))
-# self.assertFalse(
-# self.allowed_to_edit_concept(ow_user, ow_password,
-# PermissionTest.concept_group_can_edit.id))
-#
-# def test_allowed_to_edit_when_owner(self):
-# self.assertTrue(
-# self.allowed_to_edit_concept(ow_user, ow_password,
-# PermissionTest.concept_owner_can_edit.id))
-#
-# def test_not_allowed_to_edit_when_owner_can_view(self):
-# self.assertFalse(
-# self.allowed_to_edit_concept(ow_user, ow_password,
-# PermissionTest.concept_owner_can_view.id))
-#
-# def test_not_allowed_to_edit_when_not_owner(self):
-# self.assertFalse(
-# self.allowed_to_edit_concept(nm_user, nm_password,
-# PermissionTest.concept_owner_can_edit.id))
-# self.assertFalse(
-# self.allowed_to_edit_concept(gp_user, gp_password,
-# PermissionTest.concept_owner_can_edit.id))
-#
-# def test_allowed_to_edit_when_superuser(self):
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_noone_can_access.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_owner_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_group_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_owner_and_group_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_owner_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_group_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_everyone_and_group_and_owner_can_edit.id))
-# self.assertTrue(
-# self.allowed_to_edit_concept(su_user, su_password,
-# PermissionTest.concept_everyone_can_edit.id))
-#
-#
-# print"test_concept_edit_permissions"
-# test_not_allowed_to_edit_when_not_loggedin(self)
-# test_allowed_to_edit_when_everyone_is(self)
-# test_allowed_to_edit_when_in_group(self)
-# test_not_allowed_to_edit_when_not_in_group(self)
-# test_allowed_to_edit_when_owner(self)
-# test_not_allowed_to_edit_when_owner_can_view(self)
-# test_not_allowed_to_edit_when_not_owner(self)
-# test_allowed_to_edit_when_superuser(self)
-# test_not_allowed_to_edit_when_everyone_can_view(self)
-# test_not_allowed_to_edit_when_in_group_can_view(self)
-#
-# def test_not_allowed_to_edit_when_not_loggedin(self):
-# user = User.objects.get(username=nm_user);
-# self.client.logout()
-# response = self.client.get('/')
-# permitted = allowed_to_edit(user, Concept,
-# PermissionTest.concept_noone_can_access.id)
-# self.assertFalse(permitted)
-#
-#
-# def test_not_allowed_to_edit_when_normaluser(self):
-# user = User.objects.get(username=nm_user);
-# login = self.client.login(username=nm_user, password=nm_password)
-# self.assertTrue(login)
-# response = self.client.get('/')
-# permitted = allowed_to_edit(user, Concept,
-# PermissionTest.concept_noone_can_access.id)
-# self.client.logout()
-# self.assertFalse(permitted)
-#
-#
-# def test_allowed_to_edit_when_superuser(self):
-# user = User.objects.get(username=su_user);
-# login = self.client.login(username=su_user, password=su_password)
-# self.assertTrue(login)
-# response = self.client.get('/')
-# permitted = allowed_to_edit(user, Concept,
-# PermissionTest.concept_noone_can_access.id)
-# self.client.logout()
-# self.assertTrue(permitted)
-#
-# """
-# def test_not_allowed_to_edit_when_normaluser(self):
-# user = User.objects.get(username=nm_user);
-# login = self.client.login(username=nm_user, password=nm_password)
-# self.assertTrue(login)
-# response = self.client.get('/')
-# permitted = allowed_to_edit(user, Concept,
-# PermissionTest.concept_noone_can_access.id)
-# self.client.logout()
-# self.assertFalse(permitted)
-# """
-#
-# """
-# base_url = 'http://localhost:8000'
-# login_url = base_url + '/account/login?next=/'
-# su_user = 'pete'
-# su_password = 'geiriauwedieillyncu'
-# user = 'pete.arnold'
-# password = 'llyncugeiriau'
-# test_urls = ['/concepts', '/workingset',
-# '/concepts/200/detail', '/concepts/200/update']
-# test_api_urls = ['/api']
-#
-# @wait
-# def wait_to_be_redirected_to_signin(self):
-# print "Waiting for redirection ... ", self.login_url
-# signinbar = self.browser.find_element_by_css_selector('div.panel-title')
-# print signinbar.text
-# self.assertIn('Sign In', signinbar.text)
-#
-#
-# @wait
-# def wait_to_be_redirected_to_api_noauth(self):
-# print "Waiting for redirection to unauthorised API page ... "
-# noauth_json = self.browser.find_elements_by_css_selector('.str')
-# self.assertEqual(len(noauth_json), 2)
-# print noauth_json.text[1]
-# self.assertIn('"Authentication credentials were not provided."', noauth_json.text[1])
-#
-#
-# @wait
-# def wait_to_be_logged_in(self, username):
-# print "Waiting for login ... ", self.login_url
-# navbar = self.browser.find_element_by_css_selector('p.navbar-text')
-# print navbar.text
-# self.assertIn(username, navbar.text)
-#
-#
-# def log_inout(self, username, password):
-# self.wait_to_be_redirected_to_signin()
-#
-# self.browser.find_element_by_name('username').send_keys(username)
-# self.browser.find_element_by_name('password').send_keys(password)
-# self.browser.find_element_by_name('password').send_keys(Keys.ENTER)
-#
-# self.wait_to_be_logged_in(username)
-#
-# self.browser.find_element_by_class_name('navbar-link').click()
-#
-# self.wait_to_be_redirected_to_signin()
-#
-#
-# def can_log_inout_superuser(self):
-# print "Permissions:unit-tests:test_can_log_inout_superuser."
-# print "Logging in as ", self.su_user , ", ", self.su_password, " to ", self.login_url
-# self.browser.get(self.login_url)
-# self.log_inout(self.su_user, self.su_password)
-#
-#
-# def can_log_inout_normaluser(self):
-# print "Permissions:unit-tests:test_can_log_inout_normaluser."
-# print "Logging in as ", self.user , ", ", self.password, " to ", self.login_url
-# self.browser.get(self.login_url)
-# self.log_inout(self.user, self.password)
-#
-#
-# def no_access_when_not_logged_in(self, urls):
-# print "Permissions:unit-tests:no_access_when_not_logged_in."
-# for url in urls:
-# print "Checking ", self.base_url + url
-# self.browser.get(self.base_url + url)
-# self.wait_to_be_redirected_to_signin()
-#
-# def no_access_to_api_when_not_logged_in(self, apiurls):
-# print "Permissions:unit-tests:no_access_to_api_when_not_logged_in."
-# for apiurl in apiurls:
-# print "Checking ", self.base_url + apiurl
-# self.browser.get(self.base_url + apiurl)
-# self.wait_to_be_redirected_to_api_noauth()
-#
-#
-# def test_loginout(self):
-# '''
-# Test the ability to log in and out.
-# (1) Check that a super-user can log-in and out.
-# (2) Check that a normal-user can log-in and out.
-# (n) Check that access to a page produces the sign-in page if logged
-# out.
-# '''
-# self.can_log_inout_superuser()
-# self.can_log_inout_normaluser()
-# self.no_access_when_not_logged_in(self.test_urls)
-# self.no_access_to_api_when_not_logged_in(self.test_api_urls)
-#
-# '''
-# (1) parameters: user, set-class, set-id.
-# variables: user is SU; user is in a group
-# Check that a non-user, ordinary user and admin user work
-# Check that concepts and working-sets work
-# check with a concept/working-set with all types of permission is/is not visible and/or editable
-# Check that good set-ids and bad set-ids work
-# '''
-# # There's a concept 'Can_be_viewed_by_everyone'.
-# # There's a user 'Not_authenticated'.
-# # The user cannot view the concept.
-# #self.fail('test_allowed_to_view failed!')
-# """
-#
-# def setUp(self):
-# # Set-up access to the test database.
-# pass
-#
-#
-# @classmethod
-# def setUpTestData(cls):
-# '''
-# !!! Move this to test_base.
-# Create all the users, concepts, components, code lists, code
-# regexes and codes to use within the test database.
-# '''
-# print "Permission Unit Tests"
-# # Users: a normal user and a super_user.
-# super_user = User.objects.create_superuser(username=su_user, password=su_password, email=None)
-# normal_user = User.objects.create_user(username=nm_user, password=nm_password, email=None)
-# owner_user = User.objects.create_user(username=ow_user, password=ow_password, email=None)
-# group_user = User.objects.create_user(username=gp_user, password=gp_password, email=None)
-# view_group_user = User.objects.create_user(username=vgp_user, password=vgp_password, email=None)
-# edit_group_user = User.objects.create_user(username=egp_user, password=egp_password, email=None)
-#
-# # Groups: a group that is not permitted and one that is.
-# permitted_group = Group.objects.create(name="permitted_group")
-# forbidden_group = Group.objects.create(name="forbidden_group")
-# view_group = Group.objects.create(name="view_group")
-# edit_group = Group.objects.create(name="edit_group")
-# # Add the group to the group-user's groups.
-# group_user.groups.add(permitted_group)
-# view_group_user.groups.add(view_group)
-# edit_group_user.groups.add(edit_group)
-#
-# coding_system = CodingSystem.objects.create(
-# name="Lookup table",
-# description="Lookup Codes for testing purposes",
-# link=Google_website,
-# database_connection_name="default",
-# table_name="clinicalcode_lookup",
-# code_column_name="code",
-# desc_column_name="description")
-# coding_system.save()
-#
-# # Concepts with various view characteristics.
-# '''
-# Owner Group Everyone
-# No No No noone
-# Yes No No owner
-# No Yes No group
-# Yes Yes No owner+group
-# No No Yes everyone
-# Yes No Yes owner+everyone
-# No Yes Yes group+everyone
-# Yes Yes Yes owner+group+everyone
-# '''
-# cls.concept_noone_can_access = Concept.objects.create(
-# name="concept_noone_can_access",
-# description="concept_noone_can_access",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# group_access=Permissions.NONE,
-# owner_access=Permissions.NONE,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_owner_can_view = Concept.objects.create(
-# name="concept_owner_can_view",
-# description="concept_owner_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.VIEW,
-# group_access=Permissions.NONE,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_group_can_view = Concept.objects.create(
-# name="concept_group_can_view",
-# description="concept_group_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.NONE,
-# group_access=Permissions.VIEW,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_owner_and_group_can_view = Concept.objects.create(
-# name="concept_owner_and_group_can_view",
-# description="concept_owner_and_group_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.VIEW,
-# group_access=Permissions.VIEW,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_everyone_can_view = Concept.objects.create(
-# name="concept_everyone_can_view",
-# description="concept_everyone_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.NONE,
-# group_access=Permissions.NONE,
-# world_access=Permissions.VIEW
-# )
-#
-# cls.concept_everyone_and_owner_can_view = Concept.objects.create(
-# name="concept_everyone_and_owner_can_view",
-# description="concept_everyone_and_owner_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.VIEW,
-# group_access=Permissions.NONE,
-# world_access=Permissions.VIEW
-# )
-#
-# cls.concept_everyone_and_group_can_view = Concept.objects.create(
-# name="concept_everyone_and_group_can_view",
-# description="concept_everyone_and_group_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.NONE,
-# group_access=Permissions.VIEW,
-# world_access=Permissions.VIEW
-# )
-#
-# cls.concept_everyone_and_group_and_owner_can_view = Concept.objects.create(
-# name="concept_everyone_and_group_and_owner_can_view",
-# description="concept_everyone_and_group_and_owner_can_view",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.VIEW,
-# group_access=Permissions.VIEW,
-# world_access=Permissions.VIEW
-# )
-#
-# cls.concept_owner_can_edit = Concept.objects.create(
-# name="concept_owner_can_edit",
-# description="concept_owner_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.EDIT,
-# group_access=Permissions.NONE,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_group_can_edit = Concept.objects.create(
-# name="concept_group_can_edit",
-# description="concept_group_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.NONE,
-# group_access=Permissions.EDIT,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_owner_and_group_can_edit = Concept.objects.create(
-# name="concept_owner_and_group_can_edit",
-# description="concept_owner_and_group_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.EDIT,
-# group_access=Permissions.EDIT,
-# world_access=Permissions.NONE
-# )
-#
-# cls.concept_everyone_can_edit = Concept.objects.create(
-# name="concept_everyone_can_edit",
-# description="concept_everyone_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.NONE,
-# group_access=Permissions.NONE,
-# world_access=Permissions.EDIT
-# )
-#
-# cls.concept_everyone_and_owner_can_edit = Concept.objects.create(
-# name="concept_everyone_and_owner_can_edit",
-# description="concept_everyone_and_owner_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.EDIT,
-# group_access=Permissions.NONE,
-# world_access=Permissions.EDIT
-# )
-#
-# cls.concept_everyone_and_group_can_edit = Concept.objects.create(
-# name="concept_everyone_and_group_can_edit",
-# description="concept_everyone_and_group_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.NONE,
-# group_access=Permissions.EDIT,
-# world_access=Permissions.EDIT
-# )
-#
-# cls.concept_everyone_and_group_and_owner_can_edit = Concept.objects.create(
-# name="concept_everyone_and_group_and_owner_can_edit",
-# description="concept_everyone_and_group_and_owner_can_edit",
-# author="the_test_goat",
-# entry_date=datetime.now(),
-# validation_performed=True,
-# validation_description="",
-# publication_doi="",
-# publication_link=Google_website,
-# paper_published=False,
-# source_reference="",
-# citation_requirements="",
-# created_by=super_user,
-# modified_by=super_user,
-# coding_system=coding_system,
-# is_deleted=False,
-# owner=owner_user,
-# group=permitted_group,
-# owner_access=Permissions.EDIT,
-# group_access=Permissions.EDIT,
-# world_access=Permissions.EDIT
-# )
-#
diff --git a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/test_permissions_and_visible_fetch_code.py b/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/test_permissions_and_visible_fetch_code.py
deleted file mode 100644
index 7601ea57e..000000000
--- a/CodeListLibrary_project/clinicalcode/tests/legacy/unit_tests/test_permissions_and_visible_fetch_code.py
+++ /dev/null
@@ -1,1529 +0,0 @@
-from datetime import datetime
-
-from clinicalcode.models.Code import Code
-from clinicalcode.models.CodeList import CodeList
-from clinicalcode.models.Component import Component
-from clinicalcode.models.Concept import *
-from clinicalcode.models.WorkingSet import *
-from clinicalcode.permissions import *
-from clinicalcode.tests.test_base import *
-from clinicalcode.tests.unit_test_base import *
-from django.test import TestCase
-
-
-class PermissionTest(TestCase):
-
- @classmethod
- def setUpClass(cls):
- super(PermissionTest, cls).setUpClass()
- super_user = User.objects.create_superuser(username=su_user,
- password=su_password,
- email=None)
- normal_user = User.objects.create_user(username=nm_user,
- password=nm_password,
- email=None)
- owner_user = User.objects.create_user(username=ow_user,
- password=ow_password,
- email=None)
- group_user = User.objects.create_user(username=gp_user,
- password=gp_password,
- email=None)
-
- permitted_group = Group.objects.create(name="permitted_group")
- group_user.groups.add(permitted_group)
-
- coding_system = CodingSystem.objects.create(
- name="Lookup table",
- description="Lookup Codes for testing purposes",
- link=Google_website,
- database_connection_name="default",
- table_name="clinicalcode_lookup",
- code_column_name="code",
- desc_column_name="description")
- coding_system.save()
-
- cls.concept_none_can_access = Concept.objects.create(
- name="concept_noone_can_access",
- description="concept_noone_can_access",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- cls.concept_owner_can_view = Concept.objects.create(
- name="concept_owner_can_edit",
- description="concept_owner_can_edit",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- owner_access=Permissions.VIEW,
- group_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- cls.concept_owner_can_edit = Concept.objects.create(
- name="concept_owner_can_edit",
- description="concept_owner_can_edit",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- owner_access=Permissions.EDIT,
- group_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- cls.concept_everyone_can_view = Concept.objects.create(
- name="concept_everyone_can_view",
- description="concept_view_everyone",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- owner_access=Permissions.NONE,
- group_access=Permissions.NONE,
- world_access=Permissions.VIEW)
-
- cls.concept_everyone_can_edit = Concept.objects.create(
- name="concept_everyone_can_edit",
- description="concept_everyone_can_edit",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- owner_access=Permissions.NONE,
- group_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- cls.concept_group_can_view = Concept.objects.create(
- name="concept_group_can_view",
- description="concept_group_can_view",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- owner_access=Permissions.NONE,
- group_access=Permissions.VIEW,
- world_access=Permissions.NONE)
-
- cls.concept_group_can_edit = Concept.objects.create(
- name="concept_group_can_view",
- description="concept_group_can_view",
- author="the_test_goat",
- entry_date=datetime.now(),
- validation_performed=True,
- validation_description="",
- publication_doi="",
- publication_link=Google_website,
- paper_published=False,
- source_reference="",
- citation_requirements="",
- created_by=super_user,
- modified_by=super_user,
- coding_system=coding_system,
- is_deleted=False,
- owner=owner_user,
- group=permitted_group,
- owner_access=Permissions.NONE,
- group_access=Permissions.EDIT,
- world_access=Permissions.NONE)
-
- cls.workingset_none_can_access = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- cls.workingset_everyone_can_edit = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.EDIT)
-
- cls.workingset_everyone_can_view = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.NONE,
- world_access=Permissions.VIEW)
-
- cls.workingset_owner_can_view = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.VIEW,
- world_access=Permissions.NONE)
-
- cls.workingset_owner_can_edit = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.NONE,
- owner_access=Permissions.EDIT,
- world_access=Permissions.NONE)
-
- cls.workingset_group_can_view = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.VIEW,
- owner_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- cls.workingset_group_can_edit = WorkingSet.objects.create(
- name="workingset_noone_can_access",
- description="workingset_noone_can_access",
- author="the_test_goat",
- publication_doi="",
- publication_link=Google_website,
- source_reference="",
- citation_requirements="",
- concept_informations=[{"concept1": "id"}],
- created_by=super_user,
- updated_by=super_user,
- owner=owner_user,
- group=permitted_group,
- group_access=Permissions.EDIT,
- owner_access=Permissions.NONE,
- world_access=Permissions.NONE)
-
- cls.component_for_none = Component.objects.create(
- comment="Component visibility test",
- component_type=2,
- concept=cls.concept_none_can_access,
- created_by=owner_user,
- logical_type=2,
- name="Component")
-
- cls.code_list_for_none = CodeList.objects.create(
- component=cls.component_for_none,
- description="Code list visibility test")
- cls.code_for_none = Code.objects.create(
- code_list=cls.code_list_for_none,
- code="45554",
- description="visibility test")
-
- cls.component_for_everybody = Component.objects.create(
- comment="Component visibility test",
- component_type=2,
- concept=cls.concept_everyone_can_view,
- created_by=owner_user,
- logical_type=2,
- name="Component")
-
- cls.code_list_for_everybody = CodeList.objects.create(
- component=cls.component_for_everybody,
- description="Code list visibility test")
- cls.code_for_everybody = Code.objects.create(
- code_list=cls.code_list_for_everybody,
- code="24212",
- description="visibility test")
-
- cls.component_for_group = Component.objects.create(
- comment="Component visibility test",
- component_type=2,
- concept=cls.concept_group_can_view,
- created_by=owner_user,
- logical_type=2,
- name="Component")
-
- cls.code_list_for_group = CodeList.objects.create(
- component=cls.component_for_group,
- description="Code list visibility test")
- cls.code_for_group = Code.objects.create(
- code_list=cls.code_list_for_group,
- code="24212",
- description="visibility test")
-
- @classmethod
- def tearDownClass(cls):
- super(PermissionTest, cls).tearDownClass()
-
- '''
- Verify that a user with edit rights
- who is not an owner cannot change the permissions.
- '''
-
- def test_normal_user_not_allowed_to_permit_con(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_permit(
- user, Concept, PermissionTest.concept_everyone_can_edit.id)
- self.assertFalse(permitted)
-
- def test_group_user_not_allowed_to_permit_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_permit(
- group, Concept, PermissionTest.concept_everyone_can_edit.id)
- self.assertFalse(permitted)
-
- '''
- Verify that a user can transfer ownership to a different user
- '''
-
- def test_owner_allowed_to_permit_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_permit(owner, Concept,
- PermissionTest.concept_owner_can_edit.id)
- self.assertTrue(permitted)
-
- '''
- Verify that when a new concept is created and no changes are made to the permissions,
- only the owner can view and edit the concept.
- '''
-
- def test_owner_allowed_to_view_new_concept_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_new_concept_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_normal_user_not_allowed_to_view_new_concept_con(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_normal_user_not_allowed_to_edit_new_concept_con(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_group_user_not_allowed_to_view_new_concept_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=group)
- self.assertFalse(permitted)
-
- def test_group_user_not_allowed_to_edit_new_concept_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=group)
- self.assertFalse(permitted)
-
- '''
- Verify that if everyone is set to "view",
- a different user can view the concept but not edit it.
- '''
-
- def test_normal_user_allowed_to_view_when_everybody_set_to_view_con(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=user)
- self.assertTrue(permitted)
-
- def test_normal_user_not_allowed_to_edit_when_everybody_set_to_view_con(
- self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_group_user_allowed_to_view_when_everybody_set_to_view_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_user_not_allowed_to_edit_when_everybody_set_to_view_con(
- self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=group)
- self.assertFalse(permitted)
-
- def test_owner_allowed_to_view_when_everybody_set_to_view_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_when_everybody_set_to_view_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=owner)
- self.assertTrue(permitted)
-
- '''
- Verify that if everyone is set to "edit"
- a different user can view and edit the concept.
- '''
-
- def test_normal_user_allowed_to_edit_when_everybody_set_to_edit_con(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=user)
- self.assertTrue(permitted)
-
- def test_normal_user_allowed_to_view_when_everybody_set_to_edit_con(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=user)
- self.assertTrue(permitted)
-
- def test_group_user_allowed_to_edit_when_everybody_set_to_edit_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_user_allowed_to_view_when_everybody_set_to_edit_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_when_everybody_set_to_edit_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_view_when_everybody_set_to_edit_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- '''
- Verify that if group is set to "view",
- a different group member can view the concept but not edit it.
- '''
-
- def test_group_allowed_to_view_when_group_set_to_view_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_group_can_view.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_not_allowed_to_edit_when_group_set_to_view_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_group_can_view.id,
- user=group)
- self.assertFalse(permitted)
-
- '''
- Verify that if group is set to "edit"
- a different group member can view and edit the concept.
- '''
-
- def test_group_allowed_to_view_when_group_set_to_edit_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_allowed_to_edit_when_group_set_to_edit_con(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- '''
- Verify that if group is set to "edit" and everyone "none",
- a non-group member cannot view or edit.
- '''
-
- def test_normal_user_not_allowed_to_view_when_only_group_set_to_edit_con(
- self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_normal_user_not_allowed_to_edit_when_only_group_set_to_edit_con(
- self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_owner_allowed_to_view_when_only_group_set_to_edit_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_when_only_group_set_to_edit_con(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- '''
- Verify that a super user can do everything,
- regardless of permission settings.
- '''
-
- def test_super_user_allowed_to_permit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_permit(super_user, Concept,
- PermissionTest.concept_owner_can_edit.id)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_everybody_set_to_view_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_everybody_set_to_view_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_everybody_set_to_edit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_everybody_set_to_edit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- Concept,
- PermissionTest.concept_everyone_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_owner_set_to_view_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_owner_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_owner_set_to_view_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_owner_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_owner_set_to_edit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_owner_set_to_edit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_owner_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_group_set_to_view_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_group_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_group_set_to_view_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_group_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_group_set_to_edit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_group_set_to_edit_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_group_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_none_has_access_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(None,
- Concept,
- PermissionTest.concept_none_can_access.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_none_has_access_con(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(None,
- Concept,
- PermissionTest.concept_none_can_access.id,
- user=super_user)
- self.assertTrue(permitted)
-
- '''
- -------------------------WORKINGSET TESTS--------------------------
- '''
- '''
- Verify that a user with edit rights
- who is not an owner cannot change the permissions.
- '''
-
- def test_normal_user_not_allowed_to_permit_ws(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_permit(
- user, WorkingSet, PermissionTest.workingset_everyone_can_edit.id)
- self.assertFalse(permitted)
-
- def test_group_user_not_allowed_to_permit_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_permit(
- group, WorkingSet, PermissionTest.workingset_everyone_can_edit.id)
- self.assertFalse(permitted)
-
- '''
- Verify that a user can transfer ownership to a different user
- '''
-
- def test_owner_allowed_to_permit_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_permit(
- owner, WorkingSet, PermissionTest.workingset_owner_can_edit.id)
- self.assertTrue(permitted)
-
- '''
- Verify that when a new workingset is created and no changes are made to the permissions,
- only the owner can view and edit the working set.
- '''
-
- def test_owner_allowed_to_view_new_workingset(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_new_workingset(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_normal_user_not_allowed_to_view_new_workingset(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_normal_user_not_allowed_to_edit_new_workingset(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_group_user_not_allowed_to_view_new_workingset(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=group)
- self.assertFalse(permitted)
-
- def test_group_user_not_allowed_to_edit_new_workingset(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=group)
- self.assertFalse(permitted)
-
- '''
- Verify that if everyone is set to "view",
- a different user can view the working set but not edit it.
- '''
-
- def test_normal_user_allowed_to_view_when_everybody_set_to_view_ws(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=user)
- self.assertTrue(permitted)
-
- def test_normal_user_not_allowed_to_edit_when_everybody_set_to_view_ws(
- self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_group_user_allowed_to_view_when_everybody_set_to_view_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_user_not_allowed_to_edit_when_everybody_set_to_view_ws(
- self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=group)
- self.assertFalse(permitted)
-
- def test_owner_allowed_to_view_when_everybody_set_to_view_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_when_everybody_set_to_view_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=owner)
- self.assertTrue(permitted)
-
- '''
- Verify that if everyone is set to "edit"
- a different user can view and edit the working set.
- '''
-
- def test_normal_user_allowed_to_edit_when_everybody_set_to_edit_ws(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=user)
- self.assertTrue(permitted)
-
- def test_normal_user_allowed_to_view_when_everybody_set_to_edit_ws(self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=user)
- self.assertTrue(permitted)
-
- def test_group_user_allowed_to_edit_when_everybody_set_to_edit_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_user_allowed_to_view_when_everybody_set_to_edit_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_when_everybody_set_to_edit_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_view_when_everybody_set_to_edit_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- '''
- Verify that if group is set to "view",
- a different group member can view the working set but not edit it.
- '''
-
- def test_group_allowed_to_view_when_group_set_to_view_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_view.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_not_allowed_to_edit_when_group_set_to_view_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_view.id,
- user=group)
- self.assertFalse(permitted)
-
- '''
- Verify that if group is set to "edit"
- a different group member can view and edit the working set.
- '''
-
- def test_group_allowed_to_view_when_group_set_to_edit_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- def test_group_allowed_to_edit_when_group_set_to_edit_ws(self):
- group = User.objects.get(username=gp_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=group)
- self.assertTrue(permitted)
-
- '''
- Verify that if group is set to "edit" and everyone "none",
- a non-group member cannot view or edit.
- '''
-
- def test_normal_user_not_allowed_to_view_when_only_group_set_to_edit_ws(
- self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_normal_user_not_allowed_to_edit_when_only_group_set_to_edit_ws(
- self):
- user = User.objects.get(username=nm_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=user)
- self.assertFalse(permitted)
-
- def test_owner_allowed_to_view_when_only_group_set_to_edit_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- def test_owner_allowed_to_edit_when_only_group_set_to_edit_ws(self):
- owner = User.objects.get(username=ow_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=owner)
- self.assertTrue(permitted)
-
- '''
- Verify that a super user can do everything,
- regardless of permission settings.
- '''
-
- def test_super_user_allowed_to_permit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_permit(
- super_user, WorkingSet,
- PermissionTest.workingset_owner_can_edit.id)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_everybody_set_to_view_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_everybody_set_to_view_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_everybody_set_to_edit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_everybody_set_to_edit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_everyone_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_owner_set_to_view_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_owner_set_to_view_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_owner_set_to_edit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_owner_set_to_edit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_owner_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_group_set_to_view_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_group_set_to_view_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_view.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_group_set_to_edit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_group_set_to_edit_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_group_can_edit.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_view_when_none_has_access_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_view(
- None,
- WorkingSet,
- PermissionTest.workingset_none_can_access.id,
- user=super_user)
- self.assertTrue(permitted)
-
- def test_superuser_allowed_to_edit_when_none_has_access_ws(self):
- super_user = User.objects.get(username=su_user)
- permitted = allowed_to_edit(
- None,
- WorkingSet,
- PermissionTest.workingset_none_can_access.id,
- user=super_user)
- self.assertTrue(permitted)
-
- '''
- ------------Test visible data fetch code----------------------
- '''
- '''
- test visible code list
- '''
-
- def test_nornal_user_user_visible_code_list_for_none(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_codelists(normal_user, self.code_list_for_none.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_nornal_user_user_visible_code_list_for_group(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_codelists(normal_user, self.code_list_for_group.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_normal_user_user_visible_code_list_for_everybody(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_codelists(normal_user,
- self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_group_user_visible_code_list_for_none(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_codelists(group_user, self.code_list_for_none.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_group_user_visible_code_list_for_group(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_codelists(group_user, self.code_list_for_group.id)
-
- self.assertTrue(query.count() == 1)
-
- def test_group_user_visible_code_list_for_everybody(self):
- group_user = User.objects.get(username=nm_user)
- query = get_visible_codelists(group_user,
- self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_code_list_for_none(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_codelists(owner, self.code_list_for_none.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_code_list_for_group(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_codelists(owner, self.code_list_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_code_list_for_everybody(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_codelists(owner, self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_code_list_for_none(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_codelists(super_user, self.code_list_for_none.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_code_list_for_group(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_codelists(super_user, self.code_list_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_code_list_for_everybody(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_codelists(super_user,
- self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- '''
- visible codes
- '''
-
- def test_normal_user_visible_codes_for_none(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_codes(normal_user, self.code_list_for_none.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_normal_user_visible_codes_for_group(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_codes(normal_user, self.code_list_for_group.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_normal_user_visible_codes_for_everybody(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_codes(normal_user, self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_group_user_visible_codes_for_none(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_codes(group_user, self.code_list_for_none.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_group_user_visible_codes_for_group(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_codes(group_user, self.code_list_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_group_user_visible_codes_for_everybody(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_codes(group_user, self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_codes_for_none(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_codes(owner, self.code_list_for_none.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_codes_for_group(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_codes(owner, self.code_list_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_codes_for_everybody(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_codes(owner, self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_codes_for_none(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_codes(super_user, self.code_list_for_none.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_codes_for_group(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_codes(super_user, self.code_list_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_codes_for_everybody(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_codes(super_user, self.code_list_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- '''
- visible components
- '''
-
- def test_normal_user_visible_components_for_none(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_components(normal_user, self.component_for_none.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_normal_user_visible_components_for_group(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_components(normal_user,
- self.component_for_group.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_normal_user_visible_components_for_everybody(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_components(normal_user,
- self.component_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_group_user_visible_components_for_none(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_components(group_user, self.component_for_none.id)
-
- self.assertTrue(query.count() == 0)
-
- def test_group_user_visible_components_for_group(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_components(group_user, self.component_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_group_user_visible_components_for_everybody(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_components(group_user,
- self.component_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_components_for_none(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_components(owner, self.component_for_none.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_components_for_group(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_components(owner, self.component_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_owner_visible_componentss_for_everybody(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_components(owner, self.component_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_components_for_none(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_components(super_user, self.component_for_none.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_components_for_group(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_components(super_user, self.component_for_group.id)
-
- self.assertTrue(query.count() > 0)
-
- def test_superuser_visible_components_for_everybody(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_components(super_user,
- self.component_for_everybody.id)
-
- self.assertTrue(query.count() > 0)
-
- '''
- visible concepts
- '''
-
- def test_normal_user_visible_concepts(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_concepts_live(normal_user)
-
- # Query should contain two concepts only (concept everybody can view and concept everybody can edit)
- self.assertTrue(query.count() == 2)
- self.assertTrue(
- (self.concept_everyone_can_view and self.concept_everyone_can_edit
- ) in query.all())
-
- def test_group_user_visible_concepts(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_concepts_live(group_user)
-
- # Query should contain four concepts only (concept everybody can view and concept everybody can edit...
- # concept group can view and concept group can edit
- self.assertTrue(query.count() == 4)
- self.assertTrue(
- (self.concept_everyone_can_view and self.concept_everyone_can_edit
- and self.concept_group_can_edit and self.concept_group_can_view
- ) in query.all())
-
- def test_owner_visible_concepts(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_concepts_live(owner)
-
- # Owner can see all of the concepts
- self.assertTrue(query.count() == 7)
-
- def test_superuser_visible_concepts(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_concepts_live(super_user)
-
- # super user can see all of the concepts
- self.assertTrue(query.count() == 7)
-
- '''
- visible workingset
- '''
-
- def test_normal_user_visible_workingsets(self):
- normal_user = User.objects.get(username=nm_user)
- query = get_visible_workingsets(normal_user)
-
- # Query should contain two concepts only (concept everybody can view and concept everybody can edit)
- self.assertTrue(query.count() == 2)
- self.assertTrue((self.workingset_everyone_can_view
- and self.workingset_everyone_can_edit) in query.all())
-
- def test_group_user_visible_workingsets(self):
- group_user = User.objects.get(username=gp_user)
- query = get_visible_workingsets(group_user)
-
- # Query should contain four concepts only (concept everybody can view and concept everybody can edit...
- # concept group can view and concept group can edit
- self.assertTrue(query.count() == 4)
- self.assertTrue(
- (self.workingset_everyone_can_view and self.
- workingset_everyone_can_edit and self.workingset_group_can_view
- and self.workingset_group_can_edit) in query.all())
-
- def test_owner_visible_workingsets(self):
- owner = User.objects.get(username=ow_user)
- query = get_visible_workingsets(owner)
-
- # Owner can see all of the concepts
- self.assertTrue(query.count() == 7)
-
- def test_superuser_visible_workingsets(self):
- super_user = User.objects.get(username=su_user)
- query = get_visible_workingsets(super_user)
-
- # super user can see all of the concepts
- self.assertTrue(query.count() == 7)
diff --git a/CodeListLibrary_project/clinicalcode/views/GenericEntity.py b/CodeListLibrary_project/clinicalcode/views/GenericEntity.py
index feb9c04ab..f939de1ac 100644
--- a/CodeListLibrary_project/clinicalcode/views/GenericEntity.py
+++ b/CodeListLibrary_project/clinicalcode/views/GenericEntity.py
@@ -4,8 +4,9 @@
---------------------------------------------------------------------------
"""
from django.urls import reverse
-from django.http import HttpResponseNotFound, HttpResponseBadRequest
+from django.http import HttpResponseBadRequest
from collections import OrderedDict
+from collections.abc import Iterable
from django.contrib import messages
from django.shortcuts import render, redirect
from rest_framework.views import APIView
@@ -606,7 +607,7 @@ def generic_entity_detail(request, pk, history_id=None):
# find latest accessible entity for given pk if historical id not specified
history_id = gen_utils.parse_int(history_id, default=None)
if not isinstance(history_id, int):
- entities = permission_utils.get_accessible_entities(request, pk=pk)
+ entities = permission_utils.get_accessible_entities(request, pk=pk, deletion_query=constants.DELETION_QUERY.ANY)
if not entities.exists():
return View.notify_err(
@@ -735,7 +736,7 @@ def export_entity_codes_to_csv(request, pk, history_id=None):
# get the latest version/ or latest published version
if not isinstance(history_id, int):
- entities = permission_utils.get_accessible_entities(request, pk=pk)
+ entities = permission_utils.get_accessible_entities(request, pk=pk, deletion_query=constants.DELETION_QUERY.ANY)
if not entities.exists():
return View.notify_err(
@@ -748,32 +749,31 @@ def export_entity_codes_to_csv(request, pk, history_id=None):
history_id = entities.first().history_id
# validate access for login and public site
- permission_utils.validate_access_to_view(request, pk, history_id)
-
- is_published = permission_utils.check_if_published(GenericEntity, pk, history_id)
-
- # ----------------------------------------------------------------------
-
- # exclude(is_deleted=True)
- if GenericEntity.objects.filter(id=pk).count() == 0:
- return HttpResponseNotFound("Not found.")
- # raise permission_denied # although 404 is more relevant
-
- # exclude(is_deleted=True)
- if GenericEntity.history.filter(id=pk, history_id=history_id).count() == 0:
- return HttpResponseNotFound("Not found.")
- # raise permission_denied # although 404 is more relevant
+ accessibility, err = permission_utils.get_accessible_detail_entity(request, pk, history_id)
+ if err is not None:
+ return View.notify_err(
+ request,
+ title=err.get('title'),
+ status_code=err.get('status_code'),
+ details=[err.get('message')]
+ )
+ elif not accessibility or not accessibility.get('view_access'):
+ return View.notify_err(
+ request,
+ title='Forbidden - Permission Denied',
+ status_code=403,
+ details=[f'Sorry but it looks like this {pk} hasn\'t been made accessible to you yet. Please contact the author of this {pk} to grant you access.']
+ )
- # here, check live version
+ # check live version
current_ph = GenericEntity.objects.get(pk=pk)
-
- # if not is_published:
- # children_permitted_and_not_deleted, error_dict = db_utils.chk_children_permission_and_deletion(request, GenericEntity, pk, set_history_id=history_id)
- # if not children_permitted_and_not_deleted:
- # raise PermissionDenied
-
if current_ph.is_deleted == True:
- raise PermissionDenied
+ return View.notify_err(
+ request,
+ title=f'Page Not Found - Missing {pk}',
+ status_code=403,
+ details=[f'Sorry but it looks like this {pk} has been archived by its creator and is no longer available.']
+ )
current_ph_version = GenericEntity.history.get(id=pk, history_id=history_id)
@@ -794,12 +794,12 @@ def export_entity_codes_to_csv(request, pk, history_id=None):
'code', 'description', 'coding_system',
'concept_id', 'concept_version_id', 'concept_name',
'phenotype_id', 'phenotype_version_id', 'phenotype_name'
- ])
+ ])
# if the phenotype contains only one concept, write titles in the loop below
final_titles = final_titles + ["code_attributes"]
writer.writerow(final_titles)
-
+
for concept in concept_ids_historyIDs:
concept_id = concept[0]
concept_version_id = concept[1]
@@ -816,25 +816,36 @@ def export_entity_codes_to_csv(request, pk, history_id=None):
include_reviewed_codes=True)
#---------------------------------------------
-
- for cc in concept_data['codelist']:
+ codelist = []
+ if isinstance(concept_data, dict) and isinstance(concept_data.get('codelist'), list):
+ codelist = concept_data.get('codelist')
+
+ for cc in codelist:
+ code = cc.get('code', None)
+ if code is None:
+ continue
+
rows_no += 1
-
+
#---------------------------------------------
code_attributes = []
code_attributes_dict = OrderedDict([])
if code_attribute_header:
- code_attributes_dict = OrderedDict(zip(code_attribute_header, cc['attributes']))
+ code_attr_values = cc.get('attributes', None)
+ if code_attr_values is None or not isinstance(cc.get('attributes'), Iterable):
+ code_attr_values = ['']*len(code_attribute_header)
+
+ code_attributes_dict = OrderedDict(zip(code_attribute_header, code_attr_values))
code_attributes.append(dict(code_attributes_dict))
if code_attributes:
code_attributes = [json.dumps(code_attributes)]
#---------------------------------------------
-
+ desc = cc.get('description', '')
writer.writerow([
- cc['code'],
- cc['description'].encode('ascii', 'ignore').decode('ascii'),
+ code,
+ desc.encode('ascii', 'ignore').decode('ascii'),
concept_coding_system,
'C' + str(concept_id),
concept_version_id,
diff --git a/CodeListLibrary_project/clinicalcode/views/Organisation.py b/CodeListLibrary_project/clinicalcode/views/Organisation.py
index a4b0eb232..66ba835b4 100644
--- a/CodeListLibrary_project/clinicalcode/views/Organisation.py
+++ b/CodeListLibrary_project/clinicalcode/views/Organisation.py
@@ -379,6 +379,9 @@ def cancel_invite(self, request, *args, **kwargs):
''' View Organisation '''
class OrganisationView(TemplateView):
+ # Specify how many items to return when computing popular entities
+ MAX_POPULAR_ITEMS = 5
+
template_name = 'clinicalcode/organisation/view.html'
fetch_methods = [
'leave_organisation'
@@ -391,183 +394,26 @@ def get_context_data(self, *args, **kwargs):
context = super(OrganisationView, self).get_context_data(*args, **kwargs)
request = self.request
+ slug = kwargs.get('slug')
user = request.user if request.user and not request.user.is_anonymous else None
current_brand = model_utils.try_get_brand(request)
current_brand = current_brand if current_brand and current_brand.org_user_managed else None
-
- slug = kwargs.get('slug')
- if not gen_utils.is_empty_string(slug):
- organisation = Organisation.objects.filter(slug=slug)
- if organisation.exists():
- organisation = organisation.first()
-
- members = organisation.members.through.objects \
- .filter(organisation_id=organisation.id) \
- .annotate(
- role_name=Case(
- *[When(role=v.value, then=Value(v.name)) for v in constants.ORGANISATION_ROLES],
- default=Value(constants.ORGANISATION_ROLES.MEMBER.name),
- output_field=models.CharField()
- )
- ) \
- .distinct('user_id')
-
- is_owner = False
- is_member = False
- is_admin = False
- if user:
- is_owner = organisation.owner_id == user.id
-
- membership = organisation.organisationmembership_set.filter(user_id=user.id)
- if membership.exists():
- membership = membership.first()
-
- is_member = True
- is_admin = membership.role >= constants.ORGANISATION_ROLES.ADMIN
-
- entity_brand_clause = ''
- user_perms_sql = f'''
- select memb.user_id, memb.organisation_id, memb.role
- from public.auth_user as uau
- join public.clinicalcode_organisationmembership as memb
- on uau.id = memb.user_id
- join public.clinicalcode_organisation as org
- on memb.organisation_id = org.id
- where memb.organisation_id = {organisation.id}
- and memb.user_id = {user.id if user else 'null'}
- union
- select uau.id as user_id, org.id as organisation_id, 3 as role
- from public.auth_user as uau
- join public.clinicalcode_organisation as org
- on org.owner_id = uau.id
- where uau.id = {user.id if user else 'null'}
- '''
- if current_brand is not None:
- entity_brand_clause = f'and ge.brands && array[{current_brand.id}]'
-
- user_perms_sql = f'''
- select memb.user_id, memb.organisation_id, memb.role
- from public.auth_user as uau
- join public.clinicalcode_organisationmembership as memb
- on uau.id = memb.user_id
- join public.clinicalcode_organisation as org
- on memb.organisation_id = org.id
- join public.clinicalcode_organisationauthority as auth
- on auth.organisation_id = org.id
- where memb.organisation_id = {organisation.id}
- and memb.user_id = {user.id if user else 'null'}
- and auth.brand_id = {current_brand.id}
- union
- select uau.id as user_id, org.id as organisation_id, 3 as role
- from public.auth_user as uau
- join public.clinicalcode_organisation as org
- on org.owner_id = uau.id
- where uau.id = {user.id if user else 'null'}
- '''
-
- sql = f'''
- with user_perms as (
- {user_perms_sql}
- ),
- entities as (
- select hge.id, hge.history_id, hge.name, hge.updated,
- hge.publish_status, ge.organisation_id, ge.is_deleted,
- row_number() over (partition by hge.id order by hge.history_id desc) as rn
- from public.clinicalcode_historicalgenericentity as hge
- join public.clinicalcode_genericentity as ge
- on hge.id = ge.id
- where ge.organisation_id = {organisation.id}
- {entity_brand_clause}
- ),
- published as (
- select id, history_id, name, updated, publish_status
- from (
- select *,
- min(rn) over (partition by entities.id) as min_rn
- from entities
- where publish_status = {constants.APPROVAL_STATUS.APPROVED}
- ) as sq
- where rn = min_rn
- ),
- draft as (
- select id, history_id, name, updated, publish_status
- from (
- select entities.*,
- min(entities.rn) over (partition by entities.id) as min_rn
- from entities
- join user_perms
- on entities.organisation_id = user_perms.organisation_id
- left join published
- on entities.id = published.id
- and published.history_id > entities.history_id
- where entities.publish_status != {constants.APPROVAL_STATUS.APPROVED}
- and published.id is null
- and entities.is_deleted is null or entities.is_deleted = false
- ) as sq
- where rn = min_rn
- ),
- moderated as (
- select entities.id, entities.history_id, entities.name,
- entities.updated, entities.publish_status
- from entities
- join user_perms
- on entities.organisation_id = user_perms.organisation_id
- where user_perms.role >= 2
- and entities.publish_status in (
- {constants.APPROVAL_STATUS.REQUESTED}, {constants.APPROVAL_STATUS.PENDING}
- )
- )
- select json_build_object(
- 'published', (
- select json_agg(json_build_object(
- 'id', id,
- 'history_id', history_id,
- 'name', name,
- 'updated', updated,
- 'publish_status', publish_status
- )) from published
- ),
- 'draft', (
- select json_agg(json_build_object(
- 'id', id,
- 'history_id', history_id,
- 'name', name,
- 'updated', updated,
- 'publish_status', publish_status
- )) from draft
- ),
- 'moderated', (
- select json_agg(json_build_object(
- 'id', id,
- 'history_id', history_id,
- 'name', name,
- 'updated', updated,
- 'publish_status', publish_status
- )) from moderated
- )
- ) as "data"
- '''
- entities = None
- with connection.cursor() as cursor:
- cursor.execute(sql)
-
- columns = [col[0] for col in cursor.description]
- entities = [dict(zip(columns, row)) for row in cursor.fetchall()][0]
- entities = entities.get('data')
-
- return context | {
- 'instance': organisation,
- 'is_owner': is_owner,
- 'is_member': is_member,
- 'is_admin': is_admin,
- 'members': members,
- 'published': entities.get('published'),
- 'draft': entities.get('draft'),
- 'moderated': entities.get('moderated')
- }
- raise Http404('No organisation found')
+ organisation = Organisation.objects.filter(slug=slug) if isinstance(slug, str) and not gen_utils.is_empty_string(slug) else None
+ if organisation is None or not organisation.exists():
+ raise Http404('No organisation found')
+
+ organisation = organisation.first()
+
+ org_data = self.__resolve_org_context(organisation, user, current_brand)
+
+ if org_data.get('has_entities', False) and (org_data.get('is_owner') or org_data.get('is_member')):
+ org_data.update({
+ 'org_stats': self.__resolve_org_stats(organisation),
+ })
+
+ return context | org_data
def get(self, request, *args, **kwargs):
context = self.get_context_data(*args, **kwargs)
@@ -608,6 +454,269 @@ def leave_organisation(self, request, *args, **kwargs):
return gen_utils.jsonify_response(code=200, status='true')
+ def __resolve_org_stats(self, organisation):
+ sql = '''
+ with
+ const_org_id as (values ({org_id})),
+ const_max_popular as (values ({pop_limit})),
+ ge_vis as (
+ select ge.*
+ from public.clinicalcode_genericentity as ge
+ join public.clinicalcode_organisation as org
+ on ge.organisation_id = org.id
+ where ge.organisation_id = (table const_org_id)::bigint
+ ),
+ hge_vis as (
+ select hge.*
+ from ge_vis as ge
+ join public.clinicalcode_historicalgenericentity as hge
+ using (id)
+ ),
+ ent_total as (
+ select count(ge.*) as cnt
+ from ge_vis as ge
+ ),
+ ent_created as (
+ select count(ge.*) as cnt
+ from ge_vis as ge
+ where ge.created >= date_trunc('day', now()) - interval '30 day'
+ ),
+ ent_updated as (
+ select count(hge.*) as cnt
+ from hge_vis as hge
+ where hge.updated >= date_trunc('day', now()) - interval '30 day'
+ ),
+ ent_views as (
+ select count(req.*) as cnt
+ from ge_vis as ge
+ join public.easyaudit_requestevent as req
+ on req.url like concat('%%', ge.id::text, '%%')
+ where req.datetime >= date_trunc('day', now()) - interval '30 day'
+ ),
+ ent_downloads as (
+ select count(req.*) as cnt
+ from ge_vis as ge
+ join public.easyaudit_requestevent as req
+ on req.url ~ concat('api.*', ge.id, '|', ge.id, '.*export')
+ where req.datetime >= date_trunc('day', now()) - interval '30 day'
+ ),
+ ent_popular as (
+ select
+ json_agg(
+ json_build_object(
+ 'id', ge.id,
+ 'name', ge.name,
+ 'view_count', req.cnt
+ )
+ order by req.cnt desc
+ ) as cnt
+ from (
+ select t0.id, count(t1.*) as cnt
+ from ge_vis as t0
+ join public.easyaudit_requestevent as t1
+ on t1.url like concat('%%', t0.id::text, '%%')
+ group by t0.id
+ order by cnt desc
+ limit (table const_max_popular)::int
+ ) as req
+ join ge_vis as ge
+ on req.id = ge.id
+ )
+ select
+ (select cnt from ent_total) as total,
+ (select cnt from ent_created) as created,
+ (select cnt from ent_updated) as edited,
+ (select cnt from ent_views) as views,
+ (select cnt from ent_downloads) as downloads,
+ (select cnt from ent_popular) as popular
+ ''' \
+ .format(
+ org_id=organisation.id,
+ pop_limit=self.MAX_POPULAR_ITEMS
+ )
+
+ with connection.cursor() as cursor:
+ cursor.execute(sql)
+
+ columns = [col[0] for col in cursor.description]
+ return dict(zip(columns, cursor.fetchone()))
+
+ def __resolve_org_context(self, organisation, user, current_brand):
+ members = organisation.members.through.objects \
+ .filter(organisation_id=organisation.id) \
+ .annotate(
+ role_name=Case(
+ *[When(role=v.value, then=Value(v.name)) for v in constants.ORGANISATION_ROLES],
+ default=Value(constants.ORGANISATION_ROLES.MEMBER.name),
+ output_field=models.CharField()
+ )
+ ) \
+ .distinct('user_id')
+
+ is_owner = False
+ is_member = False
+ is_admin = False
+ if user:
+ is_owner = organisation.owner_id == user.id
+
+ membership = organisation.organisationmembership_set.filter(user_id=user.id)
+ if membership.exists():
+ membership = membership.first()
+
+ is_member = True
+ is_admin = membership.role >= constants.ORGANISATION_ROLES.ADMIN
+
+ entity_brand_clause = ''
+ user_perms_sql = f'''
+ select memb.user_id, memb.organisation_id, memb.role
+ from public.auth_user as uau
+ join public.clinicalcode_organisationmembership as memb
+ on uau.id = memb.user_id
+ join public.clinicalcode_organisation as org
+ on memb.organisation_id = org.id
+ where memb.organisation_id = {organisation.id}
+ and memb.user_id = {user.id if user else 'null'}
+ union
+ select uau.id as user_id, org.id as organisation_id, 3 as role
+ from public.auth_user as uau
+ join public.clinicalcode_organisation as org
+ on org.owner_id = uau.id
+ where uau.id = {user.id if user else 'null'}
+ '''
+ if current_brand is not None:
+ entity_brand_clause = f'and ge.brands && array[{current_brand.id}]'
+
+ user_perms_sql = f'''
+ select memb.user_id, memb.organisation_id, memb.role
+ from public.auth_user as uau
+ join public.clinicalcode_organisationmembership as memb
+ on uau.id = memb.user_id
+ join public.clinicalcode_organisation as org
+ on memb.organisation_id = org.id
+ join public.clinicalcode_organisationauthority as auth
+ on auth.organisation_id = org.id
+ where memb.organisation_id = {organisation.id}
+ and memb.user_id = {user.id if user else 'null'}
+ and auth.brand_id = {current_brand.id}
+ union
+ select uau.id as user_id, org.id as organisation_id, 3 as role
+ from public.auth_user as uau
+ join public.clinicalcode_organisation as org
+ on org.owner_id = uau.id
+ where uau.id = {user.id if user else 'null'}
+ '''
+
+ sql = f'''
+ with user_perms as (
+ {user_perms_sql}
+ ),
+ entities as (
+ select hge.id, hge.history_id, hge.name, hge.updated,
+ hge.publish_status, ge.organisation_id, ge.is_deleted,
+ row_number() over (partition by hge.id order by hge.history_id desc) as rn
+ from public.clinicalcode_historicalgenericentity as hge
+ join public.clinicalcode_genericentity as ge
+ on hge.id = ge.id
+ where ge.organisation_id = {organisation.id}
+ {entity_brand_clause}
+ ),
+ published as (
+ select id, history_id, name, updated, publish_status
+ from (
+ select *,
+ min(rn) over (partition by entities.id) as min_rn
+ from entities
+ where publish_status = {constants.APPROVAL_STATUS.APPROVED}
+ ) as sq
+ where rn = min_rn
+ ),
+ draft as (
+ select id, history_id, name, updated, publish_status
+ from (
+ select entities.*,
+ min(entities.rn) over (partition by entities.id) as min_rn
+ from entities
+ join user_perms
+ on entities.organisation_id = user_perms.organisation_id
+ left join published
+ on entities.id = published.id
+ and published.history_id > entities.history_id
+ where entities.publish_status != {constants.APPROVAL_STATUS.APPROVED}
+ and published.id is null
+ and entities.is_deleted is null or entities.is_deleted = false
+ ) as sq
+ where rn = min_rn
+ ),
+ moderated as (
+ select entities.id, entities.history_id, entities.name,
+ entities.updated, entities.publish_status
+ from entities
+ join user_perms
+ on entities.organisation_id = user_perms.organisation_id
+ where user_perms.role >= 2
+ and entities.publish_status in (
+ {constants.APPROVAL_STATUS.REQUESTED}, {constants.APPROVAL_STATUS.PENDING}
+ )
+ )
+ select json_build_object(
+ 'published', (
+ select json_agg(json_build_object(
+ 'id', id,
+ 'history_id', history_id,
+ 'name', name,
+ 'updated', updated,
+ 'publish_status', publish_status
+ )) from published
+ ),
+ 'draft', (
+ select json_agg(json_build_object(
+ 'id', id,
+ 'history_id', history_id,
+ 'name', name,
+ 'updated', updated,
+ 'publish_status', publish_status
+ )) from draft
+ ),
+ 'moderated', (
+ select json_agg(json_build_object(
+ 'id', id,
+ 'history_id', history_id,
+ 'name', name,
+ 'updated', updated,
+ 'publish_status', publish_status
+ )) from moderated
+ )
+ ) as "data"
+ '''
+ entities = None
+ with connection.cursor() as cursor:
+ cursor.execute(sql)
+
+ columns = [col[0] for col in cursor.description]
+ entities = [dict(zip(columns, row)) for row in cursor.fetchall()][0]
+ entities = entities.get('data')
+
+ entities = entities if isinstance(entities, dict) else {}
+ drafts = entities.get('draft')
+ published = entities.get('published')
+
+ has_entities = (
+ (isinstance(drafts, list) and len(drafts) > 0)
+ or (isinstance(published, list) and len(published) > 0)
+ )
+
+ return {
+ 'instance': organisation,
+ 'is_owner': is_owner,
+ 'is_member': is_member,
+ 'is_admin': is_admin,
+ 'members': members,
+ 'published': published,
+ 'draft': drafts,
+ 'moderated': entities.get('moderated'),
+ 'has_entities': has_entities,
+ }
+
''' View Invite '''
class OrganisationInviteView(TemplateView):
diff --git a/CodeListLibrary_project/clinicalcode/views/dashboard/BrandAdmin.py b/CodeListLibrary_project/clinicalcode/views/dashboard/BrandAdmin.py
index 5eef479b8..fb2c0f207 100644
--- a/CodeListLibrary_project/clinicalcode/views/dashboard/BrandAdmin.py
+++ b/CodeListLibrary_project/clinicalcode/views/dashboard/BrandAdmin.py
@@ -12,9 +12,13 @@
from rest_framework.decorators import schema
from django.contrib.staticfiles import finders
from django.contrib.staticfiles.storage import staticfiles_storage
+from google.oauth2 import service_account
+from google.auth.transport.requests import Request
import os
import math
+import json
+import codecs
import logging
import psycopg2
@@ -292,6 +296,59 @@ def __compute_summary(self, brand):
stats_context = '^\/%s.*$' % brand.name
query_params.update({ 'stats_ctx': stats_context })
+ result = {
+ 'data': { },
+ 'timestamp': datetime.now().isoformat()
+ }
+
+ if settings.GA4_ACTIVE:
+ try:
+ scopes = settings.GA4_INFO.get('scopes')
+ property_id = settings.GA4_INFO.get('property_id')
+ client_info = settings.GA4_INFO.get('client')
+
+ client_info['private_key'] = codecs.decode(client_info.get('private_key'), 'unicode_escape')
+
+ credentials = service_account.Credentials.from_service_account_info(
+ client_info,
+ scopes=scopes.split(',')
+ )
+
+ request = Request()
+ credentials.refresh(request)
+
+ response = request(
+ url=f'https://analyticsdata.googleapis.com/v1beta/properties/{property_id}:runReport',
+ method='POST',
+ body=json.dumps({
+ 'dateRanges': [
+ { 'startDate': 'today', 'endDate': 'today' },
+ { 'startDate': '28daysAgo', 'endDate': 'yesterday' },
+ # { 'startDate': '7daysAgo', 'endDate': 'yesterday' },
+ ],
+ 'metrics': [
+ { 'name': 'activeUsers' },
+ # { 'name': 'newUsers' },
+ ]
+ }),
+ headers={
+ 'Authorization': f'Bearer {credentials.token}',
+ 'Content-Type': 'application/json'
+ },
+ timeout=5
+ )
+
+ if response.status == 200:
+ report_data = json.loads(response.data)
+ report_rows = report_data.get('rows')
+
+ monthly_users = report_rows[0].get('metricValues')[0].get('value')
+ daily_users = report_rows[1].get('metricValues')[0].get('value')
+
+ result['data'] |= { 'mau': monthly_users, 'dau': daily_users }
+ except Exception as e:
+ logger.error(f'Failed to retrieve GA4 API report w/ err:\n{e}\n')
+
with connection.cursor() as cursor:
if isinstance(content_visibility, dict):
allowed_brands = content_visibility.get('ids')
@@ -411,6 +468,8 @@ def __compute_summary(self, brand):
cursor.execute(sql, params=query_params)
columns = [col[0] for col in cursor.description]
+ resultset = dict(zip(columns, cursor.fetchone()))
+
+ result['data'] = resultset | result['data']
- result = { 'data': dict(zip(columns, row)) for row in cursor.fetchall() }
- return result | { 'timestamp': datetime.now().isoformat() }
+ return result
diff --git a/CodeListLibrary_project/clinicalcode/views/tests/test_views.py b/CodeListLibrary_project/clinicalcode/views/tests/test_views.py
deleted file mode 100644
index f4b15cd0b..000000000
--- a/CodeListLibrary_project/clinicalcode/views/tests/test_views.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from unittest.case import skip
-from django.test import Client, TestCase
-
-from ...utils import (detect_sql_meta_characters, detect_sql_injection_with_keywords)
-
-@skip("just skip")
-class ViewTest(TestCase):
-
- @classmethod
- def setUpClass(cls):
- super(ViewTest, cls).setUpClass()
- print("View tests ...")
-
- def setup(self):
- self.client = Client()
-
- def test_sqlInjection_sqlMetaCharacters_provideMatch(self):
- value = 'SELECT --:\''
- match = detect_sql_meta_characters(value)
- self.assertEqual(match, True)
-
- def test_sqlInjection_noSqlMetaCharacters_doesNotProvideMatch(self):
- value = 'C08'
- match = detect_sql_meta_characters(value)
- self.assertEqual(match, False)
-
- def test_sqlInject_sqlWithKeywords_provideMatch(self):
- value = "' select"
-
- match = detect_sql_injection_with_keywords(value)
- self.assertEqual(match, True)
-
- def test_sqlInject_sqlWithoutKeywords_doesNotProvideMatch(self):
- value = "C09"
- match = detect_sql_injection_with_keywords(value)
- self.assertEqual(match, False)
diff --git a/CodeListLibrary_project/cll/settings.py b/CodeListLibrary_project/cll/settings.py
index 0e0b6603f..cfb951845 100644
--- a/CodeListLibrary_project/cll/settings.py
+++ b/CodeListLibrary_project/cll/settings.py
@@ -76,19 +76,20 @@ def GET_SERVER_IP(TARGET_IP='10.255.255.255', PORT=1):
return IP
-def get_env_value(env_variable, cast=None, default=Symbol('None')):
+def get_env_value(env_variable, cast=None, default=Symbol('None'), strip_empty=False):
"""
Attempts to get env variable from OS
"""
try:
- if cast == None:
- return os.environ[env_variable]
- elif cast == 'int':
+ if cast == 'int':
return int(os.environ[env_variable])
elif cast == 'bool':
return bool(strtobool(os.environ[env_variable]))
else:
- return os.environ[env_variable]
+ value = os.environ[env_variable]
+ if strip_empty and len(value) < 1:
+ return default
+ return value
except KeyError:
if isinstance(default, Symbol):
error_msg = 'Expected environment variable "{}" of type<{}>, please set a valid "{}" environment variable' \
@@ -678,6 +679,35 @@ def get_env_value(env_variable, cast=None, default=Symbol('None')):
and DOI_RELATION is not None
))
+## GA4 info
+GA4_INFO = {
+ 'scopes': get_env_value('GA4_SCOPES', default=None, strip_empty=True),
+ 'property_id': get_env_value('GA4_PROP_ID', default=None, strip_empty=True),
+ 'client': {
+ 'type': get_env_value('GA4_ACC', default=None, strip_empty=True),
+ 'project_id': get_env_value('GA4_PID', default=None, strip_empty=True),
+ 'private_key': get_env_value('GA4_PKEY', default=None, strip_empty=True),
+ 'private_key_id': get_env_value('GA4_PKID', default=None, strip_empty=True),
+ 'client_id': get_env_value('GA4_CID', default=None, strip_empty=True),
+ 'client_email': get_env_value('GA4_EMAIL', default=None, strip_empty=True),
+ 'auth_uri': get_env_value('GA4_AUTH_URI', default=None, strip_empty=True),
+ 'token_uri': get_env_value('GA4_TOKEN_URI', default=None, strip_empty=True),
+ 'auth_provider_x509_cert_url': get_env_value('GA4_PAUTH_CERT_URL', default=None, strip_empty=True),
+ 'client_x509_cert_url': get_env_value('GA4_CAUTH_CERT_URL', default=None, strip_empty=True),
+ 'universe_domain': get_env_value('GA4_UNIVERSE_DOMAIN', default=None, strip_empty=True),
+ },
+}
+
+GA4_ACTIVE = (
+ not REMOTE_TEST
+ and not IS_DEMO
+ and not CLL_READ_ONLY
+ and not IS_INSIDE_GATEWAY
+ and not IS_DEVELOPMENT_PC
+)
+
+GA4_STUDIO_LINK = get_env_value('GA4_STUDIO_LINK', default=None, strip_empty=True)
+
## CAPTCHA
### To ignore captcha during debug builds
try:
diff --git a/CodeListLibrary_project/cll/static/js/clinicalcode/cookies/analytics.js b/CodeListLibrary_project/cll/static/js/clinicalcode/cookies/analytics.js
index 39ced79f1..4bda2157c 100644
--- a/CodeListLibrary_project/cll/static/js/clinicalcode/cookies/analytics.js
+++ b/CodeListLibrary_project/cll/static/js/clinicalcode/cookies/analytics.js
@@ -117,28 +117,6 @@ const setAnalyticsEnv = (config, consent = null) => {
}
}
-const getAnalyticsTarget = () => {
- const host = getCurrentHost();
- const brand = document.documentElement.getAttribute('data-brand');
- const isUnbranded = isNullOrUndefined(brand) || isStringEmpty(brand) || brand === 'none';
- if (!!host.match(CLU_HOST.HDRUK)) {
- return {
- brand: 'HDRUK',
- configId: 'G-W6XK339B16',
- };
- } else if (!isUnbranded && brand.toLowerCase() === 'HDRUK') {
- return {
- brand: 'HDRUK',
- configId: 'G-QE37B9J5WK',
- }
- }
-
- return {
- brand: isUnbranded ? 'none' : brand,
- configId: 'G-KLBS2646W1',
- }
-};
-
domReady.finally(() => {
const cookieSrc = document.querySelector('script[data-src="cookies"]');
if (!cookieSrc) {
diff --git a/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/utils.js b/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/utils.js
index fb444e434..25e951976 100644
--- a/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/utils.js
+++ b/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/utils.js
@@ -30,3 +30,115 @@ export const confirmationPrompt = ({
}
});
}
+
+export const getStatsIcon = (key) => {
+ switch (key) {
+ case 'total':
+ return {
+ title: 'Content',
+ icon: '',
+ desc: 'No. of owned Phenotypes',
+ }
+ case 'created':
+ return {
+ title: 'Created',
+ icon: '',
+ desc: 'No. created in the last 30 days',
+ }
+ case 'edited':
+ return {
+ title: 'Edited',
+ icon: '',
+ desc: 'No. edited in the last 30 days',
+ }
+ case 'views':
+ return {
+ title: 'Phenotypes',
+ icon: '',
+ desc: 'View count in the last 30 days',
+ }
+ case 'downloads':
+ return {
+ title: 'Downloads',
+ icon: '',
+ desc: 'Downloads in the last 30 days',
+ }
+ case 'popular':
+ return {
+ title: 'Popular',
+ icon: '',
+ desc: 'Top 5 Phenotypes',
+ }
+ default:
+ // '';
+ return null;
+ }
+}
+
+export const composeStatsCard = (parent, key, data, entityResolver) => {
+ if (typeof data === 'undefined' || data === null) {
+ console.warn(`Failed to compose StatsCard w/ err:\nInvalid data`);
+ return null;
+ }
+
+ const info = getStatsIcon(key);
+ if (typeof info === 'undefined' || info === null) {
+ console.warn(`Failed to compose StatsCard w/ err:\nUnknown key type`);
+ return null;
+ }
+
+ let template;
+ let className = getObjectClassName(data);
+ switch (className) {
+ case 'Number':
+ template = ' \
+ \
+ ${desc}
\
+ ${data} \
+ '
+ break;
+
+ case 'Array':
+ data = Object.values(data)
+ if (data.length < 1) {
+ return null;
+ }
+
+ data = data
+ .reduce((out, x) => {
+ const url = entityResolver(x.id);
+ out.push(``)
+
+ return out;
+ }, [])
+ .join('\n')
+
+ template = ' \
+ \
+ ${desc}
\
+ \
+ ${data} \
+ \
+ '
+
+ break;
+
+ default:
+ console.warn(`Failed to compose StatsCard w/ err:\nUnknown datatype for case Data`)
+ return null;
+ }
+
+ return composeTemplate(template, {
+ params: Object.assign(info, { 'data': data }),
+ parent: parent,
+ });
+}
\ No newline at end of file
diff --git a/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/view.js b/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/view.js
index 14f56386d..3423fa11f 100644
--- a/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/view.js
+++ b/CodeListLibrary_project/cll/static/js/clinicalcode/services/organisationService/view.js
@@ -3,6 +3,11 @@ import * as orgUtils from './utils.js';
let ARCHIVE_TEMPLATE;
const
+ /**
+ * ENTITY_URL
+ * @desc specifies the URL(s) associated with the "Popular" card
+ */
+ ENTITY_URL = '/${url_target}/${id}/detail/',
/**
* DETAIL_URL
* @desc describes the URL(s) associated with the action button(s)
@@ -146,14 +151,23 @@ const getCollectionData = () => {
let value = data.innerText.trim();
if (!isNullOrUndefined(value) && !isStringEmpty(value.trim())) {
if (type == 'text/json') {
- value = JSON.parse(value);
+ try {
+ value = JSON.parse(value);
+ } catch (e) {
+ console.error(`Failed to parse data w/ err:\n${e}`);
+ value = null;
+ }
}
}
+ if (isNullOrUndefined(value) || !(Array.isArray(value) || isObjectType(value))) {
+ value = null;
+ }
+
result[name] = {
pageType: pageType,
- container: data.parentNode.querySelector('.organisation-collection__table-container'),
- data: value || [ ],
+ container: data.parentNode.querySelector('[data-cx="container"]'),
+ data: value,
}
}
@@ -353,7 +367,32 @@ domReady.finally(() => {
delete data.mapping;
for (let [key, value] of Object.entries(data)) {
- if (value.data.length < 1) {
+ if (isNullOrUndefined(value.data) || (Array.isArray(value.data) && value.data.length < 1)) {
+ continue;
+ }
+
+ if (value.pageType === 'STATS') {
+ if (!isObjectType(value.data)) {
+ continue;
+ }
+
+ let entityResolver = (id) => {
+ let urlTarget = mapping?.phenotype_url;
+ if (!stringHasChars(urlTarget)) {
+ urlTarget = 'phenotypes';
+ }
+
+ const brand = getBrandedHost();
+ return interpolateString(brand + ENTITY_URL, {
+ id: id,
+ url_target: urlTarget,
+ });
+ }
+
+ for (const key in value.data) {
+ console.log(key, value.data[key], value.container)
+ orgUtils.composeStatsCard(value.container, key, value.data[key], entityResolver)
+ }
continue;
}
diff --git a/CodeListLibrary_project/cll/static/js/clinicalcode/utils.js b/CodeListLibrary_project/cll/static/js/clinicalcode/utils.js
index 6c801cf72..4c1cb4ca0 100644
--- a/CodeListLibrary_project/cll/static/js/clinicalcode/utils.js
+++ b/CodeListLibrary_project/cll/static/js/clinicalcode/utils.js
@@ -2539,6 +2539,33 @@ const findMissingComponents = (templates, expected, missing = []) => {
return missing;
}
+/**
+ * @desc resolves the analytics manager's brand context and target config ID
+ *
+ * @returns {{ brand: string, configId: string }} the resulting analytics target info
+ */
+const getAnalyticsTarget = () => {
+ const host = getCurrentHost();
+ const brand = document.documentElement.getAttribute('data-brand');
+ const isUnbranded = isNullOrUndefined(brand) || isStringEmpty(brand) || brand === 'none';
+ if (!!host.match(CLU_HOST.HDRUK)) {
+ return {
+ brand: 'HDRUK',
+ configId: 'G-W6XK339B16',
+ };
+ } else if (!isUnbranded && brand.toLowerCase() === 'HDRUK') {
+ return {
+ brand: 'HDRUK',
+ configId: 'G-QE37B9J5WK',
+ }
+ }
+
+ return {
+ brand: isUnbranded ? 'none' : brand,
+ configId: 'G-KLBS2646W1',
+ }
+};
+
/**
* @desc analytics manager wrapper
*
@@ -2566,3 +2593,35 @@ const tryAnalytics = (fn) => {
}
});
}
+
+/**
+ * @desc attempts to resolve the profile associated with this client
+ *
+ * @returns {{ active: boolean, client_id: string, session_id: string }} GA4 user analytics profile data
+ */
+const getAnalyticsProfile = () => {
+ const res = { active: false };
+ const mngr = window?.gtag ?? null;
+ if (typeof mngr !== 'function') {
+ return Promise.resolve(result);
+ }
+
+ const conf = getAnalyticsTarget();
+ const wrap = (key, resolver) => (value) => resolver({ name: key, result: value });
+ return Promise.allSettled([
+ new Promise((resolve) => mngr('get', conf.configId, 'client_id', wrap('client_id', resolve))),
+ new Promise((resolve) => mngr('get', conf.configId, 'session_id', wrap('session_id', resolve))),
+ ])
+ .then(result => {
+ res.active = true;
+
+ return result.reduce((out, data) => {
+ if (data.status !== 'fulfilled') {
+ return;
+ }
+
+ out[data.value.name] = data.value.result;
+ return out;
+ }, res);
+ });
+}
\ No newline at end of file
diff --git a/CodeListLibrary_project/cll/static/scss/pages/organisations.scss b/CodeListLibrary_project/cll/static/scss/pages/organisations.scss
index 08da7853e..3fe1b9d9c 100644
--- a/CodeListLibrary_project/cll/static/scss/pages/organisations.scss
+++ b/CodeListLibrary_project/cll/static/scss/pages/organisations.scss
@@ -3,6 +3,124 @@
@import '../_media';
@import '../_utils';
+/// Organisation card
+/// @desc Used to display organisation metrics
+.org-stats-card {
+ @include flex-col(false, true);
+ width: 100%;
+ max-height: 220px;
+ flex: 1;
+ padding: 20px 20px;
+ overflow: hidden;
+ color: $mostly_black;
+ background-color: $white;
+
+ @include apply-border;
+ @include prefix(box-shadow, rgba(99, 99, 99, 0.3) 0px 2px 8px 0px, webkit moz o);
+
+ &--flex-1 {
+ flex: 1;
+ }
+
+ &__desc {
+ color: $lightblack-grey;
+ margin: 0.25rem 0 0.5rem 0;
+ }
+
+ &__header {
+ @include flex-row(false, true);
+ width: 100%;
+ max-width: 100%;
+ align-items: flex-start;
+ justify-content: space-between;
+ vertical-align: middle;
+ white-space: normal;
+ word-break: break-word;
+ word-wrap: break-word;
+ text-wrap: wrap;
+
+ &:has(> :last-child:nth-child(1)) {
+ justify-content: flex-start;
+ }
+
+ & > h3 {
+ color: $blackish-grey;
+ font-size: 1.05em;
+ margin: 0 0 0.5rem 0;
+ white-space: normal;
+ word-break: break-word;
+ word-wrap: break-word;
+ text-wrap: wrap;
+ }
+ }
+
+ &__data {
+ display: flex;
+ flex-flow: row nowrap;
+ align-self: flex end;
+ width: auto;
+ height: 2.5em;
+ max-height: 2.5em;
+ align-items: center;
+ justify-content: center;
+ text-align: center;
+ font-size: 2em;
+ margin: 0;
+ padding: 0;
+ margin-top: auto;
+ }
+
+ &__items {
+ display: flex;
+ flex-flow: column nowrap;
+ width: auto;
+ height: auto;
+ max-width: 100%;
+ max-height: 110px;
+ align-items: center;
+ margin: 0;
+ padding: 0;
+ margin-top: auto;
+ overflow-y: auto;
+ overflow-x: hidden;
+
+ &-elem {
+ display: flex;
+ flex-flow: row wrap;
+ width: calc(100% - 5px);
+ height: auto;
+ max-width: 100%;
+ max-height: 100%;
+ padding: 0 5px 0 0;
+ align-items: center;
+ justify-content: space-between;
+ }
+ }
+
+ &__footer {
+ @include flex-col(false, true);
+ width: 100%;
+ max-width: 100%;
+ overflow: clip;
+ color: $lightblack-grey;
+
+ span:not(:last-of-type){
+ margin-right: 1rem;
+ }
+
+ svg {
+ margin-right: 5px;
+ }
+
+ &--action {
+ @include flex-row(0.5rem, false);
+ align-items: center;
+ justify-content: flex-end;
+ padding: 5px 2px;
+ }
+ }
+}
+
/// Organisation page
/// @desc Stylesheet relating to organisations
.organisation-page {
@@ -83,6 +201,45 @@
}
}
}
+
+ &__group {
+ @include apply-bbox();
+ @include flex-col(false, true);
+ overflow: auto;
+ width: fit-content;
+ height: fit-content;
+ width: 100%;
+ max-width: 100%;
+ height: fit-content;
+ max-height: 210px;
+ }
+
+ &__grid {
+ @include apply-bbox();
+ // @include flex-row(1rem, true);
+ display: grid;
+ grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
+ grid-gap: 20px;
+ width: 100%;
+ height: fit-content;
+ max-width: 100%;
+ padding: 5px 10px;
+ align-items: stretch;
+ justify-content: space-evenly;
+
+ &:has(> :last-child:nth-child(1)) {
+ justify-content: flex-start;
+ }
+
+ .org-stats-card {
+ width: calc(100% - 40px);
+ }
+
+ @include media('
Home
+ {% if IS_HDRUK_EXT and GA4_STUDIO_LINK and not IS_DEMO %}
+
+ {% endif %}
-
+
@@ -125,7 +138,7 @@
Draft {{ brand_mapping.phenotype }}s
{% to_json_script draft data-owner="organisation-service" page-type="DRAFT_COLLECTIONS" name="draft" desc-type="text/json" %}
-
+
@@ -138,7 +151,7 @@
{{ brand_mapping.phenotype }}s Awaiting Review
{% to_json_script moderated data-owner="organisation-service" page-type="MODERATION_COLLECTIONS" name="moderated" desc-type="text/json" %}
-
+
diff --git a/CodeListLibrary_project/cll/templates/components/base/profile_menu.html b/CodeListLibrary_project/cll/templates/components/base/profile_menu.html
index e9809d56d..dfbbd731d 100644
--- a/CodeListLibrary_project/cll/templates/components/base/profile_menu.html
+++ b/CodeListLibrary_project/cll/templates/components/base/profile_menu.html
@@ -23,12 +23,14 @@
Admin
-
-
- {% svg "bar_chart_icon" %}
-
- Analytics
-
+ {% if GA4_STUDIO_LINK %}
+
+
+ {% svg "bar_chart_icon" %}
+
+ Analytics
+
+ {% endif %}
{% endif %}
{% if IS_BRAND_ADMIN and not CLL_READ_ONLY %}
diff --git a/CodeListLibrary_project/cll/templates/components/details/outputs/phenotype_clinical_code_lists.html b/CodeListLibrary_project/cll/templates/components/details/outputs/phenotype_clinical_code_lists.html
index 6eebe4d95..e071048e9 100644
--- a/CodeListLibrary_project/cll/templates/components/details/outputs/phenotype_clinical_code_lists.html
+++ b/CodeListLibrary_project/cll/templates/components/details/outputs/phenotype_clinical_code_lists.html
@@ -80,10 +80,16 @@
aria-label="Toggle Accordion: {{ c.name }} ({{ c.coding_system_name }})"
title="{{ c.name }} ({{ c.coding_system_name }})">
-
- {{c.phenotype_owner_id}} / C{{ c.concept_id }}
-
+ {% if not c.is_deleted %}
+
+ {{c.phenotype_owner_id}} / C{{ c.concept_id }}
+
+ {% else %}
+
+ {{c.phenotype_owner_id}} / C{{ c.concept_id }}
+
+ {% endif %}
- {{ c.name }} |
{{ c.coding_system_name }}
-
+