mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-22 12:48:25 +00:00
Make sure we update workflow state when processing the master workflow
This commit is contained in:
parent
092b71f341
commit
c28e9a5bdd
40
tests/data/test_master_workflow/test_master_workflow.bpmn
Normal file
40
tests/data/test_master_workflow/test_master_workflow.bpmn
Normal 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>
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user