blocks: don't fail on creating a prefill block with unknown card (#88027)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
f6e228b438
commit
4ba3ebf6b4
|
@ -2652,6 +2652,92 @@ def test_block_prefill_full_block_email(pub):
|
|||
}
|
||||
|
||||
|
||||
def test_block_prefill_full_block_card_item(pub):
|
||||
FormDef.wipe()
|
||||
BlockDef.wipe()
|
||||
CardDef.wipe()
|
||||
create_user(pub)
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'Test'
|
||||
carddef.fields = [
|
||||
fields.StringField(id='0', label='blah', varname='blah'),
|
||||
]
|
||||
carddef.digest_templates = {'default': '{{ form_var_blah|upper }}'}
|
||||
carddef.store()
|
||||
carddef.data_class().wipe()
|
||||
|
||||
carddata1 = carddef.data_class()()
|
||||
carddata1.data = {'0': 'bar'}
|
||||
carddata1.just_created()
|
||||
carddata1.store()
|
||||
|
||||
block = BlockDef()
|
||||
block.name = 'foobar'
|
||||
block.fields = [
|
||||
fields.ItemField(
|
||||
id='123',
|
||||
required=False,
|
||||
hint='-----',
|
||||
label='Test',
|
||||
varname='plop',
|
||||
data_source={'type': 'carddef:test'},
|
||||
),
|
||||
]
|
||||
block.digest_template = '{{block_var_plop}}'
|
||||
block.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page'),
|
||||
fields.PageField(id='2', label='2nd page'),
|
||||
fields.BlockField(
|
||||
id='1',
|
||||
label='test',
|
||||
block_slug='foobar',
|
||||
max_items=5,
|
||||
prefill={
|
||||
'type': 'string',
|
||||
'value': '{% block_value plop="1" %}',
|
||||
},
|
||||
),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
app = get_app(pub)
|
||||
login(app, username='foo', password='foo')
|
||||
resp = app.get(formdef.get_url())
|
||||
resp = resp.form.submit('submit') # -> page 2
|
||||
assert resp.form['f1$element0$f123'].value == '1'
|
||||
resp = resp.form.submit('submit') # validation
|
||||
resp = resp.form.submit('submit') # done
|
||||
assert formdef.data_class().select()[0].data == {
|
||||
'1': {
|
||||
'data': [
|
||||
{'123': '1', '123_display': 'BAR', '123_structured': {'blah': 'bar', 'id': 1, 'text': 'BAR'}}
|
||||
],
|
||||
'schema': {'123': 'item'},
|
||||
},
|
||||
'1_display': 'BAR',
|
||||
}
|
||||
|
||||
# prefill with unknown value
|
||||
pub.loggederror_class.wipe()
|
||||
formdef.fields[2].prefill['value'] = '{% block_value plop="123" %}'
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
resp = app.get(formdef.get_url())
|
||||
resp = resp.form.submit('submit') # -> page 2
|
||||
assert not resp.form['f1$element0$f123'].value
|
||||
assert pub.loggederror_class.count() == 1
|
||||
assert (
|
||||
pub.loggederror_class.select()[0].summary
|
||||
== 'invalid value when creating block: unknown card value (\'123\')'
|
||||
)
|
||||
|
||||
|
||||
def test_block_titles_and_empty_block_on_summary_page(pub, emails):
|
||||
FormDef.wipe()
|
||||
BlockDef.wipe()
|
||||
|
|
|
@ -28,6 +28,7 @@ from wcs.qommon.ods import NS as OD_NS
|
|||
from wcs.qommon.ods import clean_text as od_clean_text
|
||||
|
||||
from .base import SetValueError, WidgetField
|
||||
from .item import UnknownCardValueError
|
||||
|
||||
|
||||
class MissingBlockFieldError(Exception):
|
||||
|
@ -67,7 +68,11 @@ class BlockRowValue:
|
|||
sub_field.set_value(row_data, sub_value)
|
||||
return row_data
|
||||
|
||||
row_data = make_row_data(self.attributes)
|
||||
try:
|
||||
row_data = make_row_data(self.attributes)
|
||||
except UnknownCardValueError as e:
|
||||
get_publisher().record_error(_('invalid value when creating block: %s') % str(e), exception=e)
|
||||
return None
|
||||
|
||||
current_block_value = data.get(field.id)
|
||||
if not self.check_current_value(current_block_value):
|
||||
|
|
Loading…
Reference in New Issue