blocks: do not mark with errors required fields of an empty block (#62694) #998
|
@ -142,6 +142,28 @@ def test_block_required(pub):
|
|||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp.text
|
||||
|
||||
# block not required, one subfield required, error on page
|
||||
formdef.fields = [
|
||||
fields.BlockField(id='1', label='test', block_slug='foobar', required=False),
|
||||
fields.StringField(id='2', label='Foo', required=True),
|
||||
]
|
||||
formdef.store()
|
||||
block.fields = [
|
||||
fields.StringField(id='123', required=True, label='Test'),
|
||||
fields.StringField(id='234', required=False, label='Test2'),
|
||||
]
|
||||
block.store()
|
||||
resp = app.get(formdef.get_url())
|
||||
resp = resp.form.submit('submit') # -> error page
|
||||
# block was empty, subfield is not marked as required
|
||||
assert resp.pyquery('.widget-with-error label').text() == 'Foo*'
|
||||
|
||||
resp = app.get(formdef.get_url())
|
||||
resp.form['f1$element0$f234'] = 'bar'
|
||||
resp = resp.form.submit('submit') # -> error page
|
||||
# block was not empty, subfield is also marked as required
|
||||
assert resp.pyquery('.widget-with-error label').text() == 'Test* Foo*'
|
||||
|
||||
|
||||
def test_block_required_previous_page(pub):
|
||||
FormDef.wipe()
|
||||
|
|
|
@ -388,7 +388,7 @@ def test_validation_item_field_inside_block(pub):
|
|||
formdata.data['1'] = {'data': [{'1': None}]}
|
||||
testdef = TestDef.create_from_formdata(formdef, formdata)
|
||||
testdef.run(formdef)
|
||||
assert testdef.missing_required_fields == ['Test']
|
||||
assert testdef.missing_required_fields == ['foobar']
|
||||
|
||||
|
||||
def test_validation_optional_field_inside_required_block(pub):
|
||||
|
|
|
@ -431,6 +431,9 @@ class BlockSubWidget(CompositeWidget):
|
|||
empty = False
|
||||
if empty and not all_lists and not get_publisher().keep_all_block_rows_mode:
|
||||
value = None
|
||||
for widget in self.get_widgets(): # reset "required" errors
|
||||
if widget.error == self.REQUIRED_ERROR:
|
||||
widget.clear_error()
|
||||
self.value = value
|
||||
|
||||
def add_media(self):
|
||||
|
|
Loading…
Reference in New Issue