misc: handle adding a block line in workflow forms in front (#53607)

This commit is contained in:
Frédéric Péters 2021-04-30 15:10:04 +02:00
parent 677ef4f88b
commit 16ef227eb0
2 changed files with 72 additions and 4 deletions

View File

@ -13,7 +13,7 @@ from wcs.categories import Category
from wcs.data_sources import NamedDataSource from wcs.data_sources import NamedDataSource
from wcs.formdef import FormDef from wcs.formdef import FormDef
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
from wcs.workflows import Workflow from wcs.workflows import JumpOnSubmitWorkflowStatusItem, Workflow
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
from .test_all import create_user from .test_all import create_user
@ -1517,3 +1517,66 @@ def test_block_subfields_display_locations(pub, blocks_feature):
assert 'Blah Title' not in resp.text assert 'Blah Title' not in resp.text
assert 'Blah Subtitle' not in resp.text assert 'Blah Subtitle' not in resp.text
assert 'Blah Comment' not in resp.text assert 'Blah Comment' not in resp.text
def test_workflow_display_form_with_block_add(pub):
user = create_user(pub)
block = BlockDef()
block.name = 'foobar2'
block.fields = [
fields.StringField(id='123', required=True, label='Test', type='string'),
]
block.store()
wf = Workflow.get_default_workflow()
wf.id = '2'
wf.store()
wf = Workflow.get(wf.id)
status = wf.get_status('new')
status.items = []
display_form = FormWorkflowStatusItem()
display_form.id = '_display_form'
display_form.by = ['_submitter']
display_form.varname = 'blah'
display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
display_form.formdef.fields = [
fields.StringField(id='1', label='Test', varname='str', type='string', required=True),
fields.BlockField(id='2', label='Blocks', type='block:foobar2', varname='data', max_items=3),
]
status.items.append(display_form)
display_form.parent = status
jump = JumpOnSubmitWorkflowStatusItem()
jump.id = '_jump'
jump.status = 'accepted'
status.items.append(jump)
jump.parent = status
wf.store()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = []
formdef.workflow_id = wf.id
formdef.store()
formdef.data_class().wipe()
formdata = formdef.data_class()()
formdata.user_id = user.id
formdata.just_created()
formdata.status = 'wf-new'
formdata.store()
resp = login(get_app(pub), username='foo', password='foo').get(formdata.get_url())
resp.form['fblah_1'] = 'blah'
resp.form['fblah_2$element0$f123'] = 'foo'
resp = resp.form.submit('fblah_2$add_element')
resp.form['fblah_2$element1$f123'] = 'bar'
resp = resp.form.submit('submit')
assert formdef.data_class().get(formdata.id).workflow_data == {
'blah_var_data': 'foobar2, foobar2',
'blah_var_data_raw': {'data': [{'123': 'foo'}, {'123': 'bar'}], 'schema': {'123': 'string'}},
'blah_var_str': 'blah',
}

View File

@ -257,9 +257,14 @@ class FormStatusPage(Directory, FormTemplateMixin):
user = get_request().user user = get_request().user
form = self.get_workflow_form(user) form = self.get_workflow_form(user)
response = self.check_submitted_form(form) try:
if response: response = self.check_submitted_form(form)
return response except RedisplayFormException:
# don't display errors after "add block" button has been clicked.
form.clear_errors()
else:
if response:
return response
if form: if form:
form.add_media() form.add_media()