fields: record_error if computed field value has a bad type (#59786)
gitea-wip/wcs/pipeline/head Build started...
Details
gitea-wip/wcs/pipeline/head Build started...
Details
This commit is contained in:
parent
73237402b8
commit
76090c6863
|
@ -688,7 +688,83 @@ def test_computed_field_with_bad_objects_filter_in_prefill(pub):
|
|||
resp = get_app(pub).get('/test/')
|
||||
assert 'XY' in resp.text
|
||||
if pub.is_using_postgresql():
|
||||
assert pub.loggederror_class.count() == 1
|
||||
logged_error = pub.loggederror_class.select()[0]
|
||||
assert pub.loggederror_class.count() == 2
|
||||
logged_error = pub.loggederror_class.select(order_by='id')[0]
|
||||
assert logged_error.summary == 'wcs.carddef.CardDefDoesNotExist: unknown'
|
||||
assert logged_error.formdef_id == formdef.id
|
||||
logged_error = pub.loggederror_class.select(order_by='id')[1]
|
||||
assert (
|
||||
logged_error.summary
|
||||
== 'Invalid value "{{ cards|objects:"unknown"|first|get:"form_number_raw"|default:"" }}" for field "computed"'
|
||||
)
|
||||
assert logged_error.formdef_id == formdef.id
|
||||
|
||||
|
||||
def test_computed_field_with_bad_value_type_in_prefill(pub):
|
||||
if pub.is_using_postgresql():
|
||||
pub.loggederror_class.wipe()
|
||||
CardDef.wipe()
|
||||
FormDef.wipe()
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'items'
|
||||
carddef.digest_templates = {'default': '{{form_var_name}}'}
|
||||
carddef.fields = [
|
||||
fields.StringField(id='0', label='string', varname='string'),
|
||||
fields.BoolField(id='1', label='bool', varname='bool'),
|
||||
]
|
||||
carddef.store()
|
||||
carddata = carddef.data_class().wipe()
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {
|
||||
'0': 'foo',
|
||||
'1': True,
|
||||
}
|
||||
carddata.just_created()
|
||||
carddata.store()
|
||||
|
||||
ds = {'type': 'carddef:%s' % carddef.url_name}
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'test'
|
||||
formdef.fields = [
|
||||
fields.ComputedField(
|
||||
id='1',
|
||||
label='computed',
|
||||
varname='computed',
|
||||
value_template='{{ cards|objects:"%s"|first|get:"form_number_raw"|default:"" }}'
|
||||
% carddef.url_name,
|
||||
freeze_on_initial_value=True,
|
||||
data_source=ds,
|
||||
),
|
||||
fields.CommentField(id='2', label='X{{ form_var_computed_live_var_string }}Y', type='comment'),
|
||||
]
|
||||
formdef.store()
|
||||
formdef.data_class().wipe()
|
||||
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert 'XfooY' in resp.text
|
||||
|
||||
formdef.fields[0].value_template = (
|
||||
'{{ cards|objects:"%s"|first|get:"form_var_string"|default:"" }}' % carddef.url_name
|
||||
)
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert 'XY' in resp.text
|
||||
if pub.is_using_postgresql():
|
||||
assert pub.loggederror_class.count() == 1
|
||||
logged_error = pub.loggederror_class.select()[0]
|
||||
assert logged_error.summary == 'Invalid value "foo" for field "computed"'
|
||||
assert logged_error.formdef_id == formdef.id
|
||||
|
||||
formdef.fields[0].value_template = (
|
||||
'{{ cards|objects:"%s"|first|get:"form_var_bool"|default:"" }}' % carddef.url_name
|
||||
)
|
||||
formdef.store()
|
||||
resp = get_app(pub).get('/test/')
|
||||
assert 'XY' in resp.text
|
||||
if pub.is_using_postgresql():
|
||||
assert pub.loggederror_class.count() == 2
|
||||
logged_error = pub.loggederror_class.select(order_by='id')[1]
|
||||
assert logged_error.summary == 'Invalid value "True" for field "computed"'
|
||||
assert logged_error.formdef_id == formdef.id
|
||||
|
|
|
@ -669,6 +669,18 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
continue
|
||||
else:
|
||||
value = get_publisher().get_cached_complex_data(value)
|
||||
|
||||
if (
|
||||
field.data_source
|
||||
and field.data_source.get('type')
|
||||
and field.data_source['type'].startswith('carddef:')
|
||||
):
|
||||
try:
|
||||
int(str(value))
|
||||
except (TypeError, ValueError):
|
||||
get_publisher().record_error(
|
||||
_('Invalid value "%s" for field "%s"') % (value, field.varname),
|
||||
)
|
||||
computed_values[field.id] = value
|
||||
mapped_computed_values['form_var_%s' % field.varname] = LazyFieldVarComputed(
|
||||
{str(field.id): computed_values[field.id]}, field=field
|
||||
|
|
Loading…
Reference in New Issue