0001-forms-keep-locked-field-as-readonly-on-page-with-err.patch
tests/test_form_pages.py | ||
---|---|---|
5321 | 5321 |
assert formdatas[0].data['0'] == 'foo@localhost' |
5322 | 5322 | |
5323 | 5323 | |
5324 |
def test_form_page_verified_prefill_error_page(pub): |
|
5325 |
user = create_user(pub) |
|
5326 |
user.verified_fields = ['email'] |
|
5327 |
user.store() |
|
5328 |
formdef = create_formdef() |
|
5329 |
formdef.data_class().wipe() |
|
5330 |
formdef.fields = [ |
|
5331 |
fields.StringField(id='0', label='string', required=False), |
|
5332 |
fields.StringField(id='1', label='string2', required=True), |
|
5333 |
] |
|
5334 |
formdef.store() |
|
5335 | ||
5336 |
for prefill_settings in ( |
|
5337 |
{'type': 'user', 'value': 'email'}, # verified profile |
|
5338 |
{'type': 'string', 'value': 'foo@localhost', 'locked': True}, # locked value |
|
5339 |
): |
|
5340 |
formdef.fields[0].prefill = prefill_settings |
|
5341 |
formdef.store() |
|
5342 |
formdef.data_class().wipe() |
|
5343 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
5344 |
assert resp.form['f0'].value == 'foo@localhost' |
|
5345 |
assert 'readonly' in resp.form['f0'].attrs |
|
5346 | ||
5347 |
resp = resp.form.submit('submit') |
|
5348 |
assert 'There were errors processing the form' in resp.text |
|
5349 |
assert 'readonly' in resp.form['f0'].attrs |
|
5350 | ||
5351 | ||
5324 | 5352 |
def test_form_page_profile_verified_date_prefill(pub): |
5325 | 5353 |
user = create_user(pub) |
5326 | 5354 |
wcs/forms/root.py | ||
---|---|---|
410 | 410 |
else: |
411 | 411 |
req.form = {} |
412 | 412 | |
413 |
else: |
|
414 |
# not a page change, reset_locked_data() will have been called |
|
415 |
# earlier, we use that to set appropriate fields as readonly. |
|
416 |
for field in displayed_fields: |
|
417 |
if get_request().form.get('__locked_f%s' % field.id): |
|
418 |
form.get_widget('f%s' % field.id).readonly = 'readonly' |
|
419 |
form.get_widget('f%s' % field.id).attrs['readonly'] = 'readonly' |
|
420 | ||
413 | 421 |
for field in displayed_fields: |
414 | 422 |
if field.prefill: |
415 | 423 |
# always set additional attributes as they will be used for |
... | ... | |
973 | 981 |
# submitted by the browser. |
974 | 982 |
v = field.convert_value_to_str(v) |
975 | 983 |
get_request().form['f%s' % field.id] = v |
984 |
# keep track of locked field, this will be used when |
|
985 |
# redisplaying the same page in case of errors. |
|
986 |
get_request().form['__locked_f%s' % field.id] = True |
|
976 | 987 | |
977 | 988 |
def previous_page(self, page_no, magictoken): |
978 | 989 |
session = get_session() |
979 |
- |