workflows: ensure variables are reevaluated for new backoffice fields (#22748)

This commit is contained in:
Frédéric Péters 2018-03-22 17:46:04 +01:00
parent dda274abd1
commit e7fabe042e
2 changed files with 61 additions and 1 deletions

View File

@ -3238,6 +3238,64 @@ def test_set_backoffice_field_date(two_pubs):
formdata = formdef.data_class().get(formdata.id)
assert formdata.data['bo1'] is None
def test_set_backoffice_field_immediate_use(http_requests, two_pubs):
Workflow.wipe()
FormDef.wipe()
wf = Workflow(name='xxx')
wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
wf.backoffice_fields_formdef.fields = [
StringField(id='bo1', label='1st backoffice field',
type='string', varname='backoffice_blah'),
StringField(id='bo2', label='2nd backoffice field',
type='string', varname='backoffice_barr'),
]
st1 = wf.add_status('Status1')
wf.store()
formdef = FormDef()
formdef.name = 'baz'
formdef.fields = [
StringField(id='00', label='String', type='string', varname='string'),
]
formdef.workflow_id = wf.id
formdef.store()
formdata = formdef.data_class()()
formdata.data = {'00': 'HELLO'}
formdata.just_created()
formdata.store()
item = SetBackofficeFieldsWorkflowStatusItem()
item.parent = st1
item.fields = [
{'field_id': 'bo1', 'value': '{{form_var_string}}'},
]
two_pubs.substitutions.reset()
two_pubs.substitutions.feed(formdata)
item.perform(formdata)
formdata = formdef.data_class().get(formdata.id)
assert formdata.data.get('bo1') == 'HELLO'
item.fields = [
{'field_id': 'bo1', 'value': 'WORLD'},
]
two_pubs.substitutions.reset()
two_pubs.substitutions.feed(formdata)
item.perform(formdata)
formdata = formdef.data_class().get(formdata.id)
assert formdata.data.get('bo1') == 'WORLD'
item.fields = [
{'field_id': 'bo1', 'value': 'X{{form_var_string}}X'},
{'field_id': 'bo2', 'value': "Y{{form_var_backoffice_blah}}Y"},
]
two_pubs.substitutions.reset()
two_pubs.substitutions.feed(formdata)
item.perform(formdata)
formdata = formdef.data_class().get(formdata.id)
assert formdata.data.get('bo1') == 'XHELLOX'
assert formdata.data.get('bo2') == 'YXHELLOXY'
def test_redirect_to_url(pub):
formdef = FormDef()
formdef.name = 'baz'

View File

@ -116,7 +116,9 @@ class SetBackofficeFieldsWorkflowStatusItem(WorkflowStatusItem):
elif formdata.data.has_key('%s_display' % formdef_field.id):
del formdata.data['%s_display' % formdef_field.id]
formdata.store()
# store formdata everytime so substitution cache is invalidated,
# and backoffice field values can be used in subsequent fields.
formdata.store()
def fields_export_to_xml(self, item, charset, include_id=False):
if not self.fields: