forms: don't mark missing fields for live conditions (#34502)

This commit is contained in:
Frédéric Péters 2019-07-08 17:09:20 +02:00
parent 3343f32bf0
commit fae19b4a9c
2 changed files with 43 additions and 1 deletions

View File

@ -6625,3 +6625,43 @@ def test_frontoffice_workflow_form_with_dynamic_comment(pub):
live_resp = app.post(live_url, params=resp.form.submit_fields())
assert live_resp.json['result']['2']['visible']
assert live_resp.json['result']['2']['content'] == '<p>value is test</p>'
def test_frontoffice_workflow_form_with_impossible_condition(pub):
user = create_user(pub)
wf = Workflow.get_default_workflow()
wf.id = '2'
wf.store()
wf = Workflow.get(wf.id)
status = wf.get_status('new')
status.items = []
display_form = FormWorkflowStatusItem()
display_form.id = '_display_form'
display_form.by = ['_submitter']
display_form.varname = 'blah'
display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
display_form.formdef.fields = [
fields.StringField(id='1', label='Test', varname='str', type='string',
condition={'type': 'django', 'value': '0 == 1'}),
fields.StringField(id='2', label='Test2', type='string',
condition={'type': 'django', 'value': 'blah_var_str == "toto"'}),
]
status.items.append(display_form)
display_form.parent = status
wf.store()
formdef = create_formdef()
formdef.workflow_id = wf.id
formdef.fields = []
formdef.store()
formdef.data_class().wipe()
formdata = formdef.data_class()()
formdata.user_id = user.id
formdata.status = 'wf-new'
formdata.store()
app = login(get_app(pub), username='foo', password='foo')
resp = app.get(formdata.get_url(backoffice=False))
assert 'f1' not in resp.form.fields
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'

View File

@ -658,7 +658,9 @@ class FormDef(StorableObject):
for field in fields:
if field.varname in live_condition_fields:
form.get_widget('f%s' % field.id).live_condition_source = True
widget = form.get_widget('f%s' % field.id)
if widget:
widget.live_condition_source = True
def get_field_data(self, field, widget):
d = {}