Projet

Général

Profil

0001-forms-don-t-display-required-field-on-blocks-when-go.patch

Frédéric Péters, 20 décembre 2020 12:10

Télécharger (5,32 ko)

Voir les différences:

Subject: [PATCH] forms: don't display "required field" on blocks when going
 back (#48798)

 tests/form_pages/test_block.py | 98 ++++++++++++++++++++++++++++++++++
 wcs/blocks.py                  |  1 +
 2 files changed, 99 insertions(+)
tests/form_pages/test_block.py
162 162
    assert 'Check values then click submit.' in resp.text
163 163

  
164 164

  
165
def test_block_required_previous_page(pub, blocks_feature):
166
    FormDef.wipe()
167
    BlockDef.wipe()
168

  
169
    block = BlockDef()
170
    block.name = 'foobar'
171
    block.fields = [
172
        fields.StringField(id='123', required=True, label='Test', type='string'),
173
        fields.StringField(id='234', required=True, label='Test2', type='string'),
174
    ]
175
    block.store()
176

  
177
    for multipage in (False, True):
178
        # single block, go to validation page, come back
179
        formdef = FormDef()
180
        formdef.name = 'form title'
181
        if multipage:
182
            formdef.fields = [
183
                fields.PageField(id='0', label='1st page', type='page'),
184
                fields.BlockField(id='1', label='test', type='block:foobar', required=True),
185
                fields.PageField(id='2', label='2nd page', type='page'),
186
            ]
187
        else:
188
            formdef.fields = [
189
                fields.BlockField(id='1', label='test', type='block:foobar', required=True),
190
            ]
191
        formdef.store()
192
        formdef.data_class().wipe()
193

  
194
        app = get_app(pub)
195
        resp = app.get(formdef.get_url())
196
        resp = resp.form.submit('submit')  # -> error page
197
        assert 'There were errors processing the form' in resp
198
        assert resp.text.count('required field') == 1
199
        resp.form['f1$element0$f123'] = 'foo'
200
        resp.form['f1$element0$f234'] = 'bar'
201
        if multipage:
202
            resp = resp.form.submit('submit')  # -> 2nd page
203
        resp = resp.form.submit('submit')  # -> validation page
204
        assert 'Check values then click submit.' in resp.text
205

  
206
        if multipage:
207
            resp = resp.form.submit('previous')  # -> 2nd page
208
        resp = resp.form.submit('previous')  # -> 1st page
209
        assert resp.text.count('required field') == 0
210
        assert resp.form['f1$element0$f123'].value == 'foo'
211
        assert resp.form['f1$element0$f234'].value == 'bar'
212

  
213
        if multipage:
214
            resp = resp.form.submit('submit')  # -> 2nd page
215
        resp = resp.form.submit('submit')  # -> validation page
216
        assert 'Check values then click submit.' in resp.text
217
        resp = resp.form.submit('submit')  # -> submitted
218

  
219
        assert formdef.data_class().count() == 1
220
        formdata = formdef.data_class().select()[0]
221
        assert formdata.data['1']['data'] == [{'123': 'foo', '234': 'bar'}]
222

  
223
        # add two blocks, go to validation page, come back
224
        if multipage:
225
            formdef.fields[1].max_items = 3
226
        else:
227
            formdef.fields[0].max_items = 3
228
        formdef.store()
229
        formdef.data_class().wipe()
230

  
231
        app = get_app(pub)
232
        resp = app.get(formdef.get_url())
233
        resp.form['f1$element0$f123'] = 'foo'
234
        resp.form['f1$element0$f234'] = 'bar'
235
        resp = resp.form.submit('f1$add_element')  # -> 1st page
236
        resp.form['f1$element1$f123'] = 'foo2'
237
        resp.form['f1$element1$f234'] = 'bar2'
238
        if multipage:
239
            resp = resp.form.submit('submit')  # -> 2nd page
240
        resp = resp.form.submit('submit')  # -> validation page
241
        assert 'Check values then click submit.' in resp.text
242

  
243
        if multipage:
244
            resp = resp.form.submit('previous')  # -> 2nd page
245
        resp = resp.form.submit('previous')  # -> 1st page
246
        assert resp.text.count('required field') == 0
247
        assert resp.form['f1$element0$f123'].value == 'foo'
248
        assert resp.form['f1$element0$f234'].value == 'bar'
249
        assert resp.form['f1$element1$f123'].value == 'foo2'
250
        assert resp.form['f1$element1$f234'].value == 'bar2'
251

  
252
        if multipage:
253
            resp = resp.form.submit('submit')  # -> 2nd page
254
        resp = resp.form.submit('submit')  # -> validation page
255
        assert 'Check values then click submit.' in resp.text
256
        resp = resp.form.submit('submit')  # -> submitted
257

  
258
        assert formdef.data_class().count() == 1
259
        formdata = formdef.data_class().select()[0]
260
        assert formdata.data['1']['data'] == [{'123': 'foo', '234': 'bar'}, {'123': 'foo2', '234': 'bar2'}]
261

  
262

  
165 263
def test_block_date(pub, blocks_feature):
166 264
    FormDef.wipe()
167 265
    BlockDef.wipe()
wcs/blocks.py
209 209
            self.set_value(value)
210 210

  
211 211
    def set_value(self, value):
212
        self.value = value
212 213
        for widget in self.get_widgets():
213 214
            if hasattr(widget, 'set_value') and not getattr(widget, 'secondary', False):
214 215
                widget.set_value(value.get(widget.field.id))
215
-