0004-custom-views-record-error-on-unknown-filter-59224.patch
tests/test_carddef.py | ||
---|---|---|
422 | 422 |
assert CardDef.get_data_source_custom_view('carddef:foo-2:view', carddef=carddef1) is None |
423 | 423 | |
424 | 424 | |
425 |
def test_data_source_custom_view_unknown_filter(pub): |
|
426 |
CardDef.wipe() |
|
427 |
carddef = CardDef() |
|
428 |
carddef.name = 'foo' |
|
429 |
carddef.fields = [ |
|
430 |
StringField(id='1', label='Test', type='string', varname='foo'), |
|
431 |
] |
|
432 |
carddef.digest_templates = {'default': '{{ form_var_foo }}'} |
|
433 |
carddef.store() |
|
434 |
carddef.data_class().wipe() |
|
435 | ||
436 |
carddata = carddef.data_class()() |
|
437 |
carddata.data = {'1': 'Hello'} |
|
438 |
carddata.just_created() |
|
439 |
carddata.store() |
|
440 | ||
441 |
pub.custom_view_class.wipe() |
|
442 |
custom_view = pub.custom_view_class() |
|
443 |
custom_view.title = 'view' |
|
444 |
custom_view.formdef = carddef |
|
445 |
custom_view.columns = {'list': [{'id': 'id'}]} |
|
446 |
custom_view.filters = {'filter-42': 'on', 'filter-42-value': 'Hello', 'filter-foobar': 'baz'} |
|
447 |
custom_view.visibility = 'datasource' |
|
448 |
custom_view.store() |
|
449 | ||
450 |
assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo')] == ['Hello'] |
|
451 |
assert [i['text'] for i in CardDef.get_data_source_items('carddef:foo:view')] == [] |
|
452 |
if pub.is_using_postgresql(): |
|
453 |
assert pub.loggederror_class.count() == 2 |
|
454 |
logged_error = pub.loggederror_class.select(order_by='id')[0] |
|
455 |
assert logged_error.summary == 'Invalid filter "42"' |
|
456 |
assert logged_error.formdef_id == str(carddef.id) |
|
457 |
logged_error = pub.loggederror_class.select(order_by='id')[1] |
|
458 |
assert logged_error.summary == 'Invalid filter "foobar"' |
|
459 |
assert logged_error.formdef_id == str(carddef.id) |
|
460 | ||
461 | ||
425 | 462 |
def test_data_source_custom_view_digest(pub): |
426 | 463 |
CardDef.wipe() |
427 | 464 |
carddef = CardDef() |
... | ... | |
443 | 480 |
carddata2.just_created() |
444 | 481 |
carddata2.store() |
445 | 482 | |
483 |
pub.custom_view_class.wipe() |
|
446 | 484 |
custom_view = pub.custom_view_class() |
447 | 485 |
custom_view.title = 'view' |
448 | 486 |
custom_view.formdef = carddef |
tests/test_formdata.py | ||
---|---|---|
1763 | 1763 |
tmpl = Template('{{forms|objects:"foobarlazy"|with_custom_view:"unknown"|count}}') |
1764 | 1764 |
assert tmpl.render(context) == '0' |
1765 | 1765 | |
1766 |
pub.custom_view_class.wipe() |
|
1766 |
custom_view4 = pub.custom_view_class() |
|
1767 |
custom_view4.title = 'unknown filter' |
|
1768 |
custom_view4.formdef = formdef |
|
1769 |
custom_view4.columns = {'list': [{'id': 'id'}]} |
|
1770 |
custom_view4.filters = {'filter-42': 'on', 'filter-42-value': 'foo', 'filter-foobar': 'baz'} |
|
1771 |
custom_view4.visibility = 'any' |
|
1772 |
custom_view4.store() |
|
1773 |
tmpl = Template('{{forms|objects:"foobarlazy"|with_custom_view:"unknown-filter"|count}}') |
|
1774 |
assert tmpl.render(context) == '0' |
|
1775 |
if pub.is_using_postgresql(): |
|
1776 |
assert pub.loggederror_class.count() == 2 |
|
1777 |
logged_error = pub.loggederror_class.select(order_by='id')[0] |
|
1778 |
assert logged_error.summary == 'Invalid filter "42"' |
|
1779 |
assert logged_error.formdef_id == str(formdef.id) |
|
1780 |
logged_error = pub.loggederror_class.select(order_by='id')[1] |
|
1781 |
assert logged_error.summary == 'Invalid filter "foobar"' |
|
1782 |
assert logged_error.formdef_id == str(formdef.id) |
|
1767 | 1783 | |
1768 | 1784 | |
1769 | 1785 |
def test_lazy_variables(pub, variable_test_data): |
wcs/backoffice/management.py | ||
---|---|---|
1639 | 1639 |
query_overrides = get_request().form |
1640 | 1640 |
return self.get_view_criterias(query_overrides, request=get_request()) |
1641 | 1641 | |
1642 |
def get_view_criterias(self, query_overrides=None, request=None): |
|
1642 |
def get_view_criterias(self, query_overrides=None, request=None, record_errors=False):
|
|
1643 | 1643 |
from wcs import sql |
1644 | 1644 | |
1645 | 1645 |
fake_fields = [ |
... | ... | |
1829 | 1829 |
raise RequestError(error_message) |
1830 | 1830 |
if self.view_type == 'table': |
1831 | 1831 |
get_session().message = ('warning', error_message) |
1832 |
if record_errors: |
|
1833 |
for unknown_filter in unknown_filters: |
|
1834 |
get_publisher().record_error( |
|
1835 |
_('Invalid filter "%s"') % unknown_filter, formdef=self.formdef |
|
1836 |
) |
|
1832 | 1837 |
criterias.append(Equal('status', '_none')) |
1833 | 1838 | |
1834 | 1839 |
return criterias |
wcs/custom_views.py | ||
---|---|---|
159 | 159 |
formdef = self.formdef |
160 | 160 | |
161 | 161 |
form_page = FormPage(formdef=formdef, view=self, update_breadcrumbs=False) |
162 |
criterias = form_page.get_view_criterias() |
|
162 |
criterias = form_page.get_view_criterias(record_errors=True)
|
|
163 | 163 | |
164 | 164 |
selected_filter = self.get_filter() |
165 | 165 |
if selected_filter and selected_filter != 'all': |
166 |
- |