test_contains.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from django.test import TestCase
  2. from .models import DumbCategory, NamedCategory, ProxyCategory
  3. class ContainsTests(TestCase):
  4. @classmethod
  5. def setUpTestData(cls):
  6. cls.category = DumbCategory.objects.create()
  7. cls.proxy_category = ProxyCategory.objects.create()
  8. def test_unsaved_obj(self):
  9. msg = 'QuerySet.contains() cannot be used on unsaved objects.'
  10. with self.assertRaisesMessage(ValueError, msg):
  11. DumbCategory.objects.contains(DumbCategory())
  12. def test_obj_type(self):
  13. msg = "'obj' must be a model instance."
  14. with self.assertRaisesMessage(TypeError, msg):
  15. DumbCategory.objects.contains(object())
  16. def test_values(self):
  17. msg = 'Cannot call QuerySet.contains() after .values() or .values_list().'
  18. with self.assertRaisesMessage(TypeError, msg):
  19. DumbCategory.objects.values_list('pk').contains(self.category)
  20. with self.assertRaisesMessage(TypeError, msg):
  21. DumbCategory.objects.values('pk').contains(self.category)
  22. def test_basic(self):
  23. with self.assertNumQueries(1):
  24. self.assertIs(DumbCategory.objects.contains(self.category), True)
  25. # QuerySet.contains() doesn't evaluate a queryset.
  26. with self.assertNumQueries(1):
  27. self.assertIs(DumbCategory.objects.contains(self.category), True)
  28. def test_evaluated_queryset(self):
  29. qs = DumbCategory.objects.all()
  30. proxy_qs = ProxyCategory.objects.all()
  31. # Evaluate querysets.
  32. list(qs)
  33. list(proxy_qs)
  34. with self.assertNumQueries(0):
  35. self.assertIs(qs.contains(self.category), True)
  36. self.assertIs(qs.contains(self.proxy_category), True)
  37. self.assertIs(proxy_qs.contains(self.category), True)
  38. self.assertIs(proxy_qs.contains(self.proxy_category), True)
  39. def test_proxy_model(self):
  40. with self.assertNumQueries(1):
  41. self.assertIs(DumbCategory.objects.contains(self.proxy_category), True)
  42. with self.assertNumQueries(1):
  43. self.assertIs(ProxyCategory.objects.contains(self.category), True)
  44. def test_wrong_model(self):
  45. qs = DumbCategory.objects.all()
  46. named_category = NamedCategory(name='category')
  47. with self.assertNumQueries(0):
  48. self.assertIs(qs.contains(named_category), False)
  49. # Evaluate the queryset.
  50. list(qs)
  51. with self.assertNumQueries(0):
  52. self.assertIs(qs.contains(named_category), False)