Projet

Général

Profil

0001-blocks-allow-2nd-page-post-condition-on-blocks-47715.patch

Nicolas Roche, 07 novembre 2020 23:26

Télécharger (3,54 ko)

Voir les différences:

Subject: [PATCH] blocks: allow 2nd page post condition on blocks (#47715)

 tests/form_pages/test_block.py | 36 ++++++++++++++++++++++++++++++++++
 wcs/formdata.py                |  3 ++-
 2 files changed, 38 insertions(+), 1 deletion(-)
tests/form_pages/test_block.py
829 829

  
830 830
    resp = resp.form.submit('submit')  # -> validation page
831 831
    resp = resp.form.submit('submit')  # -> submit
832 832
    assert formdef.data_class().select()[0].data['1']['data'] == [
833 833
            {'123': 'foo', '234': '1', '234_display': 'un'},
834 834
            {'123': 'foo2', '234': '2', '234_display': 'deux'},
835 835
    ]
836 836
    assert formdef.data_class().select()[0].data['1_display'] == 'XunY, XdeuxY'
837

  
838

  
839
def test_block_post_condition_on_2nd_page(pub, blocks_feature):
840
    FormDef.wipe()
841
    BlockDef.wipe()
842

  
843
    block = BlockDef()
844
    block.name = 'foobar'
845
    block.fields = [
846
        fields.StringField(id='123', required=True, label='Test', type='string', varname='foo'),
847
    ]
848
    block.store()
849

  
850
    formdef = FormDef()
851
    formdef.name = 'form title'
852
    formdef.fields = [
853
        fields.PageField(id='0', label='1st page', type='page'),
854
        fields.PageField(id='1', label='2nd page', type='page', post_conditions=[{
855
            'condition': {
856
                'type': 'django', 'value': 'form_var_blockfoo|getlist:"foo"|sum == 5'
857
            }, 'error_message': 'You shall not pass.'}]),
858
        fields.BlockField(id='2', label='test', type='block:foobar', max_items=3,
859
                          varname='blockfoo'),
860
    ]
861
    formdef.store()
862

  
863
    app = get_app(pub)
864
    resp = app.get(formdef.get_url())
865
    resp = resp.form.submit('submit')  # -> second page
866
    resp.form['f2$element0$f123'] = 2
867
    resp = resp.form.submit('f2$add_element')
868
    resp.form['f2$element1$f123'] = 3
869
    resp = resp.form.submit('submit')  # -> validation page
870
    assert 'You shall not pass.' not in resp.text
871
    resp = resp.form.submit('submit')  # -> submit
872
    resp = resp.follow()
wcs/formdata.py
62 62
            # also add it as 'field_' + normalized(field label)
63 63
            identifier_name = misc.simplify(field.label, space = '_')
64 64
            new_data['field_' + identifier_name] = value
65 65

  
66 66
        # and finally add it as its manually defined variable name
67 67
        if field.varname:
68 68
            if field.store_display_value:
69 69
                new_data['var_%s_raw' % field.varname] = value
70
                new_data['var_%s' % field.varname] = display_value
70
                if field.key != 'block':
71
                    new_data['var_%s' % field.varname] = display_value
71 72
            else:
72 73
                new_data['var_%s' % field.varname] = value
73 74
                if field.key == 'file':
74 75
                    new_data['var_%s_raw' % field.varname] = value
75 76
                    new_data['var_%s_url' % field.varname] = None
76 77
                    if value and hasattr(value, 'base_filename'):
77 78
                        new_data['var_%s' % field.varname] = value.base_filename
78 79
                        if formdata is not None:
79
-