1
|
def test_unfeed_string_when_condition_changes(pub):
|
2
|
"""
|
3
|
simulate selection of a string field via condition on from,
|
4
|
followed by a firstof evaluation on workflow in order to get
|
5
|
the a structured value from the seleted list.
|
6
|
"""
|
7
|
# workflow
|
8
|
Workflow.wipe()
|
9
|
workflow = Workflow(name='test')
|
10
|
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
11
|
workflow.backoffice_fields_formdef.fields = [
|
12
|
fields.StringField(
|
13
|
id='bo1', label='first text', type='string', varname='firstof_string'),
|
14
|
]
|
15
|
|
16
|
# status 1 having backoffice fields
|
17
|
st1 = workflow.add_status('Status1', 'st1')
|
18
|
setbo = SetBackofficeFieldsWorkflowStatusItem()
|
19
|
setbo.parent = st1
|
20
|
setbo.fields = [
|
21
|
{'field_id': 'bo1',
|
22
|
'value': '{% firstof form_var_stringA form_var_stringB %}'},
|
23
|
]
|
24
|
st1.items.append(setbo)
|
25
|
workflow.store()
|
26
|
|
27
|
# form providing mainly 2 lists having a condition
|
28
|
formdef = create_formdef()
|
29
|
formdef.fields = [
|
30
|
fields.ItemField(id='1', varname='choice', items=['A', 'B'],
|
31
|
type='item', label='list to choice'),
|
32
|
fields.StringField(id='2', varname='stringA', type='string', label='string A',
|
33
|
condition={'type': 'python',
|
34
|
'value': 'form_var_choice_raw == "A"'}),
|
35
|
fields.StringField(id='3', varname='stringB', type='string', label='string B',
|
36
|
condition={'type': 'python',
|
37
|
'value': 'form_var_choice_raw == "B"'})
|
38
|
]
|
39
|
formdef.confirmation = False
|
40
|
formdef.workflow_id = workflow.id
|
41
|
formdef.store()
|
42
|
formdef.data_class().wipe()
|
43
|
|
44
|
# get form
|
45
|
create_user_and_admin(pub)
|
46
|
resp = get_app(pub).get('/test/')
|
47
|
|
48
|
# user selection on form
|
49
|
resp.form['f1'].value = 'B' # change condition: switch on list B
|
50
|
resp.form['f2'].value = 'foo' # stringA = foo
|
51
|
resp.form['f3'].value = 'bar' # stringB = bar
|
52
|
|
53
|
# submit form
|
54
|
resp = resp.form.submit('submit').follow()
|
55
|
assert 'The form has been recorded' in resp.body
|
56
|
|
57
|
# assert we get a new formdata
|
58
|
assert formdef.data_class().count() == 1
|
59
|
formdata = formdef.data_class().select()[0]
|
60
|
assert formdata.data['1'] == 'B' # choice is list B
|
61
|
assert formdata.data.get('2') is None # stringA is hidden
|
62
|
assert formdata.data['3'] == 'bar' # stringB == bar
|
63
|
|
64
|
# assert firstof value are not computed using previous cached values
|
65
|
assert formdata.data['bo1'] == 'bar' # stringB == bar
|