From bebbfc52055c3a01efda5091759503b017488e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 13 Jul 2018 10:24:06 +0200 Subject: [PATCH] forms: use proper pages calculation to know if page number is out (#25263) --- tests/test_backoffice_pages.py | 38 ++++++++++++++++++++++++++++++++++ wcs/forms/root.py | 6 +----- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/tests/test_backoffice_pages.py b/tests/test_backoffice_pages.py index 006ef60d..3cf142c5 100644 --- a/tests/test_backoffice_pages.py +++ b/tests/test_backoffice_pages.py @@ -2131,6 +2131,44 @@ def test_backoffice_submission_prefill_user_multiple_pages(pub): assert formdef.data_class().count() == 1 assert formdef.data_class().select()[0].user_id is None +def test_backoffice_submission_multiple_page_restore_on_validation(pub): + user = create_user(pub) + create_environment(pub) + other_user = pub.user_class(name='other user') + other_user.email = 'other@example.net' + other_user.store() + + formdef = FormDef.get_by_urlname('form-title') + formdef.fields = [ + fields.PageField(id='0', label='1st page', type='page'), + fields.StringField(id='1', label='1st field', type='string', required=False), + fields.PageField(id='2', label='2nd page', type='page', + condition={'type': 'python', 'value': 'False'}), + fields.PageField(id='3', label='3rd page', type='page'), + fields.StringField(id='5', label='field on 3rd page'), + ] + formdef.backoffice_submission_roles = user.roles[:] + formdef.enable_tracking_codes = True + formdef.store() + + formdef.data_class().wipe() + + app = login(get_app(pub)) + resp = app.get('/backoffice/submission/form-title/') + resp.form['f1'] = 'foo' + resp = resp.form.submit('submit') + resp.form['f5'] = 'bar' + resp = resp.form.submit('submit') + assert 'Check values then click submit.' in resp.body + + assert formdef.data_class().count() == 1 + formdata = formdef.data_class().select()[0] + # restore draft + resp = app.get('/backoffice/submission/') + resp = resp.click(href='form-title/%s' % formdata.id) + resp = resp.follow() + assert 'Check values then click submit.' in resp.body + def test_backoffice_submission_substitution_vars(pub): user = create_user(pub) create_environment(pub) diff --git a/wcs/forms/root.py b/wcs/forms/root.py index 24af84ab..6344ca4b 100644 --- a/wcs/forms/root.py +++ b/wcs/forms/root.py @@ -189,10 +189,6 @@ class FormPage(Directory, FormTemplateMixin): self.code = TrackingCodesDirectory(self.formdef) self.action_url = '.' self.edit_mode = False - - self.page_number = len([ - x for x in self.formdef.fields[1:] if x.type == 'page']) + 1 - self.user = get_request().user get_response().breadcrumb.append( (component + '/', self.formdef.name) ) @@ -629,7 +625,7 @@ class FormPage(Directory, FormTemplateMixin): if 'page_no' in data and int(data['page_no']) != 0: page_no = int(data['page_no']) del data['page_no'] - if page_no == -1 or page_no >= self.page_number: + if page_no == -1 or page_no >= len(self.pages): req = get_request() for k, v in data.items(): req.form['f%s' % k] = v -- 2.18.0