diff --git a/tests/form_pages/test_block.py b/tests/form_pages/test_block.py index 651898288..db0376b79 100644 --- a/tests/form_pages/test_block.py +++ b/tests/form_pages/test_block.py @@ -13,7 +13,7 @@ from wcs.categories import Category from wcs.data_sources import NamedDataSource from wcs.formdef import FormDef 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 .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 Subtitle' 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', + } diff --git a/wcs/forms/common.py b/wcs/forms/common.py index c89786730..b9925590b 100644 --- a/wcs/forms/common.py +++ b/wcs/forms/common.py @@ -257,9 +257,14 @@ class FormStatusPage(Directory, FormTemplateMixin): user = get_request().user form = self.get_workflow_form(user) - response = self.check_submitted_form(form) - if response: - return response + try: + response = self.check_submitted_form(form) + except RedisplayFormException: + # don't display errors after "add block" button has been clicked. + form.clear_errors() + else: + if response: + return response if form: form.add_media()