Skip to content

Commit

Permalink
Merge pull request #216 from sartography/feature/service_task_b
Browse files Browse the repository at this point in the history
fix for a serialization bug
  • Loading branch information
jbirddog committed Sep 6, 2022
2 parents 32ce3d9 + ae046c5 commit 3896dc0
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 15 deletions.
15 changes: 10 additions & 5 deletions SpiffWorkflow/spiff/parser/task_spec.py
Expand Up @@ -41,12 +41,16 @@ def _parse_servicetask_operator(self, node):
extra_ns = {'spiffworkflow': SPIFFWORKFLOW_MODEL_NS}
xpath = xpath_eval(node, extra_ns)
parameter_nodes = xpath('.//spiffworkflow:parameter')
operator = {'name': name}
parameters = {}
for param_node in parameter_nodes:
# TODO not handling type currently and check if required
if 'value' in param_node.attrib:
parameters[param_node.attrib['id']] = param_node.attrib['value']
return (name, parameters)
parameters[param_node.attrib['id']] = {
'value': param_node.attrib['value'],
'type': param_node.attrib['type']
}
operator['parameters'] = parameters
return operator

def create_task(self):
# The main task parser already calls this, and even sets an attribute, but
Expand Down Expand Up @@ -96,9 +100,10 @@ def create_task(self):
class ServiceTaskParser(SpiffTaskParser):
def create_task(self):
extensions = self.parse_extensions()
(name, params) = extensions.get('serviceTaskOperator')
operator = extensions.get('serviceTaskOperator')
return self.spec_class(
self.spec, self.get_task_spec_name(), name, params,
self.spec, self.get_task_spec_name(),
operator['name'], operator['parameters'],
lane=self.lane, position=self.position)

class BusinessRuleTaskParser(SpiffTaskParser):
Expand Down
15 changes: 10 additions & 5 deletions tests/SpiffWorkflow/spiff/BaseTestCase.py
Expand Up @@ -2,10 +2,14 @@
import os

from SpiffWorkflow.spiff.parser import SpiffBpmnParser
from SpiffWorkflow.spiff.serializer import NoneTaskConverter, ManualTaskConverter, UserTaskConverter, \
SubWorkflowTaskConverter, TransactionSubprocessConverter, CallActivityTaskConverter, \
StartEventConverter, EndEventConverter, BoundaryEventConverter, SendTaskConverter, ReceiveTaskConverter, \
IntermediateCatchEventConverter, IntermediateThrowEventConverter
from SpiffWorkflow.spiff.serializer import NoneTaskConverter, \
ManualTaskConverter, UserTaskConverter, \
SubWorkflowTaskConverter, TransactionSubprocessConverter, \
CallActivityTaskConverter, \
StartEventConverter, EndEventConverter, BoundaryEventConverter, \
SendTaskConverter, ReceiveTaskConverter, \
IntermediateCatchEventConverter, IntermediateThrowEventConverter, \
ServiceTaskConverter
from SpiffWorkflow.dmn.serializer.task_spec_converters import BusinessRuleTaskConverter
from SpiffWorkflow.bpmn.serializer import BpmnWorkflowSerializer

Expand All @@ -15,7 +19,8 @@
NoneTaskConverter, ManualTaskConverter, UserTaskConverter,
SubWorkflowTaskConverter, TransactionSubprocessConverter, CallActivityTaskConverter,
StartEventConverter, EndEventConverter, BoundaryEventConverter, SendTaskConverter, ReceiveTaskConverter,
IntermediateCatchEventConverter, IntermediateThrowEventConverter, BusinessRuleTaskConverter
IntermediateCatchEventConverter, IntermediateThrowEventConverter, BusinessRuleTaskConverter,
ServiceTaskConverter
])

class BaseTestCase(BpmnWorkflowTestCase):
Expand Down
19 changes: 14 additions & 5 deletions tests/SpiffWorkflow/spiff/ServiceTaskTest.py
Expand Up @@ -17,9 +17,9 @@

class SlackWebhookOperator(object):
def __init__(self, webhook_token="", message="", channel="", **kwargs):
self.channel = channel
self.message = message
self.webhook_token = webhook_token
self.channel = channel['value']
self.message = message['value']
self.webhook_token = webhook_token['value']

def execute(self):
assertEqual(self.channel, "#")
Expand All @@ -42,13 +42,22 @@ def setUp(self):

spec, subprocesses = self.load_workflow_spec('service_task.bpmn',
'service_task_example1')
script_engine = ExampleCustomScriptEngine()
self.workflow = BpmnWorkflow(spec, subprocesses, script_engine=script_engine)
self.script_engine = ExampleCustomScriptEngine()
self.workflow = BpmnWorkflow(spec, subprocesses, script_engine=self.script_engine)

def testRunThroughHappy(self):
self.workflow.do_engine_steps()
self.assertTrue(operatorExecuted)

def testRunThroughSaveRestore(self):
self.save_restore()
# Engine isn't preserved through save/restore, so we have to reset it.
self.workflow.script_engine = self.script_engine
self.workflow.do_engine_steps()
self.save_restore()
self.assertTrue(operatorExecuted)


def suite():
return unittest.TestLoader().loadTestsFromTestCase(ServiceTaskTest)
if __name__ == '__main__':
Expand Down

0 comments on commit 3896dc0

Please sign in to comment.