def test_filter(self):
        class FilterOne(AbstractFilter):
            def filter(self, queryobject):
                return queryobject.filter(mycharfield='test')

        class FilterTwo(AbstractFilter):
            def filter(self, queryobject):
                return queryobject.filter(mybooleanfield=True)

        match = baker.make('cradmin_viewhelpers_testapp.FilterTestModel',
                           mycharfield='test',
                           mybooleanfield=True)
        baker.make('cradmin_viewhelpers_testapp.FilterTestModel',
                   mycharfield='no match',
                   mybooleanfield=True)
        baker.make('cradmin_viewhelpers_testapp.FilterTestModel',
                   mycharfield='test',
                   mybooleanfield=False)

        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(FilterOne(slug='filterone'))
        filterlist.append(FilterTwo(slug='filtertwo'))
        queryset = filterlist.filter(FilterTestModel.objects.all())
        self.assertEqual({match}, set(queryset))
 def test_append(self):
     filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                     target_dom_id='testdomid')
     testchild = MinimalFilterGroupChild()
     filterlist.append(testchild)
     self.assertEqual([testchild], filterlist.children)
     self.assertEqual(filterlist, testchild.filterlist)
 def test_render(self):
     filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                     target_dom_id='testdomid')
     filterlist.append(MinimalFilterGroupChild())
     filterlist.append(MinimalFilterGroupChild())
     selector = htmls.S(filterlist.render(request=mock.MagicMock()))
     self.assertEqual(2, selector.count('li'))
 def test_set_filters_string_invalid_slug(self):
     filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                     target_dom_id='testdomid')
     stringfilter = MinimalStringFilter()
     filterlist.append(stringfilter)
     with self.assertRaisesMessage(InvalidFiltersStringError,
                                   '"x" is not a valid filter slug.'):
         filterlist.set_filters_string('x-10')
 def test_set_filters_string(self):
     filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                     target_dom_id='testdomid')
     intfilter = MinimalIntFilter()
     stringfilter = MinimalStringFilter()
     filterlist.append(intfilter)
     filterlist.append(stringfilter)
     filterlist.set_filters_string('i-10/s-test')
     self.assertEqual(['10'], intfilter.values)
     self.assertEqual(['test'], stringfilter.values)
Example #6
0
 def test_build_clear_values_url(self):
     stringfilter = MinimalStringFilter()
     stringfilter.set_values(values=['a', 'b'])
     intfilter = MinimalIntFilter()
     intfilter.set_values(values=['10'])
     filterlist = AbstractFilterList(urlbuilder=lambda filters_string:
                                     '/test/{}'.format(filters_string),
                                     target_dom_id='testdomid')
     filterlist.append(stringfilter)
     filterlist.append(intfilter)
     stringfilter.set_filterlist(filterlist)
     self.assertEqual('/test/i-10', stringfilter.build_clear_values_url())
