diff --git a/tests/testapp/management/commands/createtestdata.py b/tests/testapp/management/commands/createtestdata.py index 1dfc5ce..9d99af3 100644 --- a/tests/testapp/management/commands/createtestdata.py +++ b/tests/testapp/management/commands/createtestdata.py @@ -23,8 +23,9 @@ def create_test_data(): ModelA.objects.all().delete() ModelB.objects.all().delete() + # TODO: create null values as well c_models = list() - for i in range(1, 30): + for i in range(1, 36): model_a = ModelA() model_b = ModelB() model_c = ModelC() @@ -38,8 +39,8 @@ def create_test_data(): model_a.dropdown_lte3 = i % 3 model_a.dropdown_gt3 = i % 4 model_a.choices_dropdown = i % 9 +1 - model_a.multiselect = i % 4 - model_a.multiselect_dropdown = i % 4 + model_a.multiselect = i % 5 + model_a.multiselect_dropdown = i % 6 model_a.related_dropdown = model_b model_a.multiselect_related = model_b model_a.multiselect_related_dropdown = model_b diff --git a/tests/testapp/tests/test_filters.py b/tests/testapp/tests/test_filters.py index 54a5de8..91909a7 100644 --- a/tests/testapp/tests/test_filters.py +++ b/tests/testapp/tests/test_filters.py @@ -17,7 +17,7 @@ class FilterTest(TestCase): self.client.force_login(self.admin) self.url = reverse('admin:testapp_modela_changelist') - def test_01_dropdown_select(self): + def test_01_dropdown(self): resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) @@ -31,3 +31,22 @@ class FilterTest(TestCase): self.assertIn('choices-dropdown_filter_select', resp.content.decode('utf8')) self.assertIn('related-dropdown_filter_select', resp.content.decode('utf8')) self.assertIn('multiselect-related-dropdown_select', resp.content.decode('utf8')) + + def test_02_filtering(self): + queries = ( + ('', 35), + ('dropdown_gt3=1&dropdown_lte3=0', 3), + ('dropdown_gt3=1&multiselect_dropdown__in=3', 3), + ('dropdown_gt3=1&multiselect_dropdown__in=3,4,5', 6), + ('choices_dropdown__exact=3&multiselect_dropdown__in=0,1,2', 2), + ('multiselect_dropdown__in=0,1,2&related_dropdown__id__exact=6', 1), + ('related_dropdown__id__exact=6&multiselect_dropdown__in=3,4,5', 0), + ('multiselect_dropdown__in=3,4,5&multiselect_related__id__in=35,34,33,32', 3), + ('multiselect_dropdown__in=3,4,5&multiselect_related_dropdown__id__in=29,30,31,32,33,34,35', 4), + ('boolean_annotation__exact=1&multiselect__in=0,2,4', 14), + ) + for query, count in queries: + resp = self.client.get(self.url + '?' + query) + self.assertEqual(resp.status_code, 200) + self.assertIn('{} selected'.format(count), resp.content.decode('utf8')) +