Projet

Général

Profil

Development #32558 » test_on_string_field.py

Nicolas Roche, 24 avril 2019 14:35

 
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