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