workflows: ensure variables are reevaluated for new backoffice fields (#22748)
This commit is contained in:
parent
dda274abd1
commit
e7fabe042e
|
@ -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'
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue