forms: fix handling of verified user attributes in date fields (#26776)
This commit is contained in:
parent
8e0939703b
commit
2e24fa95d8
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue