Projet

Général

Profil

Development #32558 » test_on_edit.py

Nicolas Roche, 24 avril 2019 18:21

 
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 '