From 3b6ebd3b17d33a84694432b7fd06d92f30c0a020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Thu, 27 Sep 2018 11:20:16 +0200 Subject: [PATCH] forms: fix handling of verified user attributes in date fields (#26776) --- tests/test_form_pages.py | 46 ++++++++++++++++++++++++++++++++++++++++ wcs/forms/root.py | 2 ++ 2 files changed, 48 insertions(+) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index d008945eb..a6ad085d8 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -4379,6 +4379,52 @@ def test_form_page_profile_verified_prefill(pub): assert not 'Check values then click submit.' in resp.body assert resp.form['f0'].value == 'foo@localhost' +def test_form_page_profile_verified_date_prefill(pub): + user = create_user(pub) + + from wcs.admin.settings import UserFieldsFormDef + user_formdef = UserFieldsFormDef(pub) + user_formdef.fields.append(fields.DateField(id='_date', label='date', type='date')) + user_formdef.store() + user.form_data = {'_date': time.strptime('2018-09-27', '%Y-%m-%d')} + user.set_attributes_from_formdata(user.form_data) + user.store() + + formdef = create_formdef() + formdef.data_class().wipe() + formdef.fields = [fields.DateField(id='0', label='date', + prefill={'type': 'user', 'value': '_date'})] + formdef.store() + + resp = get_app(pub).get('/test/') + assert resp.form['f0'].value == '' + + resp = login(get_app(pub), username='foo', password='foo').get('/test/') + assert resp.form['f0'].value == '2018-09-27' + assert not 'readonly' in resp.form['f0'].attrs + resp.form['f0'].value = '2018-09-27' + resp = resp.form.submit('submit') + assert 'Check values then click submit.' in resp.body + assert resp.form['f0'].value == '2018-09-27' + + user.verified_fields = ['_date'] + user.store() + + resp = login(get_app(pub), username='foo', password='foo').get('/test/') + assert resp.form['f0'].value == '2018-09-27' + assert 'readonly' in resp.form['f0'].attrs + + resp.form['f0'].value = '2018-09-24' # try changing the value + resp = resp.form.submit('submit') + assert 'Check values then click submit.' in resp.body + assert resp.form['f0'].value == '2018-09-27' # it is reverted + + resp.form['f0'].value = '2018-09-24' # try again changing the value + resp = resp.form.submit('submit') + + assert formdef.data_class().count() == 1 + assert time.strftime('%Y-%m-%d', formdef.data_class().select()[0].data['0']) == '2018-09-27' + def test_form_page_profile_verified_radio_item_prefill(pub): user = create_user(pub) formdef = create_formdef() diff --git a/wcs/forms/root.py b/wcs/forms/root.py index d9560b4ba..61e964e68 100644 --- a/wcs/forms/root.py +++ b/wcs/forms/root.py @@ -677,6 +677,8 @@ class FormPage(Directory, FormTemplateMixin): continue v, verified = field.get_prefill_value(user=prefill_user) if verified: + if not isinstance(v, basestring) and field.convert_value_to_str: + v = field.convert_value_to_str(v) get_request().form['f%s' % field.id] = v if step == 0: -- 2.19.0