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_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_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_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)
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'))
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'])
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'))
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'])
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'])
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)
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'))
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_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)
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'])
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"]'))
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_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())