diff --git a/tests/backoffice_pages/test_all.py b/tests/backoffice_pages/test_all.py index da5f26d1f..6723a8ef0 100644 --- a/tests/backoffice_pages/test_all.py +++ b/tests/backoffice_pages/test_all.py @@ -4447,6 +4447,16 @@ def test_inspect_page(pub, local_user): assert 'form_user_f3' not in resp.text assert 'form_user_f_' not in resp.text + # make sure workflow data itself is not displayed, as it's available in + # expanded variables + assert not pq('[title="form_workflow_data"]') + + # but do display it if it has some invalid contents + formdata.workflow_data['invalid key'] = 'foobar' + formdata.store() + resp = login(get_app(pub)).get(resp.request.url) + assert resp.pyquery('[title="form_workflow_data"]') + # check functions assert re.findall('Recipient.*foobar', resp.text) diff --git a/tests/test_formdata.py b/tests/test_formdata.py index 204b38efb..00bd97048 100644 --- a/tests/test_formdata.py +++ b/tests/test_formdata.py @@ -546,6 +546,24 @@ def test_workflow_data_file_url(pub, formdef): assert substvars['foo_var_file_url'] +def test_workflow_data_invalid_keys(pub, formdef): + formdata = formdef.data_class()() + formdata.store() + formdata.workflow_data = { + 'valid_key': {'invalid key': 'foo', 'valid_key': 'bar'}, + 'invalid key': 'baz', + } + substvars = formdata.get_substitution_variables() + assert 'form_workflow_data_valid_key' in substvars + assert 'form_workflow_data_invalid key' not in substvars + assert 'form_workflow_data_valid_key_valid_key' in substvars + assert 'form_workflow_data_valid_key_invalid key' not in substvars + assert substvars['form_workflow_data_valid_key_valid_key'] == 'bar' + with pytest.raises(KeyError): + # noqa pylint: disable=pointless-statement + substvars['form_workflow_data_invalid key'] + + def test_evolution_get_status(pub): Workflow.wipe() workflow = Workflow(name='test') diff --git a/wcs/backoffice/management.py b/wcs/backoffice/management.py index 198bc5bac..3f52e536a 100644 --- a/wcs/backoffice/management.py +++ b/wcs/backoffice/management.py @@ -3279,10 +3279,16 @@ class FormBackOfficeStatusPage(FormStatusPage): 'inspect_url': v['form'].backoffice_url + 'inspect', 'display_name': v['form_display_name'], } - elif hasattr(v, 'inspect_keys') or isinstance(v, dict): - # skip expanded + elif hasattr(v, 'inspect_keys'): + # skip as there are expanded identifiers continue else: + if isinstance(v, dict): + # only display dictionaries if they have invalid keys + # (otherwise the expanded identifiers are a better way + # to get to the values). + if all(CompatibilityNamesDict.valid_key_regex.match(k) for k in v): + continue r += htmltext('
%s
') % (k, k)
r += htmltext('