Projet

Général

Profil

0004-custom-views-record-error-on-unknown-filter-59224.patch

Lauréline Guérin, 11 janvier 2022 16:39

Télécharger (5,6 ko)

Voir les différences:

Subject: [PATCH 4/4] custom-views: record error on unknown filter (#59224)

 tests/test_carddef.py        | 38 ++++++++++++++++++++++++++++++++++++
 tests/test_formdata.py       | 18 ++++++++++++++++-
 wcs/backoffice/management.py |  7 ++++++-
 wcs/custom_views.py          |  2 +-
 4 files changed, 62 insertions(+), 3 deletions(-)
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
-