mirror of
https://github.com/sartography/spiff-arena.git
synced 2025-01-18 13:31:08 +00:00
0892db6fa7
git-subtree-dir: SpiffWorkflow git-subtree-split: 63db3e45947ec66b8d0efc2c74064004f8ff482c
119 lines
4.7 KiB
Python
119 lines
4.7 KiB
Python
import os
|
|
import unittest
|
|
|
|
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
|
|
from SpiffWorkflow.bpmn.serializer.BpmnSerializer import BpmnSerializer
|
|
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
|
|
from .BpmnLoaderForTests import TestBpmnParser
|
|
|
|
|
|
class BpmnSerializerTest(unittest.TestCase):
|
|
CORRELATE = BpmnSerializer
|
|
|
|
def load_workflow_spec(self, filename, process_name):
|
|
f = os.path.join(os.path.dirname(__file__), 'data', filename)
|
|
parser = TestBpmnParser()
|
|
parser.add_bpmn_files_by_glob(f)
|
|
top_level_spec = parser.get_spec(process_name)
|
|
subprocesses = parser.get_subprocess_specs(process_name)
|
|
return top_level_spec, subprocesses
|
|
|
|
def setUp(self):
|
|
super(BpmnSerializerTest, self).setUp()
|
|
self.serializer = BpmnSerializer()
|
|
self.spec, subprocesses = self.load_workflow_spec('random_fact.bpmn', 'random_fact')
|
|
self.workflow = BpmnWorkflow(self.spec, subprocesses)
|
|
|
|
def testDeserializeWorkflowSpec(self):
|
|
self.assertIsNotNone(self.spec)
|
|
|
|
def testSerializeWorkflowSpec(self):
|
|
spec_serialized = self.serializer.serialize_workflow_spec(self.spec)
|
|
result = self.serializer.deserialize_workflow_spec(spec_serialized)
|
|
spec_serialized2 = self.serializer.serialize_workflow_spec(result)
|
|
self.assertEqual(spec_serialized, spec_serialized2)
|
|
|
|
def testSerializeWorkflow(self):
|
|
json = self.serializer.serialize_workflow(self.workflow)
|
|
print(json)
|
|
|
|
def testDeserializeWorkflow(self):
|
|
self._compare_with_deserialized_copy(self.workflow)
|
|
|
|
def testDeserializeCallActivityChildren(self):
|
|
"""Tested as a part of deserialize workflow."""
|
|
pass
|
|
|
|
def testSerializeTask(self):
|
|
json = self.serializer.serialize_workflow(self.workflow)
|
|
print(json)
|
|
|
|
def testDeserializeTask(self):
|
|
self._compare_with_deserialized_copy(self.workflow)
|
|
|
|
def testDeserializeActiveWorkflow(self):
|
|
self.workflow.do_engine_steps()
|
|
self._compare_with_deserialized_copy(self.workflow)
|
|
|
|
def testDeserializeWithData(self):
|
|
self.workflow.data["test"] = "my_test"
|
|
json = self.serializer.serialize_workflow(self.workflow)
|
|
wf2 = self.serializer.deserialize_workflow(json, workflow_spec=self.spec)
|
|
self.assertEqual('my_test', wf2.get_data("test"))
|
|
|
|
def testDeserializeWithDefaultScriptEngineClass(self):
|
|
json = self.serializer.serialize_workflow(self.workflow)
|
|
wf2 = self.serializer.deserialize_workflow(json, workflow_spec=self.spec)
|
|
self.assertIsNotNone(self.workflow.script_engine)
|
|
self.assertIsNotNone(wf2.script_engine)
|
|
self.assertEqual(self.workflow.script_engine.__class__,
|
|
wf2.script_engine.__class__)
|
|
|
|
@unittest.skip("Deserialize does not persist the script engine, Fix me.")
|
|
def testDeserializeWithCustomScriptEngine(self):
|
|
class CustomScriptEngine(PythonScriptEngine):
|
|
pass
|
|
|
|
self.workflow.script_engine = CustomScriptEngine()
|
|
json = self.serializer.serialize_workflow(self.workflow)
|
|
wf2 = self.serializer.deserialize_workflow(json, workflow_spec=self.spec)
|
|
self.assertEqual(self.workflow.script_engine.__class__,
|
|
wf2.script_engine.__class__)
|
|
|
|
def testDeserializeWithDataOnTask(self):
|
|
self.workflow.do_engine_steps()
|
|
user_task = self.workflow.get_ready_user_tasks()[0]
|
|
user_task.data = {"test":"my_test"}
|
|
self._compare_with_deserialized_copy(self.workflow)
|
|
|
|
def testLastTaskIsSetAndWorksThroughRestore(self):
|
|
self.workflow.do_engine_steps()
|
|
json = self.serializer.serialize_workflow(self.workflow)
|
|
wf2 = self.serializer.deserialize_workflow(json, workflow_spec=self.spec)
|
|
self.assertIsNotNone(self.workflow.last_task)
|
|
self.assertIsNotNone(wf2.last_task)
|
|
self._compare_workflows(self.workflow, wf2)
|
|
|
|
def _compare_with_deserialized_copy(self, wf):
|
|
json = self.serializer.serialize_workflow(wf)
|
|
wf2 = self.serializer.deserialize_workflow(json, workflow_spec=self.spec)
|
|
self._compare_workflows(wf, wf2)
|
|
|
|
def _compare_workflows(self, w1, w2):
|
|
self.assertIsInstance(w1, BpmnWorkflow)
|
|
self.assertIsInstance(w2, BpmnWorkflow)
|
|
self.assertEqual(w1.data, w2.data)
|
|
self.assertEqual(w1.name, w2.name)
|
|
for task in w1.get_ready_user_tasks():
|
|
w2_task = w2.get_task(task.id)
|
|
self.assertIsNotNone(w2_task)
|
|
self.assertEqual(task.data, w2_task.data)
|
|
|
|
|
|
def suite():
|
|
return unittest.TestLoader().loadTestsFromTestCase(BpmnSerializerTest)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.TextTestRunner(verbosity=2).run(suite())
|