1
|
def test_form_edit_and_backoffice_field_change_condition(pub):
|
2
|
Workflow.wipe()
|
3
|
workflow = Workflow(name='test')
|
4
|
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
5
|
workflow.backoffice_fields_formdef.fields = [
|
6
|
fields.StringField(
|
7
|
id='bo1', label='both text', type='string', varname='both_text'),
|
8
|
fields.StringField(
|
9
|
id='bo2', label='both more', type='string', varname='both_more')
|
10
|
]
|
11
|
|
12
|
st1 = workflow.add_status('Status1', 'st1')
|
13
|
setbo = SetBackofficeFieldsWorkflowStatusItem()
|
14
|
setbo.parent = st1
|
15
|
setbo.fields = [
|
16
|
{'field_id': 'bo1',
|
17
|
'value': '{{ form_var_listA }} vs {{ form_var_listB }}'},
|
18
|
{'field_id': 'bo2',
|
19
|
'value': '{{ form_var_listA_more }} vs {{ form_var_listB_more }}'}
|
20
|
]
|
21
|
editable = EditableWorkflowStatusItem()
|
22
|
editable.id = '_editable'
|
23
|
editable.by = ['_submitter']
|
24
|
editable.parent = st1
|
25
|
editable.status = st1.id
|
26
|
st1.items = [setbo, editable]
|
27
|
workflow.store()
|
28
|
|
29
|
items_A = [{'id': '1', 'text': 'A1', 'more':'moreA1'}]
|
30
|
items_B = [{'id': '1', 'text': 'B1', 'more':'moreB1'},
|
31
|
{'id': '2', 'text': 'B2', 'more':'moreB2'}]
|
32
|
formdef = create_formdef()
|
33
|
formdef.fields = [
|
34
|
fields.ItemField(id='1', varname='choice', items=['A', 'B'],
|
35
|
type='item', label='list to choice'),
|
36
|
fields.ItemField(id='2', varname='listA', type='item', label='list A',
|
37
|
data_source={'type': 'formula', 'value': str(items_A)},
|
38
|
condition={'type': 'python',
|
39
|
'value': 'form_var_choice_raw == "A"'}),
|
40
|
fields.ItemField(id='3', varname='listB', type='item', label='list B',
|
41
|
data_source={'type': 'formula', 'value': str(items_B)},
|
42
|
condition={'type': 'python',
|
43
|
'value': 'form_var_choice_raw == "B"'})
|
44
|
]
|
45
|
formdef.confirmation = False
|
46
|
formdef.workflow_id = workflow.id
|
47
|
formdef.store()
|
48
|
formdef.data_class().wipe()
|
49
|
|
50
|
create_user(pub)
|
51
|
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
|
52
|
|
53
|
resp.form['f1'].value = 'B'
|
54
|
resp.form['f2'].value = '1'
|
55
|
resp.form['f3'].value = '2'
|
56
|
|
57
|
resp = resp.form.submit('submit').follow()
|
58
|
assert 'The form has been recorded' in resp.body
|
59
|
|
60
|
assert formdef.data_class().count() == 1
|
61
|
formdata = formdef.data_class().select()[0]
|
62
|
assert formdata.data['1'] == 'B'
|
63
|
assert formdata.data.get('2') is None
|
64
|
assert formdata.data['3'] == '2'
|
65
|
|
66
|
# check unfeed on FormPage::submitted()
|
67
|
assert formdata.data['bo1'] == 'None vs B2'
|
68
|
assert formdata.data['bo2'] == ' vs moreB2'
|
69
|
|
70
|
app = login(get_app(pub), username='foo', password='foo')
|
71
|
resp = app.get('/test/%s/' % formdata.id)
|
72
|
assert 'button_editable-button' in resp.body
|
73
|
|
74
|
resp = resp.form.submit('button_editable').follow()
|
75
|
assert resp.form['f1'].value == 'B'
|
76
|
resp.form['f1'].value = 'A'
|
77
|
resp = resp.form.submit('submit').follow() # -> saved
|
78
|
assert 'The form has been recorded' in resp.body
|
79
|
|
80
|
assert formdef.data_class().count() == 1
|
81
|
formdata = formdef.data_class().select()[0]
|
82
|
assert formdata.data['1'] == 'A'
|
83
|
assert formdata.data['2'] == '1'
|
84
|
assert formdata.data.get('3') is None
|
85
|
|
86
|
# check unfeed on FormPage::submitted_existing()
|
87
|
assert formdata.data['bo1'] == 'A1 vs None'
|
88
|
assert formdata.data['bo2'] == 'moreA1 vs '
|