test_filters.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from django.contrib import admin
  2. from django.test import TestCase, RequestFactory
  3. from django.utils.encoding import smart_text
  4. from jet.filters import RelatedFieldAjaxListFilter
  5. from jet.tests.models import RelatedToTestModel, TestModel
  6. try:
  7. from django.contrib.admin.utils import get_fields_from_path
  8. except ImportError: # Django 1.6
  9. from django.contrib.admin.util import get_fields_from_path
  10. class FiltersTestCase(TestCase):
  11. models = []
  12. factory = None
  13. def setUp(self):
  14. self.factory = RequestFactory()
  15. self.models.append(TestModel.objects.create(field1='first', field2=1))
  16. self.models.append(TestModel.objects.create(field1='second', field2=2))
  17. def get_related_field_ajax_list_filter_params(self):
  18. class ModelAdmin(admin.ModelAdmin):
  19. pass
  20. model = RelatedToTestModel
  21. field_path = 'field'
  22. field = get_fields_from_path(model, field_path)[-1]
  23. lookup_params = {}
  24. model_admin = ModelAdmin
  25. return field, lookup_params, model, model_admin, field_path
  26. def test_related_field_ajax_list_filter(self):
  27. request = self.factory.get('url')
  28. field, lookup_params, model, model_admin, field_path = self.get_related_field_ajax_list_filter_params()
  29. list_filter = RelatedFieldAjaxListFilter(field, request, lookup_params, model, model_admin, field_path)
  30. self.assertTrue(list_filter.has_output())
  31. choices = list_filter.field_choices(field, request, model_admin)
  32. self.assertIsInstance(choices, list)
  33. self.assertEqual(len(choices), 0)
  34. def test_related_field_ajax_list_filter_with_initial(self):
  35. initial = self.models[1]
  36. request = self.factory.get('url', {'field__id__exact': initial.pk})
  37. field, lookup_params, model, model_admin, field_path = self.get_related_field_ajax_list_filter_params()
  38. list_filter = RelatedFieldAjaxListFilter(field, request, lookup_params, model, model_admin, field_path)
  39. self.assertTrue(list_filter.has_output())
  40. choices = list_filter.field_choices(field, request, model_admin)
  41. self.assertIsInstance(choices, list)
  42. self.assertEqual(len(choices), 1)
  43. self.assertEqual(choices[0], (initial.pk, smart_text(initial)))