From f52220f3394fe7a9a6fad8950bc4c0e967e1f561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 20 Jun 2016 19:24:50 +0200 Subject: [PATCH] workflows: skip non-widget fields in set backoffice field action (#11443) --- tests/test_admin_pages.py | 27 +++++++++++++++++++++++++-- wcs/wf/backoffice_fields.py | 6 +++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/tests/test_admin_pages.py b/tests/test_admin_pages.py index 3c98f04..63dee36 100644 --- a/tests/test_admin_pages.py +++ b/tests/test_admin_pages.py @@ -1675,8 +1675,6 @@ def test_workflows_backoffice_fields(pub): resp = resp.forms[0].submit() resp = resp.follow() - resp = resp.click('Set Backoffice Fields') - # add a second field resp = app.get('/backoffice/workflows/1/') resp = resp.click(href='backoffice-fields/', index=0) @@ -1692,6 +1690,31 @@ def test_workflows_backoffice_fields(pub): assert workflow.backoffice_fields_formdef.fields[0].id == 'bo1' assert workflow.backoffice_fields_formdef.fields[1].id == 'bo2' + # add a title field + resp = app.get('/backoffice/workflows/1/backoffice-fields/fields/') + resp.forms[0]['label'] = 'foobar3' + resp.forms[0]['type'] = 'Title' + resp = resp.form.submit() + workflow = Workflow.get(workflow.id) + assert len(workflow.backoffice_fields_formdef.fields) == 3 + assert workflow.backoffice_fields_formdef.fields[2].id == 'bo3' + + # check backoffice fields are available in set backoffice fields action + resp = app.get('/backoffice/workflows/1/') + resp = resp.click('baz') # status + resp = resp.click('Set Backoffice Fields') + options = [x[2] for x in resp.form['fields$element0$field_id'].options] + assert '' in options + assert 'foobar' in options + assert 'foobar2' in options + assert 'foobar3' not in options + + resp.form['fields$element0$field_id'] = 'bo1' + resp.form['fields$element0$value'] = 'Hello' + resp = resp.form.submit('submit') + workflow = Workflow.get(workflow.id) + assert workflow.possible_status[0].items[0].fields == [{'field_id': 'bo1', 'value': 'Hello'}] + def test_workflows_functions(pub): create_superuser(pub) create_role() diff --git a/wcs/wf/backoffice_fields.py b/wcs/wf/backoffice_fields.py index 55ebc1d..de0b642 100644 --- a/wcs/wf/backoffice_fields.py +++ b/wcs/wf/backoffice_fields.py @@ -21,6 +21,7 @@ from quixote import get_publisher from qommon import get_logger from qommon.form import WidgetListAsTable, CompositeWidget, SingleSelectWidget, ComputedExpressionWidget +from wcs.fields import WidgetField from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class from wcs.wf.profile import FieldNode @@ -32,7 +33,10 @@ class SetBackofficeFieldRowWidget(CompositeWidget): value = {} fields = [('', '', '')] - fields.extend([(x.id, x.label, x.id) for x in workflow.get_backoffice_fields()]) + for field in workflow.get_backoffice_fields(): + if not issubclass(field.__class__, WidgetField): + continue + fields.append((field.id, field.label, field.id)) self.add(SingleSelectWidget, name='field_id', title=_('Field'), value=value.get('field_id'), options=fields, **kwargs) -- 2.8.1