From acde03806cd5112ae88d5628cfc2a07a46062731 Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Thu, 12 Jan 2023 13:04:55 -0500 Subject: [PATCH 1/4] Returns the list of studies for a user, from protocol builder --- crc/scripts/get_user_studies.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 crc/scripts/get_user_studies.py diff --git a/crc/scripts/get_user_studies.py b/crc/scripts/get_user_studies.py new file mode 100644 index 00000000..bc533eb6 --- /dev/null +++ b/crc/scripts/get_user_studies.py @@ -0,0 +1,24 @@ +from crc.api.common import ApiError +from crc.models.protocol_builder import ProtocolBuilderCreatorStudySchema +from crc.scripts.script import Script +from crc.services.protocol_builder import ProtocolBuilderService + + +class ScriptGetUserStudies(Script): + + def get_description(self): + return """Returns a list of study ids for a user""" + + def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs): + return self.do_task(task, study_id, workflow_id, *args, **kwargs) + + def do_task(self, task, study_id, workflow_id, *args, **kwargs): + user_id = None + if len(args) > 0: + user_id = args[0] + elif 'user_id' in kwargs: + user_id = kwargs['user_id'] + if user_id is not None: + user_studies = ProtocolBuilderService().get_studies(user_id) + results = ProtocolBuilderCreatorStudySchema(many=True).dump(user_studies) + return results From aebb9a578edf8afcdf6782c9c4aebb177b3c3145 Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Thu, 12 Jan 2023 13:05:20 -0500 Subject: [PATCH 2/4] Test for new script --- .../get_user_studies/get_user_studies.bpmn | 87 +++++++++++++++++++ tests/scripts/test_get_user_studies.py | 25 ++++++ 2 files changed, 112 insertions(+) create mode 100644 tests/data/get_user_studies/get_user_studies.bpmn create mode 100644 tests/scripts/test_get_user_studies.py diff --git a/tests/data/get_user_studies/get_user_studies.bpmn b/tests/data/get_user_studies/get_user_studies.bpmn new file mode 100644 index 00000000..991b7006 --- /dev/null +++ b/tests/data/get_user_studies/get_user_studies.bpmn @@ -0,0 +1,87 @@ + + + + + Flow_08r5407 + + + + + ## Study IDs for User + + +### User ID +{{ user_id }} + + +### Study IDs +{{ study_ids }} + + + Flow_1hwgons + + + + Flow_0z6i1ms + Flow_1vgba29 + user_studies = get_user_studies(user_id) + + + Flow_1vgba29 + Flow_1hwgons + study_ids = [x.STUDYID for x in user_studies] + + + + + + + + + + + + + Flow_08r5407 + Flow_0z6i1ms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/scripts/test_get_user_studies.py b/tests/scripts/test_get_user_studies.py new file mode 100644 index 00000000..7d7fffe4 --- /dev/null +++ b/tests/scripts/test_get_user_studies.py @@ -0,0 +1,25 @@ +from tests.base_test import BaseTest +from unittest.mock import patch +from crc import app + + +class TestGetUserStudies(BaseTest): + + @patch('crc.services.protocol_builder.requests.get') + def test_get_user_studies(self, mock_get): + app.config['PB_ENABLED'] = True + mock_get.return_value.ok = True + mock_get.return_value.text = self.protocol_builder_response('user_studies.json') + + workflow = self.create_workflow('get_user_studies') + user_uid = workflow.study.user_uid + + workflow_api = self.get_workflow_api(workflow) + task = workflow_api.next_task + + form_data = {'user_id': user_uid} + workflow_api = self.complete_form(workflow, task, form_data) + task = workflow_api.next_task + assert task.name == "Event_EndEvent" + assert task.documentation == \ + '## Study IDs for User\n\n\n### User ID\ndhf8r\n\n\n### Study IDs\n[11111, 54321, 65432, 1]' From 1009f8e1e750cbe6584840022c0dbdd5c39d63de Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Thu, 12 Jan 2023 13:44:55 -0500 Subject: [PATCH 3/4] Simplified the test --- tests/scripts/test_get_user_studies.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/scripts/test_get_user_studies.py b/tests/scripts/test_get_user_studies.py index 7d7fffe4..d2fdb46f 100644 --- a/tests/scripts/test_get_user_studies.py +++ b/tests/scripts/test_get_user_studies.py @@ -21,5 +21,4 @@ class TestGetUserStudies(BaseTest): workflow_api = self.complete_form(workflow, task, form_data) task = workflow_api.next_task assert task.name == "Event_EndEvent" - assert task.documentation == \ - '## Study IDs for User\n\n\n### User ID\ndhf8r\n\n\n### Study IDs\n[11111, 54321, 65432, 1]' + assert "[11111, 54321, 65432, 1]" in task.documentation From 971e869791bd0cba95be92f3a21dfff8b56510e3 Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Thu, 12 Jan 2023 13:48:03 -0500 Subject: [PATCH 4/4] Add comment in the script about last assertion --- tests/scripts/test_get_user_studies.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/scripts/test_get_user_studies.py b/tests/scripts/test_get_user_studies.py index d2fdb46f..23ad25b7 100644 --- a/tests/scripts/test_get_user_studies.py +++ b/tests/scripts/test_get_user_studies.py @@ -21,4 +21,6 @@ class TestGetUserStudies(BaseTest): workflow_api = self.complete_form(workflow, task, form_data) task = workflow_api.next_task assert task.name == "Event_EndEvent" + # The script returns the whole study object, but + # the workflow pulls out the study ids and creates a list of study ids assert "[11111, 54321, 65432, 1]" in task.documentation