tests: add check for advanced structured form option usage

This commit is contained in:
Frédéric Péters 2020-04-18 17:16:28 +02:00
parent 7c5ded1980
commit 38ec86215e
1 changed files with 70 additions and 1 deletions

View File

@ -34,7 +34,8 @@ from wcs.formdef import FormDef
from wcs.workflows import (Workflow, EditableWorkflowStatusItem,
DisplayMessageWorkflowStatusItem, WorkflowBackofficeFieldsFormDef,
ChoiceWorkflowStatusItem, JumpOnSubmitWorkflowStatusItem,
SendmailWorkflowStatusItem, CommentableWorkflowStatusItem)
SendmailWorkflowStatusItem, CommentableWorkflowStatusItem,
WorkflowVariablesFieldsFormDef)
from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem
from wcs.wf.export_to_model import ExportToModel, transform_to_pdf
from wcs.wf.jump import JumpWorkflowStatusItem
@ -7987,3 +7988,71 @@ def test_form_honeypot(pub):
resp.forms[0]['f00'] = 'honey?'
resp = resp.forms[0].submit('submit')
assert 'Honey pot should be left untouched.' in resp
def test_structured_workflow_options(pub):
create_user_and_admin(pub)
workflow = Workflow(name='test')
workflow.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=workflow)
data_source = {
'type': 'formula',
'value': repr([
{'id': '1', 'text': 'un', 'more': 'foo'},
{'id': '2', 'text': 'deux', 'more': 'bar'}
])
}
workflow.variables_formdef.fields = [
fields.StringField(id='1', label='Test', type='string', varname='foo'),
fields.ItemField(id='2', label='Test List', type='item', varname='bar',
data_source=data_source),
fields.ItemsField(id='3', label='Test Multi', type='items', varname='baz',
data_source=data_source),
]
st1 = workflow.add_status('Status1', 'st1')
workflow.store()
formdef = create_formdef()
formdef.fields = [
fields.ItemField(id='1', label='Test List', type='item', varname='bar',
data_source={'type': 'formula', 'value': 'form_option_baz_structured'}),
]
formdef.store()
formdef.workflow_id = workflow.id
formdef.store()
formdef.data_class().wipe()
# configure workflow options
resp = login(get_app(pub), username='admin', password='admin').get(
'/backoffice/forms/%s/' % formdef.id)
resp = resp.click('Options')
resp.form['f1'].value = 'plop'
resp.form['f2'].value = '1'
resp.form['f3$element1'].checked = True
resp = resp.form.submit('submit')
formdef = FormDef.get(formdef.id)
assert formdef.workflow_options == {
'foo': 'plop',
'bar': '1',
'bar_display': 'un',
'bar_structured': {'id': '1', 'more': 'foo', 'text': 'un'},
'baz': ['1'],
'baz_display': 'un',
'baz_structured': [{'id': '1', 'more': 'foo', 'text': 'un'}],
}
app = login(get_app(pub), username='foo', password='foo')
resp = app.get('/test/')
assert resp.form['f1'].options == [('1', False, 'un')]
resp = resp.form.submit('submit') # form page
resp = resp.form.submit('submit') # confirmation page
resp = resp.follow()
formdata = formdef.data_class().select()[0]
assert formdata.data == {
'1': '1',
'1_display': 'un',
'1_structured': {'id': '1', 'text': 'un', 'more': 'foo'},
}