workflows: don't crash on display form action with undefined form (#49187)

This commit is contained in:
Frédéric Péters 2020-12-07 20:16:01 +01:00
parent 7169bd0ee9
commit 11443ea25b
2 changed files with 43 additions and 0 deletions

View File

@ -4450,6 +4450,47 @@ def test_formdata_generated_document_in_private_history(pub):
assert 'Form exported in a model' in resp.text
def test_formdata_empty_form_action(pub):
create_user(pub)
wf = Workflow(name='status')
st1 = wf.add_status('Status1', 'st1')
wf.add_status('Status2', 'st2')
display_form = FormWorkflowStatusItem()
display_form.id = '_x'
display_form.by = ['_submitter']
display_form.varname = 'xxx'
st1.items.append(display_form)
display_form.parent = st1
jump1 = ChoiceWorkflowStatusItem()
jump1.id = '_jump1'
jump1.label = 'Jump 1'
jump1.by = ['_submitter']
jump1.status = 'st2'
jump1.parent = st1
st1.items.append(jump1)
wf.store()
formdef = create_formdef()
formdef.workflow_id = wf.id
formdef.fields = []
formdef.store()
formdef.data_class().wipe()
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
resp = resp.forms[0].submit('submit')
assert 'Check values then click submit.' in resp.text
resp = resp.forms[0].submit('submit')
assert resp.status_int == 302
resp = resp.follow()
assert 'The form has been recorded' in resp.text
resp = resp.form.submit('button_jump1')
assert formdef.data_class().select()[0].status == 'wf-st2'
def test_formdata_form_file_download(pub):
create_user(pub)
wf = Workflow(name='status')

View File

@ -191,6 +191,8 @@ class FormWorkflowStatusItem(WorkflowStatusItem):
FormPage.apply_field_prefills({}, form, fields)
def evaluate_live_form(self, form, formdata, user):
if not self.formdef:
return
workflow_data = {}
for k, v in get_dict_with_varnames(
self.formdef.fields, self.formdef.get_data(form),