forms: fix 'edit' action on multipage forms (#7046)

This commit is contained in:
Frédéric Péters 2015-04-27 13:40:20 +02:00
parent 4544174855
commit 6a0c0e2023
2 changed files with 62 additions and 1 deletions

View File

@ -3,6 +3,7 @@ import hashlib
from wcs.qommon.ident.password_accounts import PasswordAccount
from wcs.formdef import FormDef
from wcs.workflows import Workflow, EditableWorkflowStatusItem
from wcs.categories import Category
from wcs.tracking_code import TrackingCode
from wcs import fields
@ -525,3 +526,60 @@ def test_form_multi_page_formdef_count_condition(pub):
resp.forms[0]['f1'] = 'foo'
resp = resp.forms[0].submit('submit') # should NOT go straight to validation
assert 'Check values then click submit.' not in resp.body
def test_form_multi_page_post_edit(pub):
user = create_user(pub)
formdef = create_formdef()
formdef.fields = [fields.PageField(id='0', label='1st page', type='page'),
fields.StringField(id='1', label='string'),
fields.PageField(id='2', label='2nd page', type='page'),
fields.StringField(id='3', label='string 2')]
formdef.store()
workflow = Workflow(name='test')
st1 = workflow.add_status('Status1', 'st1')
editable = EditableWorkflowStatusItem()
editable.id = '_editable'
editable.by = ['_submitter', '_receiver']
st1.items.append(editable)
editable.parent = st1
workflow.store()
formdef.workflow_id = workflow.id
formdef.store()
formdef.data_class().wipe()
page = login(get_app(pub), username='foo', password='foo').get('/test/')
page.forms[0]['f1'] = 'foo'
next_page = page.forms[0].submit('submit')
next_page.forms[0]['f3'] = 'barXYZ'
next_page = next_page.forms[0].submit('submit')
next_page = next_page.forms[0].submit('submit')
next_page = next_page.follow()
assert 'The form has been recorded' in next_page.body
data_id = formdef.data_class().select()[0].id
page = login(get_app(pub), username='foo', password='foo').get('/test/%s/' % data_id)
assert 'button_editable-button' in page.body
assert 'barXYZ' in page.body
resp = page.forms[0].submit('button_editable')
assert resp.location == 'http://example.net/test/%s/wfedit' % data_id
resp = resp.follow()
assert resp.forms[0]['f1'].value == 'foo'
resp.forms[0]['f1'] = 'foo2'
resp = resp.forms[0].submit('submit')
assert resp.forms[0]['f3'].value == 'barXYZ'
resp = resp.forms[0].submit('previous')
assert resp.forms[0]['f1'].value == 'foo2'
resp = resp.forms[0].submit('submit')
assert 'Save Changes' in resp.body
resp = resp.forms[0].submit('submit')
assert resp.location == 'http://example.net/test/%s/' % data_id
resp = resp.follow()
assert 'foo2' in resp.body # modified value is there
assert 'barXYZ' in resp.body # unchanged value is still there

View File

@ -314,7 +314,10 @@ class FormPage(Directory):
self.feed_current_data(magictoken)
form = self.formdef.create_form(page_no, displayed_fields)
form.action = '.'
if editing:
form.action = 'wfedit'
else:
form.action = '.'
# include a data-has-draft attribute on the <form> element when a draft
# already exists for the form; this will activate the autosave.
magictoken = get_request().form.get('magictoken')