瀏覽代碼

Add filter test

Denis K 9 年之前
父節點
當前提交
5c3da02144
共有 3 個文件被更改,包括 68 次插入0 次删除
  1. 1 0
      jet/tests/__init__.py
  2. 8 0
      jet/tests/models.py
  3. 59 0
      jet/tests/test_filters.py

+ 1 - 0
jet/tests/__init__.py

@@ -1,3 +1,4 @@
 from jet.tests.test_dashboard import DashboardTestCase
 from jet.tests.test_utils import UtilsTestCase
 from jet.tests.test_views import ViewsTestCase
+from jet.tests.test_filters import FiltersTestCase

+ 8 - 0
jet/tests/models.py

@@ -11,6 +11,14 @@ class TestModel(models.Model):
         return '%s%d' % (self.field1, self.field2)
 
 
+@python_2_unicode_compatible
+class RelatedToTestModel(models.Model):
+    field = models.ForeignKey(TestModel)
+
+    def __str__(self):
+        return self.field
+
+
 @python_2_unicode_compatible
 class SearchableTestModel(models.Model):
     field1 = models.CharField(max_length=255)

+ 59 - 0
jet/tests/test_filters.py

@@ -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)))
+