mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-23 13:18:35 +00:00
Improving the study_info script documentation to provide detailed examples of values returned based on arguments. Making the tests a little more targetted and less subject to breaking through better mocks. Allow all tests to pass even when ther protocol builder mock isn't running locally. Removing the duplication of reference files in tests and static, as this seems silly to me at the moment.
77 lines
3.3 KiB
Python
77 lines
3.3 KiB
Python
import json
|
|
from unittest.mock import patch
|
|
|
|
from crc import db, session
|
|
from crc.api.common import ApiError
|
|
from crc.models.file import FileDataModel, FileModel
|
|
from crc.models.protocol_builder import ProtocolBuilderRequiredDocumentSchema
|
|
from crc.models.study import StudyModel
|
|
from crc.scripts.study_info import StudyInfo
|
|
from crc.services.file_service import FileService
|
|
from crc.services.study_service import StudyService
|
|
from crc.services.workflow_processor import WorkflowProcessor
|
|
from tests.base_test import BaseTest
|
|
|
|
|
|
class TestStudyDetailsDocumentsScript(BaseTest):
|
|
test_uid = "dhf8r"
|
|
test_study_id = 1
|
|
|
|
"""
|
|
1. get a list of all documents related to the study.
|
|
2. For this study, is this document required accroding to the protocol builder?
|
|
3. For ALL uploaded documents, what the total number of files that were uploaded? per instance of this document naming
|
|
convention that we are implementing for the IRB.
|
|
"""
|
|
|
|
@patch('crc.services.protocol_builder.requests.get')
|
|
def test_validate_returns_error_if_reference_files_do_not_exist(self, mock_get):
|
|
mock_get.return_value.ok = True
|
|
mock_get.return_value.text = self.protocol_builder_response('required_docs.json')
|
|
|
|
self.load_example_data()
|
|
self.create_reference_document()
|
|
study = session.query(StudyModel).first()
|
|
workflow_spec_model = self.load_test_spec("two_forms")
|
|
workflow_model = StudyService._create_workflow_model(study, workflow_spec_model)
|
|
processor = WorkflowProcessor(workflow_model)
|
|
task = processor.next_task()
|
|
|
|
# Remove the reference file.
|
|
file_model = db.session.query(FileModel). \
|
|
filter(FileModel.is_reference == True). \
|
|
filter(FileModel.name == FileService.DOCUMENT_LIST).first()
|
|
if file_model:
|
|
db.session.query(FileDataModel).filter(FileDataModel.file_model_id == file_model.id).delete()
|
|
db.session.query(FileModel).filter(FileModel.id == file_model.id).delete()
|
|
db.session.commit()
|
|
db.session.flush()
|
|
|
|
with self.assertRaises(ApiError):
|
|
StudyInfo().do_task_validate_only(task, study.id, "documents")
|
|
|
|
@patch('crc.services.protocol_builder.requests.get')
|
|
def test_no_validation_error_when_correct_file_exists(self, mock_get):
|
|
|
|
mock_get.return_value.ok = True
|
|
mock_get.return_value.text = self.protocol_builder_response('required_docs.json')
|
|
|
|
self.load_example_data()
|
|
self.create_reference_document()
|
|
study = session.query(StudyModel).first()
|
|
workflow_spec_model = self.load_test_spec("two_forms")
|
|
workflow_model = StudyService._create_workflow_model(study, workflow_spec_model)
|
|
processor = WorkflowProcessor(workflow_model)
|
|
task = processor.next_task()
|
|
StudyInfo().do_task_validate_only(task, study.id, "documents")
|
|
|
|
def test_load_lookup_data(self):
|
|
self.create_reference_document()
|
|
dict = FileService.get_reference_data(FileService.DOCUMENT_LIST, 'code', ['id'])
|
|
self.assertIsNotNone(dict)
|
|
|
|
def get_required_docs(self):
|
|
string_data = self.protocol_builder_response('required_docs.json')
|
|
return ProtocolBuilderRequiredDocumentSchema(many=True).loads(string_data)
|
|
|