Example #7
0
    def test_render_option_label(self):
        class MySelectFilter(AbstractSelectFilter):
            def get_choices(self):
                return [
                    ('somevalue', 'Test'),
                ]

        testfilter = MySelectFilter(slug='test')
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual('Test', selector.one('option').alltext_normalized)
Example #8
0
    def test_render_label_no_label(self):
        class MySelectFilter(AbstractSelectFilter):
            def get_choices(self):
                return [
                    ('unused', 'unused'),
                ]

        testfilter = MySelectFilter(slug='test')
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertFalse(selector.exists('label'))
Example #9
0
    def test_render_option_value_empty(self):
        class MySelectFilter(AbstractSelectFilter):
            def get_choices(self):
                return [
                    ('', 'Do not apply'),
                ]

        testfilter = MySelectFilter(slug='test')
        filterlist = AbstractFilterList(urlbuilder=lambda filters_string:
                                        '/test/{}'.format(filters_string),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual('/test/', selector.one('option')['value'])
Example #10
0
    def test_render_radio_checked(self):
        class MyRadioFilter(AbstractRadioFilter):
            def get_choices(self):
                return [
                    ('somevalue', 'Test'),
                ]

        testfilter = MyRadioFilter(slug='test')
        testfilter.set_values(values=['somevalue'])
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertTrue(
            selector.one('input[type="radio"]').hasattribute('checked'))
Example #11
0
    def test_render_label_has_label(self):
        class MySelectFilter(AbstractSelectFilter):
            def get_choices(self):
                return [
                    ('unused', 'unused'),
                ]

        testfilter = MySelectFilter(slug='test', label='A label')
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual('A label', selector.one('label').alltext_normalized)
        self.assertEqual('cradmin_legacy_listfilter_test_input',
                         selector.one('label')['for'])
Example #12
0
    def test_render_add_value(self):
        class MyRadioFilter(AbstractRadioFilter):
            def get_choices(self):
                return [
                    ('first', 'First choice'),
                ]

        testfilter = MyRadioFilter(slug='test')
        testfilter.set_values(values=[])
        filterlist = AbstractFilterList(urlbuilder=lambda filters_string:
                                        '/test/{}'.format(filters_string),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual('/test/test-first',
                         selector.one('input[type="radio"]')['data-url'])
Example #13
0
    def test_render_radio_label(self):
        class MyRadioFilter(AbstractRadioFilter):
            def get_choices(self):
                return [
                    ('somevalue', 'Test'),
                ]

        testfilter = MyRadioFilter(slug='test')
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual(
            'Test',
            selector.one(
                '#cradmin_legacy_listfilter_test_input_somevalue_wrapper').
            alltext_normalized)
Example #14
0
    def test_render_label_get_label_is_screenreader_only_true(self):
        class MySelectFilter(AbstractSelectFilter):
            def get_choices(self):
                return [
                    ('unused', 'unused'),
                ]

            def get_label_is_screenreader_only(self):
                return True

        testfilter = MySelectFilter(slug='test', label='A label')
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertTrue(selector.exists('label'))
        self.assertTrue(selector.one('label').hasclass('sr-only'))
Example #15
0
    def test_render_option_selected(self):
        class MySelectFilter(AbstractSelectFilter):
            def get_choices(self):
                return [
                    ('', 'Do not apply'),
                    ('first', 'First choice'),
                    ('second', 'Second choice'),
                ]

        testfilter = MySelectFilter(slug='test')
        testfilter.set_values(values=['first'])
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual('First choice',
                         selector.one('option[selected]').alltext_normalized)
    def test_render_remove_value_multiple(self):
        class MyChecboxFilter(AbstractCheckboxFilter):
            def get_choices(self):
                return [
                    ('first', 'First choice'),
                    ('second', 'Second choice'),
                    ('third', 'Third choice'),
                ]

        testfilter = MyChecboxFilter(slug='test')
        testfilter.set_values(values=['first', 'second', 'third'])
        filterlist = AbstractFilterList(urlbuilder=lambda filters_string:
                                        '/test/{}'.format(filters_string),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertEqual(
            '/test/test-first%2Cthird',
            selector.one('input#cradmin_legacy_listfilter_test_input_second')
            ['data-url'])
Example #17
0
    def test_render_sanity(self):
        class MyRadioFilter(AbstractRadioFilter):
            def get_choices(self):
                return [
                    ('first', 'First choice'),
                    ('second', 'Second choice'),
                    ('third', 'Third choice'),
                ]

        testfilter = MyRadioFilter(slug='test')
        filterlist = AbstractFilterList(urlbuilder=mock.MagicMock(),
                                        target_dom_id='testdomid')
        filterlist.append(testfilter)
        selector = htmls.S(testfilter.render())
        self.assertTrue(
            selector.exists(
                '#cradmin_legacy_listfilter_test.cradmin-legacy-listfilter-filter'
            ))
        self.assertTrue(
            selector.exists('#cradmin_legacy_listfilter_test_input'))
        self.assertEqual(3, selector.count('input[type="radio"]'))