Projet

Général

Profil

0001-forms-fix-TableListRowsWidget-to-keep-track-of-added.patch

Frédéric Péters, 20 mai 2016 15:50

Télécharger (3,79 ko)

Voir les différences:

Subject: [PATCH] forms: fix TableListRowsWidget to keep track of added rows
 (#11007)

 tests/test_widgets.py | 17 +++++++++++++++++
 wcs/qommon/form.py    | 27 +++++++++++++++------------
 2 files changed, 32 insertions(+), 12 deletions(-)
tests/test_widgets.py
124 124
    widget = TableListRowsWidget('test', columns=['a', 'b', 'c'], required=True)
125 125
    assert not widget.has_error()
126 126

  
127
def test_table_list_rows_set_many_values():
128
    widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
129
    form = MockHtmlForm(widget)
130
    req.form = {}
131
    widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
132
    widget.set_value([(str(x), None, None) for x in range(10)])
133
    form = MockHtmlForm(widget)
134
    for row in range(10):
135
        assert req.form['test$element%d$col%d' % (row, 0)] == str(row)
136
        for col in range(3):
137
            assert 'test$element%d$col%d' % (row, col) in form.as_html
138
    assert not 'test$element%d$col%d' % (10, 0) in form.as_html
139

  
140
    mock_form_submission(req, widget, click='test$add_element')
141
    widget = TableListRowsWidget('test', columns=['a', 'b', 'c'])
142
    form = MockHtmlForm(widget)
143
    assert 'test$element%d$col%d' % (10, 0) in form.as_html
127 144

  
128 145
def test_passwordentry_widget_success():
129 146
    widget = PasswordEntryWidget('test')
wcs/qommon/form.py
1585 1585
        setattr(klass, 'columns', columns)
1586 1586
        return klass
1587 1587

  
1588
    def add_element(self, value=None):
1589
        name = "element%d" % len(self.element_names)
1590
        self.add(self.table_row_class, name, value=value, **self.widget_kwargs)
1591
        self.element_names.append(name)
1592
        self.get_widget('added_elements').value = len(self.element_names)
1593

  
1588 1594
    def __init__(self, name, value=None, columns=None, min_rows=5, **kwargs):
1589
        table_row_class = self.create_row_class(columns)
1590
        widget_kwargs = {}
1595
        self.table_row_class = self.create_row_class(columns)
1596
        self.widget_kwargs = {}
1591 1597
        if kwargs.has_key('readonly'):
1592 1598
            del kwargs['readonly']
1593 1599
            self.readonly = True
1594
            widget_kwargs['readonly'] = 'readonly'
1595
        WidgetListAsTable.__init__(self, name, value, element_type=table_row_class,
1596
                        element_kwargs=widget_kwargs, **kwargs)
1600
            self.widget_kwargs['readonly'] = 'readonly'
1601
        WidgetListAsTable.__init__(self, name, value,
1602
                element_type=self.table_row_class,
1603
                element_kwargs=self.widget_kwargs, **kwargs)
1597 1604
        self.columns = columns
1598 1605

  
1599
        def add_element(value=None):
1600
            name = "element%d" % len(self.element_names)
1601
            self.add(table_row_class, name, value=value, **widget_kwargs)
1602
            self.element_names.append(name)
1603

  
1604 1606
        while len(self.element_names) < min_rows:
1605
            add_element()
1606
            self.get_widget('added_elements').value += 1
1607
            self.add_element()
1607 1608

  
1608 1609
        self.set_value(value)
1609 1610

  
......
1648 1649
        self.value = value
1649 1650
        if not value:
1650 1651
            return
1652
        while len(self.element_names) < len(value):
1653
            self.add_element()
1651 1654
        for i, row_name in enumerate(self.element_names):
1652 1655
            widget_row = self.get_widget(row_name)
1653 1656
            for j, column in enumerate(self.columns):
1654
-