workflows: skip non-widget fields in set backoffice field action (#11443)

This commit is contained in:
Frédéric Péters 2016-06-20 19:24:50 +02:00
parent e4a0cf641c
commit 1373080b38
2 changed files with 30 additions and 3 deletions

View File

@ -1674,8 +1674,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)
@ -1691,6 +1689,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()

View File

@ -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)