From c917bc1455ae674a9206e1c59613bc84ea724bb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 31 Jul 2020 08:20:26 +0200 Subject: [PATCH] workfows: display/accept map by varname field when a target form is set (#45630) --- tests/test_admin_pages.py | 17 +++++++++++++++++ wcs/wf/create_formdata.py | 4 ++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index c197abcd4..2e73ca958 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -6061,6 +6061,23 @@ def test_create_formdata(pub): pq = resp.pyquery.remove_namespaces() assert pq('.error').text() == 'Some destination fields are duplicated' + # check setting map_fields_by_varname on new action + resp = app.get('/backoffice/workflows/%s/status/%s/' % (wf.id, st2.id)) + resp.forms['new-action-form']['action-formdata-action'] = 'New Form Creation' + resp = resp.forms['new-action-form'].submit() + resp = resp.follow() + resp = resp.click(r'New Form Creation \(not configured\)') + resp.form['formdef_slug'] = 'target-form' # set target form + resp = resp.form.submit('submit') + assert 'Please define new mappings' in resp + assert resp.form['map_fields_by_varname'].checked is False + resp.form['map_fields_by_varname'].checked = True + resp = resp.form.submit('submit') + resp = resp.follow() + wf2 = Workflow.get(wf2.id) + assert wf2.possible_status[-1].items[-1].map_fields_by_varname is True + assert wf2.possible_status[-1].items[-1].mappings is None + def test_block_new(pub, blocks_feature): create_superuser(pub) diff --git a/wcs/wf/create_formdata.py b/wcs/wf/create_formdata.py index 40899f5d0..04b843483 100644 --- a/wcs/wf/create_formdata.py +++ b/wcs/wf/create_formdata.py @@ -258,7 +258,7 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem): title=_(self.mappings_label), to_formdef=formdef, value=self.mappings) - if form.is_submitted(): + if form.is_submitted() and get_request().form.get('map_fields_by_varname') != 'yes': # do not validate form if formdef is changed and there is no mappings if formdef_slug != self.formdef_slug and not widget.parse(): form.get_widget('%smappings' % prefix).set_error(_('Please define new mappings')) @@ -267,7 +267,7 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem): title=_('Identifier'), value=self.varname, hint=_(self.varname_hint), advanced=not(bool(self.varname))) - if 'map_fields_by_varname' in parameters and self.formdef: + if 'map_fields_by_varname' in parameters and formdef: form.add(CheckboxWidget, '%smap_fields_by_varname' % prefix, title=_('Map fields by varname'), value=self.map_fields_by_varname,