Projet

Général

Profil

0001-forms-don-t-display-errors-after-add-row-is-clicked-.patch

Frédéric Péters, 03 juin 2020 08:44

Télécharger (3,72 ko)

Voir les différences:

Subject: [PATCH] forms: don't display errors after "add row" is clicked
 (#43551)

 tests/test_form_pages.py | 18 ++++++++++++++++++
 wcs/forms/root.py        | 13 +++++++++----
 2 files changed, 27 insertions(+), 4 deletions(-)
tests/test_form_pages.py
3294 3294
    resp = get_app(pub).get('/test/')
3295 3295

  
3296 3296

  
3297
def test_form_table_rows_add_row(pub):
3298
    formdef = create_formdef()
3299
    formdef.fields = [
3300
        fields.StringField(id='1', label='string', require=True),
3301
        fields.TableRowsField(id='0', label='table', type='tablerows', columns=['a', 'b'], required=True),
3302
    ]
3303
    formdef.store()
3304
    formdef.data_class().wipe()
3305

  
3306
    resp = get_app(pub).get('/test/')
3307
    assert resp.form['f0$added_elements'].value == '5'
3308
    resp = resp.form.submit('f0$add_element')
3309
    assert resp.form['f0$added_elements'].value == '6'
3310
    assert 'There were errors processing the form' not in resp
3311
    resp = resp.form.submit('submit')
3312
    assert 'There were errors processing the form' in resp
3313

  
3314

  
3297 3315
def test_formdata_attachment_download(pub):
3298 3316
    create_user(pub)
3299 3317
    wf = Workflow(name='status')
wcs/forms/root.py
292 292
                  'current_page_no': current_position,
293 293
                })
294 294

  
295
    def page(self, page, page_change=True, page_error_messages=None):
295
    def page(self, page, page_change=True, page_error_messages=None, submit_button=None):
296 296
        displayed_fields = []
297 297

  
298 298
        session = get_session()
......
302 302
            self.feed_current_data(magictoken)
303 303

  
304 304
        form = self.create_form(page, displayed_fields)
305
        if submit_button is True:
306
            # submit_button at True means a non-submitting button has been
307
            # clicked; details in [ADD_ROW_BUTTON].
308
            form.clear_errors()
305 309
        if page_error_messages:
306 310
            form.add_global_errors(page_error_messages)
307 311
        if getattr(session, 'ajax_form_token', None):
......
738 742
                            return self.validating(data)
739 743
                    else:
740 744
                        page_no = 0
741
                    return self.page(self.pages[page_no], True)
745
                    return self.page(self.pages[page_no], page_change=True)
742 746
            self.feed_current_data(None)
743 747
            if not self.pages:
744 748
                raise errors.TraversalError()
......
857 861
            # form.get_submit() returns the name of the clicked button, and
858 862
            # it will return True if the form has been submitted, but not
859 863
            # by clicking on a submit widget; for example if an "add row"
860
            # button is clicked.
864
            # button is clicked. [ADD_ROW_BUTTON]
861 865
            if form.has_errors() or form.get_submit() is True:
862 866
                return self.page(page, page_change=False,
863
                        page_error_messages=page_error_messages)
867
                        page_error_messages=page_error_messages,
868
                        submit_button=form.get_submit())
864 869

  
865 870
            form_data = session.get_by_magictoken(magictoken, {})
866 871
            with get_publisher().substitutions.temporary_feed(
867
-