Projet

Général

Profil

0001-workflows-store-structured-values-in-backoffice-fiel.patch

Thomas Noël, 01 juin 2018 17:32

Télécharger (4,02 ko)

Voir les différences:

Subject: [PATCH] workflows: store structured values in backoffice fields
 (#24209)

 tests/test_workflows.py     | 45 +++++++++++++++++++++++++++++++++++++
 wcs/wf/backoffice_fields.py |  7 ++++++
 2 files changed, 52 insertions(+)
tests/test_workflows.py
3170 3170
    assert formdata.data['bo1'] == 'a'
3171 3171
    assert formdata.data['bo1_display'] == 'aa'
3172 3172

  
3173
    datasource = {'type': 'formula',
3174
                  'value': repr([{'id': 'a', 'text': 'aa', 'more': 'aaa'},
3175
                                 {'id': 'b', 'text': 'bb', 'more': 'bbb'}])}
3176

  
3177
    wf.backoffice_fields_formdef.fields = [
3178
        ItemField(id='bo1', label='1st backoffice field',
3179
            type='item', varname='backoffice_item',
3180
            data_source=datasource),
3181
    ]
3182
    wf.store()
3183

  
3184
    item = SetBackofficeFieldsWorkflowStatusItem()
3185
    item.parent = st1
3186
    item.fields = [{'field_id': 'bo1', 'value': 'a'}]
3187
    item.perform(formdata)
3188

  
3189
    formdata = formdef.data_class().get(formdata.id)
3190
    assert formdata.data['bo1'] == 'a'
3191
    assert formdata.data['bo1_display'] == 'aa'
3192
    assert formdata.data['bo1_structured'] == {'id': 'a', 'more': 'aaa', 'text': 'aa'}
3193

  
3173 3194
def test_set_backoffice_field_items(two_pubs):
3174 3195
    Workflow.wipe()
3175 3196
    FormDef.wipe()
......
3222 3243
    assert formdata.data['bo1'] == ['a', 'b']
3223 3244
    assert formdata.data['bo1_display'] == 'aa, bb'
3224 3245

  
3246
    datasource = {'type': 'formula',
3247
                  'value': repr([{'id': 'a', 'text': 'aa', 'more': 'aaa'},
3248
                                 {'id': 'b', 'text': 'bb', 'more': 'bbb'},
3249
                                 {'id': 'c', 'text': 'cc', 'more': 'ccc'}])}
3250

  
3251
    wf.backoffice_fields_formdef.fields = [
3252
        ItemsField(id='bo1', label='1st backoffice field',
3253
            type='items', varname='backoffice_item',
3254
            data_source=datasource),
3255
    ]
3256
    wf.store()
3257

  
3258
    item = SetBackofficeFieldsWorkflowStatusItem()
3259
    item.parent = st1
3260
    item.fields = [{'field_id': 'bo1', 'value': "=['a', 'c']"}]
3261
    item.perform(formdata)
3262

  
3263
    formdata = formdef.data_class().get(formdata.id)
3264
    assert formdata.data['bo1'] == ['a', 'c']
3265
    assert formdata.data['bo1_display'] == 'aa, cc'
3266
    assert len(formdata.data['bo1_structured']) == 2
3267
    assert {'id': 'a', 'more': 'aaa', 'text': 'aa'} in formdata.data['bo1_structured']
3268
    assert {'id': 'c', 'more': 'ccc', 'text': 'cc'} in formdata.data['bo1_structured']
3269

  
3225 3270
def test_set_backoffice_field_date(two_pubs):
3226 3271
    Workflow.wipe()
3227 3272
    FormDef.wipe()
wcs/wf/backoffice_fields.py
117 117
                    formdata.data['%s_display' % formdef_field.id] = display_value
118 118
                elif formdata.data.has_key('%s_display' % formdef_field.id):
119 119
                    del formdata.data['%s_display' % formdef_field.id]
120
            if formdef_field.store_structured_value and formdata.data.get(formdef_field.id):
121
                structured_value = formdef_field.store_structured_value(formdata.data,
122
                                                                        formdef_field.id)
123
                if structured_value:
124
                    formdata.data['%s_structured' % formdef_field.id] = structured_value
125
                elif '%s_structured' % formdef_field.id in formdata.data:
126
                    del formdata.data['%s_structured' % formdef_field.id]
120 127

  
121 128
            # store formdata everytime so substitution cache is invalidated,
122 129
            # and backoffice field values can be used in subsequent fields.
123
-