Projet

Général

Profil

0001-forms-remove-extraneous-empty-table-rows-11045.patch

Frédéric Péters, 31 mars 2017 11:54

Télécharger (3,39 ko)

Voir les différences:

Subject: [PATCH] forms: remove extraneous empty table rows (#11045)

 tests/test_form_pages.py | 36 ++++++++++++++++++++++++++++++++++++
 wcs/qommon/form.py       | 12 ++++++++++++
 2 files changed, 48 insertions(+)
tests/test_form_pages.py
841 841
    resp = resp.forms[0].submit('submit')
842 842
    assert 'Check values then click submit.' in resp.body
843 843

  
844
def test_form_multi_page_table_with_rows(pub):
845
    formdef = create_formdef()
846
    formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
847
            fields.PageField(id='2', label='2nd page', type='page'),
848
            fields.TableRowsField(id='1', label='table', columns=['a', 'b'])
849
            ]
850
    formdef.store()
851
    page = get_app(pub).get('/test/')
852
    formdef.data_class().wipe()
853
    page = page.form.submit('submit')
854
    page.form['f1$element0$col0'] = 'bar1'
855
    page.form['f1$element1$col0'] = 'bar2'
856
    page.form['f1$element2$col0'] = 'bar3'
857
    page.form['f1$element3$col0'] = 'bar4'
858
    page.form['f1$element4$col0'] = 'bar5'
859
    page = page.form.submit('f1$add_element')
860
    assert not  'Check values then click submit.' in page.body
861
    page.form['f1$element5$col0'] = 'bar6'
862
    page = page.form.submit('f1$add_element')
863
    assert not  'Check values then click submit.' in page.body
864
    page.form['f1$element6$col0'] = 'bar7'
865
    page = page.form.submit('submit')
866
    assert 'Check values then click submit.' in page.body
867
    page = page.forms[0].submit('previous')
868
    page = page.forms[0].submit('submit')
869
    assert 'Check values then click submit.' in page.body
870
    assert not 'f1$element7$col0' in page.body
871
    page = page.forms[0].submit('submit')
872
    assert page.status_int == 302
873
    page = page.follow()
874
    assert 'The form has been recorded' in page.body
875
    assert formdef.data_class().count() == 1
876
    data_id = formdef.data_class().select()[0].id
877
    data = formdef.data_class().get(data_id)
878
    assert data.data == {'1': [['bar%s' % x, ''] for x in range(1, 8)]}
879

  
844 880
def test_form_submit_with_user(pub, emails):
845 881
    create_user(pub)
846 882
    formdef = create_formdef()
wcs/qommon/form.py
1677 1677

  
1678 1678
        self.set_value(value)
1679 1679

  
1680
        # WidgetList.__init__ added as many extra rows as what there is in
1681
        # name$added_elements, but this is on top of the existing rows,
1682
        # making it quite an unnecessary number of empty rows.
1683
        # fixup this so that we don't have more than one empty row.
1684
        if value:
1685
            for i, element_name in enumerate(self.element_names[:]):
1686
                if i < len(value):
1687
                    continue
1688
                self.element_names.remove(element_name)
1689
                self.widgets.remove(self.get_widget(element_name))
1690
                del self._names[element_name]
1691

  
1680 1692
    def parse(self, request=None):
1681 1693
        WidgetListAsTable.parse(self, request=request)
1682 1694
        if request is None:
1683
-