Projet

Général

Profil

0001-forms-clean-context-before-displaying-a-new-page-489.patch

Frédéric Péters, 28 novembre 2020 16:28

Télécharger (3,45 ko)

Voir les différences:

Subject: [PATCH] forms: clean context before displaying a new page (#48950)

 tests/form_pages/test_all.py | 57 ++++++++++++++++++++++++++++++++++++
 wcs/forms/root.py            |  1 +
 2 files changed, 58 insertions(+)
tests/form_pages/test_all.py
6157 6157
    assert formdef.data_class().select()[0].data['1_structured']['item'] == 'baz'
6158 6158

  
6159 6159

  
6160
def test_item_field_from_cards_check_lazy_live(pub):
6161
    create_user(pub)
6162
    formdef = create_formdef()
6163
    formdef.data_class().wipe()
6164

  
6165
    CardDef.wipe()
6166
    carddef = CardDef()
6167
    carddef.name = 'items'
6168
    carddef.digest_template = '{{form_var_name}}'
6169
    carddef.fields = [
6170
        fields.StringField(id='0', label='string', varname='name'),
6171
        fields.StringField(id='1', label='string', varname='attr'),
6172
    ]
6173
    carddef.store()
6174
    carddef.data_class().wipe()
6175
    for i, value in enumerate(['foo', 'bar', 'baz']):
6176
        carddata = carddef.data_class()()
6177
        carddata.data = {
6178
            '0': value,
6179
            '1': 'attr%s' % i,
6180
        }
6181
        carddata.just_created()
6182
        carddata.store()
6183

  
6184
    ds = {'type': 'carddef:%s' % carddef.url_name}
6185
    formdef.fields = [
6186
        fields.PageField(id='0', label='1st page', type='page'),
6187
        fields.ItemField(id='1', label='string', type='item', varname='item', data_source=ds),
6188
        fields.PageField(id='2', label='2nd page', type='page'),
6189
        fields.CommentField(id='3', label='live value: {{ form_var_item_live_var_attr }}', type='comment'),
6190
        fields.PageField(id='4', label='3rd page', type='page'),
6191
    ]
6192
    formdef.store()
6193

  
6194
    resp = get_app(pub).get('/test/')
6195
    resp.form['f1'] = '2'
6196
    resp = resp.form.submit('submit')  # -> 2nd page
6197
    assert 'live value: attr1' in resp
6198

  
6199
    # add a field with a condition on first page and third page
6200
    formdef.fields[1:1] = [
6201
        fields.StringField(id='5', label='field with condition', type='string',
6202
            required=False, condition={'type': 'django', 'value': '1'}),
6203
    ]
6204
    formdef.fields.append(
6205
        fields.StringField(id='6', label='second field with condition', type='string',
6206
            required=False, condition={'type': 'django', 'value': '1'}))
6207
    formdef.store()
6208
    resp = get_app(pub).get('/test/')
6209
    resp.form['f1'] = '2'
6210
    resp = resp.form.submit('submit')  # -> 2nd page
6211
    assert 'live value: attr1' in resp
6212
    resp = resp.form.submit('submit')  # -> 3rd page
6213
    resp = resp.form.submit('previous')  # -> 2nd page
6214
    assert 'live value: attr1' in resp
6215

  
6216

  
6160 6217
def test_item_field_with_disabled_items(http_requests, pub):
6161 6218
    user = create_user(pub)
6162 6219
    formdef = create_formdef()
wcs/forms/root.py
980 980

  
981 981
            # the page has been successfully submitted, maybe new pages
982 982
            # should be revealed.
983
            self.clean_submission_context()
983 984
            self.feed_current_data(magictoken)
984 985
            self.reset_pages_cache()
985 986

  
986
-