Projet

Général

Profil

0001-form-correctly-ignore-empty-values-in-WidgetList-886.patch

Frédéric Péters, 04 novembre 2015 17:38

Télécharger (3,06 ko)

Voir les différences:

Subject: [PATCH] form: correctly ignore empty values in WidgetList (#8866)

(it used to ignore None but we also want it to ignore '')
 tests/test_admin_pages.py | 40 ++++++++++++++++++++++++++++++++++++++++
 wcs/qommon/form.py        |  9 +++++++++
 2 files changed, 49 insertions(+)
tests/test_admin_pages.py
877 877
    assert resp.body.index('<legend>Additional parameters</legend>') > \
878 878
            resp.body.index('<label for="form_data_source">Data Source</label>')
879 879

  
880
def test_form_edit_item_field(pub):
881
    create_superuser(pub)
882
    create_role()
883

  
884
    FormDef.wipe()
885
    formdef = FormDef()
886
    formdef.name = 'form title'
887
    formdef.fields = [fields.ItemField(id='1', label='1st field', type='item')]
888
    formdef.store()
889

  
890
    app = login(get_app(pub))
891
    resp = app.get('/backoffice/forms/1/')
892
    resp = resp.click(href='fields/')
893
    assert '1st field' in resp.body
894

  
895
    resp = resp.click('Edit', href='1/')
896
    assert resp.forms[0]['label'].value == '1st field'
897
    resp.forms[0]['label'] = 'changed field'
898
    resp.forms[0]['required'] = False
899
    resp = resp.forms[0].submit('items$add_element')
900
    # this adds a second field
901
    assert 'items$element0' in resp.form.fields
902
    assert 'items$element1' in resp.form.fields
903
    # but don't fill anything
904
    resp = resp.forms[0].submit('submit')
905
    assert resp.location == 'http://example.net/backoffice/forms/1/fields/'
906
    resp = resp.follow()
907

  
908
    assert FormDef.get(1).fields[0].label == 'changed field'
909
    assert FormDef.get(1).fields[0].required == False
910
    assert FormDef.get(1).fields[0].items is None
911

  
912
    # edit and fill with one item
913
    resp = resp.click('Edit', href='1/')
914
    assert resp.forms[0]['label'].value == 'changed field'
915
    resp.forms[0]['items$element0'] = 'XXX'
916
    resp = resp.forms[0].submit('submit')
917
    assert resp.location == 'http://example.net/backoffice/forms/1/fields/'
918
    assert FormDef.get(1).fields[0].items == ['XXX']
919

  
880 920
def test_form_legacy_int_id(pub):
881 921
    create_superuser(pub)
882 922
    create_role()
wcs/qommon/form.py
1179 1179
        r += self.render_hint(self.get_hint())
1180 1180
        return r.getvalue()
1181 1181

  
1182
    def _parse(self, request):
1183
        values = []
1184
        for name in self.element_names:
1185
            value = self.get(name)
1186
            if value:
1187
                values.append(value)
1188
        self.value = values or None
1189

  
1190

  
1182 1191
class WidgetDict(quixote.form.widget.WidgetDict):
1183 1192
    # Fix the title and hint setting
1184 1193
    # FIXME: to be fixed in Quixote upstream : title and hint parameters should be removed
1185
-