|
@@ -0,0 +1,59 @@
|
|
|
+from django.contrib import admin
|
|
|
+from django.test import TestCase, RequestFactory
|
|
|
+from django.utils.encoding import smart_text
|
|
|
+from jet.filters import RelatedFieldAjaxListFilter
|
|
|
+from jet.tests.models import RelatedToTestModel, TestModel
|
|
|
+
|
|
|
+try:
|
|
|
+ from django.contrib.admin.utils import get_fields_from_path
|
|
|
+except ImportError: # Django 1.6
|
|
|
+ from django.contrib.admin.util import get_fields_from_path
|
|
|
+
|
|
|
+
|
|
|
+class FiltersTestCase(TestCase):
|
|
|
+ models = []
|
|
|
+ factory = None
|
|
|
+
|
|
|
+ def setUp(self):
|
|
|
+ self.factory = RequestFactory()
|
|
|
+ self.models.append(TestModel.objects.create(field1='first', field2=1))
|
|
|
+ self.models.append(TestModel.objects.create(field1='second', field2=2))
|
|
|
+
|
|
|
+ def get_related_field_ajax_list_filter_params(self):
|
|
|
+ class ModelAdmin(admin.ModelAdmin):
|
|
|
+ pass
|
|
|
+
|
|
|
+ model = RelatedToTestModel
|
|
|
+ field_path = 'field'
|
|
|
+ field = get_fields_from_path(model, field_path)[-1]
|
|
|
+ lookup_params = {}
|
|
|
+ model_admin = ModelAdmin
|
|
|
+
|
|
|
+ return field, lookup_params, model, model_admin, field_path
|
|
|
+
|
|
|
+ def test_related_field_ajax_list_filter(self):
|
|
|
+ request = self.factory.get('url')
|
|
|
+ field, lookup_params, model, model_admin, field_path = self.get_related_field_ajax_list_filter_params()
|
|
|
+ list_filter = RelatedFieldAjaxListFilter(field, request, lookup_params, model, model_admin, field_path)
|
|
|
+
|
|
|
+ self.assertTrue(list_filter.has_output())
|
|
|
+
|
|
|
+ choices = list_filter.field_choices(field, request, model_admin)
|
|
|
+
|
|
|
+ self.assertIsInstance(choices, list)
|
|
|
+ self.assertEqual(len(choices), 0)
|
|
|
+
|
|
|
+ def test_related_field_ajax_list_filter_with_initial(self):
|
|
|
+ initial = self.models[1]
|
|
|
+ request = self.factory.get('url', {'field__id__exact': initial.pk})
|
|
|
+ field, lookup_params, model, model_admin, field_path = self.get_related_field_ajax_list_filter_params()
|
|
|
+ list_filter = RelatedFieldAjaxListFilter(field, request, lookup_params, model, model_admin, field_path)
|
|
|
+
|
|
|
+ self.assertTrue(list_filter.has_output())
|
|
|
+
|
|
|
+ choices = list_filter.field_choices(field, request, model_admin)
|
|
|
+
|
|
|
+ self.assertIsInstance(choices, list)
|
|
|
+ self.assertEqual(len(choices), 1)
|
|
|
+ self.assertEqual(choices[0], (initial.pk, smart_text(initial)))
|
|
|
+
|