misc: handle submission of form that is unexpectedly no longer valid (#67561) #566
|
@ -2559,6 +2559,33 @@ def test_form_tracking_code_as_variable(pub, nocache):
|
||||||
assert '!%s!' % tracking_code in resp.text
|
assert '!%s!' % tracking_code in resp.text
|
||||||
|
|
||||||
|
|
||||||
|
def test_form_invalid_previous_data(pub):
|
||||||
|
create_user(pub)
|
||||||
|
formdef = create_formdef()
|
||||||
|
formdef.fields = [fields.DateField(id='0', label='date')]
|
||||||
|
formdef.enable_tracking_codes = True
|
||||||
|
formdef.store()
|
||||||
|
|
||||||
|
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
|
||||||
|
formdef.data_class().wipe()
|
||||||
|
tracking_code = get_displayed_tracking_code(resp)
|
||||||
|
assert tracking_code is not None
|
||||||
|
resp.forms[0]['f0'] = time.strftime('%Y-%m-%d', time.localtime())
|
||||||
|
resp = resp.forms[0].submit('submit') # -> validation page
|
||||||
|
|
||||||
|
formdef.fields[0].minimum_is_future = True
|
||||||
|
formdef.store()
|
||||||
|
|
||||||
|
# load the formdata as a draft
|
||||||
|
resp = login(get_app(pub), username='foo', password='foo').get('/')
|
||||||
|
resp.forms[0]['code'] = tracking_code
|
||||||
|
resp = resp.forms[0].submit().follow().follow().follow()
|
||||||
|
assert resp.forms[1]['f0'].value == time.strftime('%Y-%m-%d', time.localtime())
|
||||||
|
resp = resp.forms[1].submit('submit') # -> submit
|
||||||
|
assert 'This form has already been submitted.' not in resp.text
|
||||||
|
assert 'Unexpected field error' in resp.text
|
||||||
|
|
||||||
|
|
||||||
def test_form_draft_with_file(pub):
|
def test_form_draft_with_file(pub):
|
||||||
create_user(pub)
|
create_user(pub)
|
||||||
formdef = create_formdef()
|
formdef = create_formdef()
|
||||||
|
|
|
@ -1433,9 +1433,14 @@ class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
||||||
return self.validating(form_data)
|
return self.validating(form_data)
|
||||||
|
|
||||||
if form.has_errors():
|
if form.has_errors():
|
||||||
# the only possible error here is a token error if the form is
|
if form.get_widget(form.TOKEN_NAME).has_error():
|
||||||
# submitted a second time
|
# Token error if the form is submitted a second time
|
||||||
return template.error_page(_('This form has already been submitted.'))
|
return template.error_page(_('This form has already been submitted.'))
|
||||||
|
# Something else, typically this means a draft has been loaded and
|
||||||
|
# the field checks are no longer ok (for example a check on "date must be
|
||||||
|
# after today"). Push back user to the first page to correct the errors
|
||||||
|
get_session().message = ('error', _('Unexpected field error, please check.'))
|
||||||
|
return self.page(self.pages[0])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return self.submitted(form, existing_formdata)
|
return self.submitted(form, existing_formdata)
|
||||||
|
|
Loading…
Reference in New Issue