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.study import StudyEvent, StudyModel, StudySchema, StudyStatus, StudyEventType, StudyAssociated
from crc.models.workflow import WorkflowModel from crc.models.workflow import WorkflowModel
from crc.services.workflow_processor import WorkflowProcessor 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 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["total_tasks"])
self.assertEqual(0, workflow["completed_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): def test_get_study_has_details_about_files(self):
# Set up the study and attach a file to it. # Set up the study and attach a file to it.