From e4cd772ea4915275f593190216054e81713657a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 5 Nov 2015 13:11:30 +0100 Subject: [PATCH 4/4] tests: add a bunch of tests on fields (#8878) --- tests/test_admin_pages.py | 40 +++++++++++++++++ tests/test_form_pages.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index e8421c4..71914c1 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -877,6 +877,46 @@ def test_form_edit_field_advanced(pub): assert resp.body.index('Additional parameters') > \ resp.body.index('') +def test_form_edit_item_field(pub): + create_superuser(pub) + create_role() + + FormDef.wipe() + formdef = FormDef() + formdef.name = 'form title' + formdef.fields = [fields.ItemField(id='1', label='1st field', type='item')] + formdef.store() + + app = login(get_app(pub)) + resp = app.get('/backoffice/forms/1/') + resp = resp.click(href='fields/') + assert '1st field' in resp.body + + resp = resp.click('Edit', href='1/') + assert resp.forms[0]['label'].value == '1st field' + resp.forms[0]['label'] = 'changed field' + resp.forms[0]['required'] = False + resp = resp.forms[0].submit('items$add_element') + # this adds a second field + assert 'items$element0' in resp.form.fields + assert 'items$element1' in resp.form.fields + # but don't fill anything + resp = resp.forms[0].submit('submit') + assert resp.location == 'http://example.net/backoffice/forms/1/fields/' + resp = resp.follow() + + assert FormDef.get(1).fields[0].label == 'changed field' + assert FormDef.get(1).fields[0].required == False + assert FormDef.get(1).fields[0].items is None + + # edit and fill with one item + resp = resp.click('Edit', href='1/') + assert resp.forms[0]['label'].value == 'changed field' + resp.forms[0]['items$element0'] = 'XXX' + resp = resp.forms[0].submit('submit') + assert resp.location == 'http://example.net/backoffice/forms/1/fields/' + assert FormDef.get(1).fields[0].items == ['XXX'] + def test_form_legacy_int_id(pub): create_superuser(pub) create_role() diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index 9f4f66b..709acaf 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -3,6 +3,7 @@ import hashlib import os import re import StringIO +import time import zipfile from webtest import Upload @@ -1505,3 +1506,110 @@ def test_form_page_formula_prefill_user_name(pub): resp = login(get_app(pub), username='foo', password='foo').get('/test/') assert resp.forms[0]['f0'].value == 'foo@localhost' + +def test_form_date_field_submit(pub): + formdef = create_formdef() + formdef.fields = [fields.DateField(id='0', label='string', type='date', + required=False)] + formdef.store() + resp = get_app(pub).get('/test/') + formdef.data_class().wipe() + resp.forms[0]['f0'] = '2015-01-01' + resp = resp.forms[0].submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.forms[0].submit('submit') + assert resp.status_int == 302 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + assert formdef.data_class().count() == 1 + data_id = formdef.data_class().select()[0].id + data = formdef.data_class().get(data_id) + assert time.strftime('%Y-%m-%d', data.data['0']) == '2015-01-01' + + # without filling the field + resp = get_app(pub).get('/test/') + formdef.data_class().wipe() + resp = resp.forms[0].submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.forms[0].submit('submit') + assert resp.status_int == 302 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + assert formdef.data_class().count() == 1 + data_id = formdef.data_class().select()[0].id + data = formdef.data_class().get(data_id) + assert data.data['0'] is None + +def test_form_string_regex_field_submit(pub): + formdef = create_formdef() + formdef.fields = [fields.StringField(id='0', label='string', type='string', + validation=r'\d{5}$', required=False)] + formdef.store() + + formdef.data_class().wipe() + resp = get_app(pub).get('/test/') + resp.forms[0]['f0'] = '12345' + resp = resp.forms[0].submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.forms[0].submit('submit') + assert resp.status_int == 302 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + assert formdef.data_class().count() == 1 + data_id = formdef.data_class().select()[0].id + data = formdef.data_class().get(data_id) + assert data.data['0'] == '12345' + + # without filling the field + formdef.data_class().wipe() + resp = get_app(pub).get('/test/') + resp = resp.forms[0].submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.forms[0].submit('submit') + assert resp.status_int == 302 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + assert formdef.data_class().count() == 1 + data_id = formdef.data_class().select()[0].id + data = formdef.data_class().get(data_id) + assert data.data['0'] is None + + # with an invalid input + formdef.data_class().wipe() + resp = get_app(pub).get('/test/') + resp.forms[0]['f0'] = 'foobar' + resp = resp.forms[0].submit('submit') + assert 'wrong format' in resp.body + +def test_form_text_field_submit(pub): + formdef = create_formdef() + formdef.fields = [fields.TextField(id='0', label='string', type='text', required=False)] + formdef.store() + + formdef.data_class().wipe() + resp = get_app(pub).get('/test/') + resp.forms[0]['f0'] = '12345' + resp = resp.forms[0].submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.forms[0].submit('submit') + assert resp.status_int == 302 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + assert formdef.data_class().count() == 1 + data_id = formdef.data_class().select()[0].id + data = formdef.data_class().get(data_id) + assert data.data['0'] == '12345' + + # without filling the field + formdef.data_class().wipe() + resp = get_app(pub).get('/test/') + resp = resp.forms[0].submit('submit') + assert 'Check values then click submit.' in resp.body + resp = resp.forms[0].submit('submit') + assert resp.status_int == 302 + resp = resp.follow() + assert 'The form has been recorded' in resp.body + assert formdef.data_class().count() == 1 + data_id = formdef.data_class().select()[0].id + data = formdef.data_class().get(data_id) + assert data.data['0'] is None -- 2.6.2