Projet

Général

Profil

0001-workflows-clean-context-after-workflow-form-action-3.patch

Frédéric Péters, 02 février 2020 23:13

Télécharger (3,86 ko)

Voir les différences:

Subject: [PATCH] workflows: clean context after workflow form action (#39030)

 tests/test_backoffice_pages.py | 76 ++++++++++++++++++++++++++++++++++
 wcs/wf/form.py                 |  1 +
 2 files changed, 77 insertions(+)
tests/test_backoffice_pages.py
5593 5593

  
5594 5594
    assert LoggedError.count() == 1
5595 5595
    assert LoggedError.select()[0].get_formdata().data == {'1': 'plop'}
5596

  
5597

  
5598
def test_lazy_eval_with_conditional_workflow_form(pub):
5599
    role = Role(name='foobar')
5600
    role.store()
5601
    user = create_user(pub)
5602

  
5603
    app = login(get_app(pub))
5604

  
5605
    FormDef.wipe()
5606

  
5607
    wf = Workflow(name='lazy backoffice form')
5608
    wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf)
5609
    wf.backoffice_fields_formdef.fields = [
5610
        fields.StringField(id='bo1', label='Foo Bar', varname='foo_bar'),
5611
    ]
5612
    st1 = wf.add_status('New', 'new')
5613
    st2 = wf.add_status('Choose', 'choice')
5614
    st3 = wf.add_status('Done', 'done')
5615

  
5616
    # first status with a workflow form, with a live conditional field.
5617
    display_form = FormWorkflowStatusItem()
5618
    display_form.id = '_display_form'
5619
    display_form.by = [user.roles[0]]
5620
    display_form.varname = 'local'
5621
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
5622
    display_form.formdef.fields = [
5623
        fields.StringField(id='1', label='Test', varname='str', type='string', required=True),
5624
        fields.StringField(id='2', label='Test 2', varname='str2', type='string',
5625
                           condition={'type': 'django', 'value': 'local_var_str'})
5626
    ]
5627
    display_form.parent = st1
5628

  
5629
    submit_choice = JumpOnSubmitWorkflowStatusItem()
5630
    submit_choice.parent = st1
5631
    submit_choice.status = st2.id
5632
    st1.items.append(display_form)
5633
    st1.items.append(submit_choice)
5634

  
5635
    # jump to a second status, that set's a backoffice field data
5636
    setbo = SetBackofficeFieldsWorkflowStatusItem()
5637
    setbo.parent = st2
5638
    setbo.fields = [{'field_id': 'bo1', 'value': 'go'}]
5639

  
5640
    # and jump to the third status if the evoluation succeeds
5641
    jump = JumpWorkflowStatusItem()
5642
    jump.condition = {'type': 'django', 'value': "form_var_foo_bar == 'go'"}
5643
    jump.status = st3.id
5644
    jump.parent = st2
5645
    st2.items.append(setbo)
5646
    st2.items.append(jump)
5647
    wf.store()
5648

  
5649
    formdef = FormDef()
5650
    formdef.name = 'test'
5651
    formdef.fields = [
5652
        fields.StringField(id='0', label='Foo', varname='foo')
5653
    ]
5654
    formdef.workflow_roles = {'_receiver': role.id}
5655
    formdef.workflow_id = wf.id
5656
    formdef.store()
5657
    formdata = formdef.data_class()()
5658
    formdata.just_created()
5659
    formdata.data = {
5660
        '0': 'test'
5661
    }
5662
    formdata.store()
5663

  
5664
    resp = app.get(formdata.get_url(backoffice=True))
5665
    resp.forms[0]['f1'] = 'a'
5666
    resp.forms[0]['f2'] = 'b'
5667
    resp = resp.forms[0].submit()
5668
    assert formdata.select()[0].status == 'wf-done'
5669

  
5670
    context = pub.substitutions.get_context_variables(mode='lazy')
5671
    assert context['form_var_foo_bar'] == 'go'
wcs/wf/form.py
216 216
        if form.get_submit() == 'submit' and not form.has_errors():
217 217
            self.evaluate_live_form(form, formdata, user)
218 218
            formdata.store()
219
        get_publisher().substitutions.unfeed(lambda x: x.__class__.__name__ == 'ConditionVars')
219 220

  
220 221
    def get_parameters_view(self):
221 222
        r = TemplateIO(html=True)
222
-