Projet

Général

Profil

0001-forms-don-t-mark-missing-fields-for-live-conditions-.patch

Frédéric Péters, 08 juillet 2019 17:10

Télécharger (2,83 ko)

Voir les différences:

Subject: [PATCH] forms: don't mark missing fields for live conditions (#34502)

 tests/test_form_pages.py | 40 ++++++++++++++++++++++++++++++++++++++++
 wcs/formdef.py           |  4 +++-
 2 files changed, 43 insertions(+), 1 deletion(-)
tests/test_form_pages.py
6625 6625
    live_resp = app.post(live_url, params=resp.form.submit_fields())
6626 6626
    assert live_resp.json['result']['2']['visible']
6627 6627
    assert live_resp.json['result']['2']['content'] == '<p>value is test</p>'
6628

  
6629
def test_frontoffice_workflow_form_with_impossible_condition(pub):
6630
    user = create_user(pub)
6631
    wf = Workflow.get_default_workflow()
6632
    wf.id = '2'
6633
    wf.store()
6634
    wf = Workflow.get(wf.id)
6635
    status = wf.get_status('new')
6636
    status.items = []
6637
    display_form = FormWorkflowStatusItem()
6638
    display_form.id = '_display_form'
6639
    display_form.by = ['_submitter']
6640
    display_form.varname = 'blah'
6641
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
6642
    display_form.formdef.fields = [
6643
            fields.StringField(id='1', label='Test', varname='str', type='string',
6644
                condition={'type': 'django', 'value': '0 == 1'}),
6645
            fields.StringField(id='2', label='Test2', type='string',
6646
                condition={'type': 'django', 'value': 'blah_var_str == "toto"'}),
6647
    ]
6648
    status.items.append(display_form)
6649
    display_form.parent = status
6650

  
6651
    wf.store()
6652
    formdef = create_formdef()
6653
    formdef.workflow_id = wf.id
6654
    formdef.fields = []
6655
    formdef.store()
6656

  
6657
    formdef.data_class().wipe()
6658

  
6659
    formdata = formdef.data_class()()
6660
    formdata.user_id = user.id
6661
    formdata.status = 'wf-new'
6662
    formdata.store()
6663

  
6664
    app = login(get_app(pub), username='foo', password='foo')
6665
    resp = app.get(formdata.get_url(backoffice=False))
6666
    assert 'f1' not in resp.form.fields
6667
    assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'
wcs/formdef.py
661 661

  
662 662
        for field in fields:
663 663
            if field.varname in live_condition_fields:
664
                form.get_widget('f%s' % field.id).live_condition_source = True
664
                widget = form.get_widget('f%s' % field.id)
665
                if widget:
666
                    widget.live_condition_source = True
665 667

  
666 668
    def get_field_data(self, field, widget):
667 669
        d = {}
668
-