Projet

Général

Profil

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

Frédéric Péters, 25 mai 2016 16:36

Télécharger (3,38 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
699 699
    resp = resp.forms[0].submit('submit')
700 700
    assert 'Check values then click submit.' in resp.body
701 701

  
702
def test_form_multi_page_table_with_rows(pub):
703
    formdef = create_formdef()
704
    formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
705
            fields.PageField(id='2', label='2nd page', type='page'),
706
            fields.TableRowsField(id='1', label='table', columns=['a', 'b'])
707
            ]
708
    formdef.store()
709
    page = get_app(pub).get('/test/')
710
    formdef.data_class().wipe()
711
    page = page.form.submit('submit')
712
    page.form['f1$element0$col0'] = 'bar1'
713
    page.form['f1$element1$col0'] = 'bar2'
714
    page.form['f1$element2$col0'] = 'bar3'
715
    page.form['f1$element3$col0'] = 'bar4'
716
    page.form['f1$element4$col0'] = 'bar5'
717
    page = page.form.submit('f1$add_element')
718
    assert not  'Check values then click submit.' in page.body
719
    page.form['f1$element5$col0'] = 'bar6'
720
    page = page.form.submit('f1$add_element')
721
    assert not  'Check values then click submit.' in page.body
722
    page.form['f1$element6$col0'] = 'bar7'
723
    page = page.form.submit('submit')
724
    assert 'Check values then click submit.' in page.body
725
    page = page.forms[0].submit('previous')
726
    page = page.forms[0].submit('submit')
727
    assert 'Check values then click submit.' in page.body
728
    assert not 'f1$element7$col0' in page.body
729
    page = page.forms[0].submit('submit')
730
    assert page.status_int == 302
731
    page = page.follow()
732
    assert 'The form has been recorded' in page.body
733
    assert formdef.data_class().count() == 1
734
    data_id = formdef.data_class().select()[0].id
735
    data = formdef.data_class().get(data_id)
736
    assert data.data == {'1': [['bar%s' % x, ''] for x in range(1, 8)]}
737

  
702 738
def test_form_submit_with_user(pub):
703 739
    create_user(pub)
704 740
    formdef = create_formdef()
wcs/qommon/form.py
1609 1609

  
1610 1610
        self.set_value(value)
1611 1611

  
1612
        # WidgetList.__init__ added as many extra rows as what there is in
1613
        # name$added_elements, but this is on top of the existing rows,
1614
        # making it quite an unnecessary number of empty rows.
1615
        # fixup this so that we don't have more than one empty row.
1616
        if value:
1617
            for i, element_name in enumerate(self.element_names[:]):
1618
                if i < len(value):
1619
                    continue
1620
                self.element_names.remove(element_name)
1621
                self.widgets.remove(self.get_widget(element_name))
1622
                del self._names[element_name]
1623

  
1612 1624
    def parse(self, request=None):
1613 1625
        WidgetListAsTable.parse(self, request=request)
1614 1626
        if request is None:
1615
-