forms: fix 'edit' action on multipage forms (#7046)
This commit is contained in:
parent
4544174855
commit
6a0c0e2023
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue