Projet

Général

Profil

0001-workflows-ensure-variables-are-reevaluated-for-new-b.patch

Frédéric Péters, 22 mars 2018 17:47

Télécharger (3,5 ko)

Voir les différences:

Subject: [PATCH] workflows: ensure variables are reevaluated for new
 backoffice fields (#22748)

 tests/test_workflows.py     | 58 +++++++++++++++++++++++++++++++++++++++++++++
 wcs/wf/backoffice_fields.py |  4 +++-
 2 files changed, 61 insertions(+), 1 deletion(-)
tests/test_workflows.py
3238 3238
    formdata = formdef.data_class().get(formdata.id)
3239 3239
    assert formdata.data['bo1'] is None
3240 3240

  
3241
def test_set_backoffice_field_immediate_use(http_requests, two_pubs):
3242
    Workflow.wipe()
3243
    FormDef.wipe()
3244
    wf = Workflow(name='xxx')
3245
    wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
3246
    wf.backoffice_fields_formdef.fields = [
3247
        StringField(id='bo1', label='1st backoffice field',
3248
            type='string', varname='backoffice_blah'),
3249
        StringField(id='bo2', label='2nd backoffice field',
3250
            type='string', varname='backoffice_barr'),
3251
    ]
3252
    st1 = wf.add_status('Status1')
3253
    wf.store()
3254

  
3255
    formdef = FormDef()
3256
    formdef.name = 'baz'
3257
    formdef.fields = [
3258
        StringField(id='00', label='String', type='string', varname='string'),
3259
    ]
3260
    formdef.workflow_id = wf.id
3261
    formdef.store()
3262

  
3263
    formdata = formdef.data_class()()
3264
    formdata.data = {'00': 'HELLO'}
3265
    formdata.just_created()
3266
    formdata.store()
3267
    item = SetBackofficeFieldsWorkflowStatusItem()
3268
    item.parent = st1
3269

  
3270
    item.fields = [
3271
        {'field_id': 'bo1', 'value': '{{form_var_string}}'},
3272
    ]
3273
    two_pubs.substitutions.reset()
3274
    two_pubs.substitutions.feed(formdata)
3275
    item.perform(formdata)
3276
    formdata = formdef.data_class().get(formdata.id)
3277
    assert formdata.data.get('bo1') == 'HELLO'
3278

  
3279
    item.fields = [
3280
        {'field_id': 'bo1', 'value': 'WORLD'},
3281
    ]
3282
    two_pubs.substitutions.reset()
3283
    two_pubs.substitutions.feed(formdata)
3284
    item.perform(formdata)
3285
    formdata = formdef.data_class().get(formdata.id)
3286
    assert formdata.data.get('bo1') == 'WORLD'
3287

  
3288
    item.fields = [
3289
        {'field_id': 'bo1', 'value': 'X{{form_var_string}}X'},
3290
        {'field_id': 'bo2', 'value': "Y{{form_var_backoffice_blah}}Y"},
3291
    ]
3292
    two_pubs.substitutions.reset()
3293
    two_pubs.substitutions.feed(formdata)
3294
    item.perform(formdata)
3295
    formdata = formdef.data_class().get(formdata.id)
3296
    assert formdata.data.get('bo1') == 'XHELLOX'
3297
    assert formdata.data.get('bo2') == 'YXHELLOXY'
3298

  
3241 3299
def test_redirect_to_url(pub):
3242 3300
    formdef = FormDef()
3243 3301
    formdef.name = 'baz'
wcs/wf/backoffice_fields.py
116 116
                elif formdata.data.has_key('%s_display' % formdef_field.id):
117 117
                    del formdata.data['%s_display' % formdef_field.id]
118 118

  
119
        formdata.store()
119
            # store formdata everytime so substitution cache is invalidated,
120
            # and backoffice field values can be used in subsequent fields.
121
            formdata.store()
120 122

  
121 123
    def fields_export_to_xml(self, item, charset, include_id=False):
122 124
        if not self.fields:
123
-