misc: report an error when |objects is given an invalid card/form slug (#55415)
gitea/wcs/pipeline/head Build queued... Details

This commit is contained in:
Frédéric Péters 2023-12-23 15:58:30 +01:00
parent 6ff2c8c399
commit 76377600c1
5 changed files with 23 additions and 12 deletions

View File

@ -922,7 +922,7 @@ def test_inspect_page_missing_carddef_error(pub):
resp.form['template'] = '{{ cards|objects:"XXX" }}'
resp = resp.form.submit()
assert 'Failed to evaluate template' in resp.text
assert ' such card model: XXX' in resp.text
assert '|objects with invalid reference (\'XXX\')' in resp.text
def test_inspect_page_draft_formdata(pub, local_user):

View File

@ -727,17 +727,13 @@ def test_computed_field_with_bad_objects_filter_in_prefill(pub):
formdef.fields[0].value_template = '{{ cards|objects:"unknown"|first|get:"form_number_raw"|default:"" }}'
formdef.store()
pub.loggederror_class.wipe()
resp = get_app(pub).get('/test/')
assert 'XY' in resp.text
assert pub.loggederror_class.count() == 2
assert pub.loggederror_class.count() == 1
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.summary == '|objects with invalid reference (\'unknown\')'
assert logged_error.formdef_id == formdef.id

View File

@ -1350,6 +1350,14 @@ def test_objects_filter(pub):
logged_error = pub.loggederror_class.select()[0]
assert logged_error.summary == '|objects with invalid source (\'\')'
# called with missing source
pub.loggederror_class.wipe()
tmpl = Template('{{forms|objects:"bla bla bla"|count}}')
assert tmpl.render(context) == '0'
assert pub.loggederror_class.count() == 1
logged_error = pub.loggederror_class.select()[0]
assert logged_error.summary == '|objects with invalid reference (\'bla bla bla\')'
def test_lazy_formdata_queryset_distance(pub, variable_test_data):
# Form

View File

@ -73,8 +73,11 @@ def test_prefill_string_carddef():
field.prefill = {'type': 'string', 'value': '{{cards|objects:"foo"|first|get:"foo"}}'}
assert field.get_prefill_value() == ('hello world', False)
pub.loggederror_class.wipe()
field.prefill = {'type': 'string', 'value': '{{cards|objects:"unknown"|first|get:"foo"}}'}
assert field.get_prefill_value() == ('{{cards|objects:"unknown"|first|get:"foo"}}', False)
assert field.get_prefill_value() == ('None', False)
assert pub.loggederror_class.count() == 1
assert pub.loggederror_class.select()[0].summary == '|objects with invalid reference (\'unknown\')'
def test_prefill_user_email(user):

View File

@ -814,12 +814,16 @@ def done(queryset):
@register.filter
def objects(forms_source, slug):
from wcs.variables import CardsSource, FormsSource
from wcs.variables import CardsSource, FormDefDoesNotExist, FormsSource
if not isinstance(forms_source, (CardsSource, FormsSource)):
get_publisher().record_error(_('|objects with invalid source (%r)') % forms_source)
return None
return getattr(forms_source, unlazy(slug)).objects
try:
return getattr(forms_source, unlazy(slug)).objects
except FormDefDoesNotExist:
get_publisher().record_error(_('|objects with invalid reference (%r)') % slug)
return None
@register_queryset_filter