4934 |
4934 |
logged_error = LoggedError.select()[0]
|
4935 |
4935 |
assert logged_error.summary == 'Could not find linked "Data" object by id %s' % carddata.id
|
4936 |
4936 |
assert logged_error.exception_class == 'KeyError'
|
|
4937 |
|
|
4938 |
|
|
4939 |
def test_call_external_workflow_with_parent_object(pub):
|
|
4940 |
FormDef.wipe()
|
|
4941 |
CardDef.wipe()
|
|
4942 |
LoggedError.wipe()
|
|
4943 |
|
|
4944 |
# carddef workflow, with global action to increment a counter in its
|
|
4945 |
# backoffice fields.
|
|
4946 |
carddef_wf = Workflow(name='Carddef Workflow')
|
|
4947 |
carddef_wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(carddef_wf)
|
|
4948 |
carddef_wf.backoffice_fields_formdef.fields = [
|
|
4949 |
StringField(id='bo0', varname='bo', type='string', label='bo variable'),
|
|
4950 |
]
|
|
4951 |
increment_global_action = carddef_wf.add_global_action('Update')
|
|
4952 |
increment_global_action.append_item('set-backoffice-fields')
|
|
4953 |
setbo = increment_global_action.items[0]
|
|
4954 |
setbo.fields = [{'field_id': 'bo0',
|
|
4955 |
'value': '{{ form_var_bo|default:"0"|add:1 }}'}]
|
|
4956 |
trigger = increment_global_action.append_trigger('webservice')
|
|
4957 |
trigger.identifier = 'update'
|
|
4958 |
carddef_wf.store()
|
|
4959 |
|
|
4960 |
# associated carddef
|
|
4961 |
carddef = CardDef()
|
|
4962 |
carddef.name = 'Data'
|
|
4963 |
carddef.fields = [
|
|
4964 |
StringField(id='0', label='string', varname='card_string'),
|
|
4965 |
]
|
|
4966 |
carddef.workflow = carddef_wf
|
|
4967 |
carddef.store()
|
|
4968 |
|
|
4969 |
# and sample carddata
|
|
4970 |
carddata = carddef.data_class()()
|
|
4971 |
carddata.data = {'0': 'Text'}
|
|
4972 |
carddata.store()
|
|
4973 |
|
|
4974 |
# formdef workflow that will trigger the global action
|
|
4975 |
wf = Workflow(name='External actions')
|
|
4976 |
wf.add_status('Action')
|
|
4977 |
|
|
4978 |
update_global_action = wf.add_global_action('Update linked object data')
|
|
4979 |
update_action = update_global_action.append_item('external_workflow_global_action')
|
|
4980 |
update_action.slug = 'carddef:%s' % carddef.url_name
|
|
4981 |
update_action.trigger_id = 'action:update'
|
|
4982 |
wf.store()
|
|
4983 |
|
|
4984 |
# associated formdef
|
|
4985 |
formdef = FormDef()
|
|
4986 |
formdef.name = 'External action form'
|
|
4987 |
formdef.fields = [EmailField(id='1', label='Email', varname='email')]
|
|
4988 |
formdef.workflow = wf
|
|
4989 |
formdef.store()
|
|
4990 |
|
|
4991 |
# and formdata
|
|
4992 |
formdata = formdef.data_class()()
|
|
4993 |
formdata.data = {'1': 'foo@example.com'}
|
|
4994 |
formdata.store()
|
|
4995 |
formdata.just_created()
|
|
4996 |
formdata.perform_workflow()
|
|
4997 |
|
|
4998 |
# run, against no parent
|
|
4999 |
perform_items([update_action], formdata)
|
|
5000 |
card = carddef.data_class().get(carddata.id)
|
|
5001 |
assert 'bo0' not in card.data # not called
|
|
5002 |
|
|
5003 |
# other parent
|
|
5004 |
formdata.submission_context = {
|
|
5005 |
'orig_object_type': 'formdef',
|
|
5006 |
'orig_formdata_id': str(formdata.id),
|
|
5007 |
'orig_formdef_id': str(formdef.id),
|
|
5008 |
}
|
|
5009 |
formdata.store()
|
|
5010 |
perform_items([update_action], formdata)
|
|
5011 |
card = carddef.data_class().get(carddata.id)
|
|
5012 |
assert 'bo0' not in card.data # not called
|
|
5013 |
|
|
5014 |
# appropriate parent
|
|
5015 |
formdata.submission_context = {
|
|
5016 |
'orig_object_type': 'carddef',
|
|
5017 |
'orig_formdata_id': str(carddata.id),
|
|
5018 |
'orig_formdef_id': str(carddef.id),
|
|
5019 |
}
|
|
5020 |
formdata.store()
|
|
5021 |
perform_items([update_action], formdata)
|
|
5022 |
card = carddef.data_class().get(carddata.id)
|
|
5023 |
assert card.data['bo0'] == '1' # got called
|