Make sure we update workflow state when processing the master workflow

This commit is contained in:
mike cullerton 2022-05-06 14:09:23 -04:00
parent 092b71f341
commit c28e9a5bdd
2 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1dddfv6" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.2.0">
<bpmn:process id="Process_TestMasterSpec" name="Test Master Spec" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_0bigm8v</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_0bigm8v" sourceRef="StartEvent_1" targetRef="Activity_SetData" />
<bpmn:endEvent id="Event_12j3ks8">
<bpmn:incoming>Flow_0lx0wer</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0lx0wer" sourceRef="Activity_SetData" targetRef="Event_12j3ks8" />
<bpmn:scriptTask id="Activity_SetData" name="Set Master Spec Data">
<bpmn:incoming>Flow_0bigm8v</bpmn:incoming>
<bpmn:outgoing>Flow_0lx0wer</bpmn:outgoing>
<bpmn:script>simple_workflow = {'status':'required','message':'Completion of this workflow is required.'}
empty_workflow = {'status':'locked','message':'This workflow is locked'}</bpmn:script>
</bpmn:scriptTask>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_TestMasterSpec">
<bpmndi:BPMNEdge id="Flow_0lx0wer_di" bpmnElement="Flow_0lx0wer">
<di:waypoint x="360" y="117" />
<di:waypoint x="432" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0bigm8v_di" bpmnElement="Flow_0bigm8v">
<di:waypoint x="188" y="117" />
<di:waypoint x="260" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_12j3ks8_di" bpmnElement="Event_12j3ks8">
<dc:Bounds x="432" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0g468y9_di" bpmnElement="Activity_SetData">
<dc:Bounds x="260" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -15,6 +15,8 @@ from crc.models.task_event import TaskEventModel
from crc.models.study import StudyEvent, StudyModel, StudySchema, StudyStatus, StudyEventType, StudyAssociated
from crc.models.workflow import WorkflowModel
from crc.services.workflow_processor import WorkflowProcessor
from crc.services.workflow_service import WorkflowService
from crc.services.workflow_spec_service import WorkflowSpecService
from crc.services.user_file_service import UserFileService
@ -75,6 +77,34 @@ class TestStudyApi(BaseTest):
self.assertEqual(0, workflow["total_tasks"])
self.assertEqual(0, workflow["completed_tasks"])
def test_get_study_updates_workflow_state(self):
self.load_test_spec('test_master_workflow', master_spec=True)
self.load_test_spec('simple_workflow')
self.load_test_spec('empty_workflow')
study = self.add_test_study()
study_model = session.query(StudyModel).filter_by(id=study["id"]).first()
# We should not have a state yet
workflows = session.query(WorkflowModel).all()
self.assertEqual('simple_workflow', workflows[0].workflow_spec_id)
self.assertEqual('empty_workflow', workflows[1].workflow_spec_id)
self.assertEqual(None, workflows[0].state)
self.assertEqual(None, workflows[1].state)
spec_service = WorkflowSpecService()
master_spec = spec_service.master_spec
master_workflow_results = WorkflowProcessor.run_master_spec(master_spec, study_model)
# This should set the state for simple_workflow to required, and empty_workflow to locked
WorkflowService().update_workflow_state_from_master_workflow(study_model.id, master_workflow_results)
workflows = session.query(WorkflowModel).all()
self.assertEqual('simple_workflow', workflows[0].workflow_spec_id)
self.assertEqual('empty_workflow', workflows[1].workflow_spec_id)
self.assertEqual('required', workflows[0].state)
self.assertEqual('locked', workflows[1].state)
def test_get_study_has_details_about_files(self):
# Set up the study and attach a file to it.