From eb30df27a28b22c51fe23436acd45b9529e7a7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 19 May 2015 17:17:02 +0200 Subject: [PATCH] forms: add a "preview" mode for disabled forms (#22) --- tests/test_admin_pages.py | 2 +- tests/test_form_pages.py | 25 +++++++++++++++++++++++++ wcs/admin/forms.py | 5 ++++- wcs/formdef.py | 4 +++- wcs/forms/preview.py | 43 +++++++++++++++++++++++++++++++++++++++++++ wcs/forms/root.py | 12 ++++++++---- wcs/root.py | 4 +++- 7 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 wcs/forms/preview.py diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index 44eab5c..9df1014 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -186,7 +186,7 @@ def test_forms_edit(): # try changing title resp = app.get('/backoffice/forms/1/') - resp = resp.click(href='title') + resp = resp.click('change title') assert resp.forms[0]['name'].value == 'form title' resp.forms[0]['name'] = 'new title' resp = resp.forms[0].submit() diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index c06a9ba..b78bcb3 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -675,3 +675,28 @@ def test_form_count_dispatching(pub): assert len(formdef.data_class().select(clause=lambda x: x.status == 'wf-st2')) == 1 assert len(formdef.data_class().select(clause=lambda x: x.status == 'wf-st1')) == 1 + +def test_preview_form(pub): + user = create_user(pub) + + formdef = create_formdef() + formdef.data_class().wipe() + formdef.fields = [] + formdef.disabled = True + formdef.store() + + # check the preview page is not accessible to regular users + get_app(pub).get('/preview/test/', status=403) + + # check it's accessible to admins + user.is_admin = True + user.store() + page = login(get_app(pub), username='foo', password='foo').get('/preview/test/') + + # check no formdata gets stored + next_page = page.forms[0].submit('submit') + assert 'Check values then click submit.' in next_page.body + next_page = next_page.forms[0].submit('submit') + assert next_page.status_int == 302 + assert next_page.location == 'http://example.net/preview/test/' + assert formdef.data_class().count() == 0 diff --git a/wcs/admin/forms.py b/wcs/admin/forms.py index 4ce189c..da7d975 100644 --- a/wcs/admin/forms.py +++ b/wcs/admin/forms.py @@ -382,7 +382,10 @@ class FormDefPage(Directory): r += htmltext('') r += htmltext('