mirror of
https://github.com/sartography/cr-connect-workflow.git
synced 2025-02-22 20:58:28 +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.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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user