58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
from unittest.mock import patch
|
|
|
|
from crc import session
|
|
from crc.models.api_models import MultiInstanceType
|
|
from crc.models.study import StudyModel
|
|
from crc.models.workflow import WorkflowStatus
|
|
from crc.services.study_service import StudyService
|
|
from crc.services.workflow_processor import WorkflowProcessor
|
|
from crc.services.workflow_service import WorkflowService
|
|
from tests.base_test import BaseTest
|
|
|
|
|
|
class TestWorkflowProcessorLoopingTask(BaseTest):
|
|
"""Tests the Workflow Processor as it deals with a Looping task"""
|
|
|
|
def _populate_form_with_random_data(self, task):
|
|
api_task = WorkflowService.spiff_task_to_api_task(task, add_docs_and_forms=True)
|
|
WorkflowService.populate_form_with_random_data(task, api_task, required_only=False)
|
|
|
|
def get_processor(self, study_model, spec_model):
|
|
workflow_model = StudyService._create_workflow_model(study_model, spec_model)
|
|
return WorkflowProcessor(workflow_model)
|
|
|
|
def test_create_and_complete_workflow(self):
|
|
# This depends on getting a list of investigators back from the protocol builder.
|
|
|
|
workflow = self.create_workflow('looping_task')
|
|
task = self.get_workflow_api(workflow).next_task
|
|
|
|
self.assertEqual("GetNames", task.name)
|
|
|
|
self.assertEqual(task.multi_instance_type, 'looping')
|
|
self.assertEqual(1, task.multi_instance_index)
|
|
self.complete_form(workflow,task,{'GetNames_CurrentVar':{'Name': 'Peter Norvig', 'Nickname': 'Pete'}})
|
|
task = self.get_workflow_api(workflow).next_task
|
|
|
|
self.assertEqual(task.multi_instance_type,'looping')
|
|
self.assertEqual(2, task.multi_instance_index)
|
|
self.complete_form(workflow,
|
|
task,
|
|
{'GetNames_CurrentVar':{'Name': 'Stuart Russell', 'Nickname': 'Stu'}},
|
|
terminate_loop=True)
|
|
|
|
task = self.get_workflow_api(workflow).next_task
|
|
self.assertEqual(task.name,'Event_End')
|
|
self.assertEqual(workflow.completed_tasks,workflow.total_tasks)
|
|
expectedDict = {
|
|
'GetNames_CurrentVar': 2,
|
|
'GetNames': {
|
|
'1': {'Name': 'Peter Norvig', 'Nickname': 'Pete'},
|
|
'2': {'Name': 'Stuart Russell', 'Nickname': 'Stu'}
|
|
}
|
|
}
|
|
self.assert_dict_contains_subset(task.data, expectedDict)
|
|
|
|
|
|
|