Projet

Général

Profil

0001-misc-use-workflow-form-prefix-when-evaluating-workfl.patch

Frédéric Péters, 12 août 2019 16:20

Télécharger (4,34 ko)

Voir les différences:

Subject: [PATCH 1/2] misc: use workflow form prefix when evaluating workflow
 forms (#35363)

 tests/test_backoffice_pages.py | 55 ++++++++++++++++++++++++++++++++++
 wcs/formdef.py                 |  1 +
 wcs/forms/common.py            |  2 +-
 3 files changed, 57 insertions(+), 1 deletion(-)
tests/test_backoffice_pages.py
3814 3814

  
3815 3815
    assert formdef.data_class().get(formdata.id).workflow_data == {'blah_var_str': 'xxx2', 'blah_var_str2': None}
3816 3816

  
3817
def test_backoffice_workflow_form_with_live_data_source(pub):
3818
    user = create_user(pub)
3819
    create_environment(pub)
3820

  
3821
    wf = Workflow.get_default_workflow()
3822
    wf.id = '2'
3823
    wf.store()
3824
    wf = Workflow.get(wf.id)
3825
    status = wf.get_status('new')
3826
    status.items = []
3827
    display_form = FormWorkflowStatusItem()
3828
    display_form.id = '_display_form'
3829
    display_form.by = [user.roles[0]]
3830
    display_form.varname = 'blah'
3831
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
3832
    display_form.formdef.fields = [
3833
            fields.StringField(id='1', label='Test', varname='str', type='string', required=True),
3834
            fields.ItemField(id='2', label='Test2', varname='str2', type='item', required=True,
3835
                data_source={'type': 'json', 'value': 'https://www.example.invalid/{{ blah_var_str }}'}),
3836
    ]
3837
    status.items.append(display_form)
3838
    display_form.parent = status
3839

  
3840
    wf.store()
3841
    formdef = FormDef.get_by_urlname('form-title')
3842
    formdef.workflow_id = wf.id
3843
    formdef.fields[0].varname = 'plop'
3844
    formdef.store()
3845

  
3846
    for formdata in formdef.data_class().select():
3847
        if formdata.status == 'wf-new':
3848
            break
3849

  
3850
    app = get_app(pub)
3851

  
3852
    with mock.patch('qommon.misc.urlopen') as urlopen:
3853
        data1 = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
3854
        data2 = {'data': [{'id': 'C', 'text': 'hello'}, {'id': 'D', 'text': 'world'}]}
3855
        def side_effect(url, *args):
3856
            if 'toto' not in url:
3857
                return StringIO.StringIO(json.dumps(data1))
3858
            else:
3859
                return StringIO.StringIO(json.dumps(data2))
3860
        urlopen.side_effect = side_effect
3861

  
3862
        resp = login(app).get(formdata.get_url(backoffice=True))
3863
        assert 'f1' in resp.form.fields
3864
        assert 'f2' in resp.form.fields
3865
        assert resp.form.fields['f2'][0].options == [(u'A', False, u'hello'), (u'B', False, u'world')]
3866

  
3867
        live_url = resp.html.find('form').attrs['data-live-url']
3868
        resp.form['f1'] = 'toto'
3869
        live_resp = app.post(live_url + '?modified_field_id=1', params=resp.form.submit_fields())
3870
        assert live_resp.json['result']['2']['items'] == [{u'text': u'hello', u'id': u'C'}, {u'text': u'world', u'id': u'D'}]
3871

  
3817 3872
def test_backoffice_criticality_in_formdef_listing(pub):
3818 3873
    if not pub.is_using_postgresql():
3819 3874
        pytest.skip('this requires SQL')
wcs/formdef.py
546 546
        current_page = 0
547 547
        on_page = (page is None)
548 548
        for field in self.fields:
549
            field.formdef = self
549 550
            if field.type == 'page':
550 551
                if on_page:
551 552
                    break
wcs/forms/common.py
637 637
                if data_source.type != 'json':
638 638
                    continue
639 639
                varnames = field.get_referenced_varnames(
640
                        formdef=formdata.formdef,
640
                        formdef=field.formdef,
641 641
                        value=data_source.data_source.get('value'))
642 642
                if (modified_field_varname is None or modified_field_varname in varnames) and (
643 643
                        field.display_mode == 'autocomplete' and data_source.query_parameter):
644
-