Added mocked pb study_details since we now check whether a study has valid REVIEW_TYPEs

This commit is contained in:
mike cullerton 2021-07-09 10:41:46 -04:00
parent 95c710768e
commit 445d3e5f0b
5 changed files with 52 additions and 15 deletions

View File

@ -2,6 +2,7 @@ from tests.base_test import BaseTest
from crc import session
from crc.models.study import StudyModel, StudyStatus, StudySchema
import json
from unittest.mock import patch
class TestStudyActionsStatus(BaseTest):
@ -20,8 +21,11 @@ class TestStudyActionsStatus(BaseTest):
study_result = session.query(StudyModel).filter(StudyModel.id == study.id).first()
return study_result
def test_hold_study(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_hold_study(self, mock_details):
self.load_example_data()
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
study = session.query(StudyModel).first()
self.assertEqual(study.status, StudyStatus.in_progress)
@ -33,8 +37,11 @@ class TestStudyActionsStatus(BaseTest):
study_result = self.update_study_status(study, study_schema)
self.assertEqual(StudyStatus.hold, study_result.status)
def test_abandon_study(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_abandon_study(self, mock_details):
self.load_example_data()
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
study = session.query(StudyModel).first()
self.assertEqual(study.status, StudyStatus.in_progress)
@ -46,8 +53,11 @@ class TestStudyActionsStatus(BaseTest):
study_result = self.update_study_status(study, study_schema)
self.assertEqual(StudyStatus.abandoned, study_result.status)
def test_open_enrollment_study(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_open_enrollment_study(self, mock_details):
self.load_example_data()
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
study = session.query(StudyModel).first()
self.assertEqual(study.status, StudyStatus.in_progress)

View File

@ -138,10 +138,13 @@ class TestSudySponsorsScript(BaseTest):
# who is allowed access
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
@patch('crc.services.protocol_builder.requests.get')
def test_study_sponsors_script_ensure_access(self, mock_get):
def test_study_sponsors_script_ensure_access(self, mock_get, mock_details):
mock_get.return_value.ok = True
mock_get.return_value.text = self.protocol_builder_response('sponsors.json')
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
flask.g.user = UserModel(uid='dhf8r')
app.config['PB_ENABLED'] = True

View File

@ -5,6 +5,7 @@ from crc.models.study import StudyModel, StudySchema
from crc.models.workflow import WorkflowModel, WorkflowSpecModel
import json
from unittest.mock import patch
class TestStudyCancellations(BaseTest):
@ -60,7 +61,10 @@ class TestStudyCancellations(BaseTest):
self.assertEqual('Activity_Modify', third_task.name)
return workflow_api, third_task
def test_before_cancel(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_before_cancel(self, mock_details):
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
workflow, study_id = self.load_workflow()
self.get_first_task(workflow)
@ -68,7 +72,10 @@ class TestStudyCancellations(BaseTest):
study_result = self.put_study_on_hold(study_id)
self.assertEqual('Beer consumption in the bipedal software engineer', study_result.title)
def test_first_cancel(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_first_cancel(self, mock_details):
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
workflow, study_id = self.load_workflow()
workflow_api, first_task = self.get_first_task(workflow)
@ -77,7 +84,10 @@ class TestStudyCancellations(BaseTest):
study_result = self.put_study_on_hold(study_id)
self.assertEqual('New Title', study_result.title)
def test_second_cancel(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_second_cancel(self, mock_details):
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
workflow, study_id = self.load_workflow()
workflow_api, first_task = self.get_first_task(workflow)
@ -90,7 +100,10 @@ class TestStudyCancellations(BaseTest):
study_result = self.put_study_on_hold(study_id)
self.assertEqual('Second Title', study_result.title)
def test_after_cancel(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_after_cancel(self, mock_details):
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
workflow, study_id = self.load_workflow()
workflow_api, first_task = self.get_first_task(workflow)

View File

@ -54,17 +54,20 @@ class TestStudyService(BaseTest):
ExampleDataLoader().load_reference_documents()
return user
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_required_docs') # mock_docs
def test_total_tasks_updated(self, mock_docs):
def test_total_tasks_updated(self, mock_docs, mock_details):
"""Assure that as a users progress is available when getting a list of studies for that user."""
app.config['PB_ENABLED'] = True
docs_response = self.protocol_builder_response('required_docs.json')
mock_docs.return_value = json.loads(docs_response)
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
user = self.create_user_with_study_and_workflow()
# The load example data script should set us up a user and at least one study, one category, and one workflow.
studies = StudyService.get_studies_for_user(user)
studies = StudyService().get_studies_for_user(user)
self.assertTrue(len(studies) == 1)
self.assertTrue(len(studies[0].categories) == 1)
self.assertTrue(len(studies[0].categories[0].workflows) == 1)
@ -82,7 +85,7 @@ class TestStudyService(BaseTest):
processor.do_engine_steps()
# Assure the workflow is now started, and knows the total and completed tasks.
studies = StudyService.get_studies_for_user(user)
studies = StudyService().get_studies_for_user(user)
workflow = next(iter(studies[0].categories[0].workflows)) # Workflows is a set.
# self.assertEqual(WorkflowStatus.user_input_required, workflow.status)
self.assertTrue(workflow.total_tasks > 0)
@ -95,21 +98,24 @@ class TestStudyService(BaseTest):
processor.save()
# Assure the workflow has moved on to the next task.
studies = StudyService.get_studies_for_user(user)
studies = StudyService().get_studies_for_user(user)
workflow = next(iter(studies[0].categories[0].workflows)) # Workflows is a set.
self.assertEqual(1, workflow.completed_tasks)
# Get approvals
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_required_docs') # mock_docs
def test_get_required_docs(self, mock_docs):
def test_get_required_docs(self, mock_docs, mock_details):
app.config['PB_ENABLED'] = True
# mock out the protocol builder
docs_response = self.protocol_builder_response('required_docs.json')
mock_docs.return_value = json.loads(docs_response)
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
user = self.create_user_with_study_and_workflow()
studies = StudyService.get_studies_for_user(user)
studies = StudyService().get_studies_for_user(user)
study = studies[0]

View File

@ -11,6 +11,8 @@ from crc.models.protocol_builder import ProtocolBuilderStatus
from crc.models.study import StudySchema, StudyModel, StudyStatus
from crc.models.user import UserModel
from unittest.mock import patch
class TestAuthentication(BaseTest):
admin_uid = 'dhf8r'
@ -204,7 +206,10 @@ class TestAuthentication(BaseTest):
user_data = json.loads(rv.get_data(as_text=True))
self.assertEqual(len(user_data), len(all_users))
def test_admin_can_impersonate_another_user(self):
@patch('crc.services.protocol_builder.ProtocolBuilderService.get_study_details') # mock_details
def test_admin_can_impersonate_another_user(self, mock_details):
details_response = self.protocol_builder_response('study_details.json')
mock_details.return_value = json.loads(details_response)
# Switch production mode on
app.config['PRODUCTION'] = True