diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py
index 767511fb1..c16868ed3 100644
--- a/tests/test_form_pages.py
+++ b/tests/test_form_pages.py
@@ -1270,6 +1270,28 @@ def test_form_display_locations(pub):
assert 'plop3' in resp.text
assert 'Bla bla bla' in resp.text
+def test_multipage_form_display_locations(pub):
+ formdef = create_formdef()
+ formdef.fields = [
+ fields.PageField(id='0', label='1st page', type='page'),
+ fields.StringField(id='1', label='string1', display_locations=[]),
+ fields.PageField(id='2', label='2nd page', type='page'),
+ fields.CommentField(id='3', label='Bla bla bla', type='comment', display_locations=['validation']),
+ ]
+ formdef.store()
+ formdef.data_class().wipe()
+
+ resp = get_app(pub).get('/test/')
+ resp.form['f1'] = 'plop1'
+ resp = resp.form.submit('submit') # -> page 2
+ resp = resp.form.submit('submit') # -> validation
+
+ pq = resp.pyquery.remove_namespaces()
+ assert not '
%s
' % field.label)))
- on_page = field
- current_page_fields = []
+ if current_page['disabled']:
continue
- if field.type == 'title' and on_page and (
- not current_page_fields and
- on_page.label == field.label):
+ if field.type == 'title' and (
+ not current_page['fields'] and
+ current_page['page'].label == field.label):
# don't include first title of a page if that title has the
# same text as the page.
continue
- if field.type == 'comment' and not field.include_in_validation_page:
+ if field.type in ('title', 'subtitle', 'comment') and not field.include_in_validation_page:
# don't render field that wouldn't be displayed.
continue
if not field.is_visible(dict, self):
continue
- current_page_fields.append(field)
- value = dict.get(field.id)
+ current_page['fields'].append(field)
- if not field.include_in_validation_page:
- form.widgets.append(HtmlWidget(htmltext('
')))
- field.add_to_view_form(form, value)
- form.widgets.append(HtmlWidget(htmltext('
')))
- else:
- field.add_to_view_form(form, value)
+ # 2nd pass to create view form
+ for page in pages:
+ visible_contents = False
+ if page['fields'] and any([x.include_in_validation_page for x in page['fields']]):
+ visible_contents = True
+ form.widgets.append(HtmlWidget(htmltext('
')))
+ if page['page'].label:
+ form.widgets.append(HtmlWidget(htmltext('
%s
') % page['page'].label))
+ form.widgets.append(HtmlWidget(htmltext('
')))
- if on_page:
- form.widgets.append(HtmlWidget(htmltext('
')))
+ for field in page['fields']:
+ value = dict.get(field.id)
+ if not field.include_in_validation_page:
+ form.widgets.append(HtmlWidget(htmltext('
')))
+ field.add_to_view_form(form, value)
+ form.widgets.append(HtmlWidget(htmltext('
')))
+ else:
+ field.add_to_view_form(form, value)
+
+ if visible_contents:
+ form.widgets.append(HtmlWidget(htmltext('
')))
return form