forms: fix handling of verified user attributes in date fields (#26776)

This commit is contained in:
Frédéric Péters 2018-09-27 11:20:16 +02:00
parent 8e0939703b
commit 2e24fa95d8
2 changed files with 50 additions and 0 deletions

View File

@ -4360,6 +4360,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()

View File

@ -677,6 +677,10 @@ 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:
# convert structured data to strings as if they were
# submitted by the browser.
v = field.convert_value_to_str(v)
get_request().form['f%s' % field.id] = v
if step == 0: