|
@@ -0,0 +1,62 @@
|
|
|
+from django.test import TestCase
|
|
|
+
|
|
|
+from .models import DumbCategory, NamedCategory, ProxyCategory
|
|
|
+
|
|
|
+
|
|
|
+class ContainsTests(TestCase):
|
|
|
+ @classmethod
|
|
|
+ def setUpTestData(cls):
|
|
|
+ cls.category = DumbCategory.objects.create()
|
|
|
+ cls.proxy_category = ProxyCategory.objects.create()
|
|
|
+
|
|
|
+ def test_unsaved_obj(self):
|
|
|
+ msg = 'QuerySet.contains() cannot be used on unsaved objects.'
|
|
|
+ with self.assertRaisesMessage(ValueError, msg):
|
|
|
+ DumbCategory.objects.contains(DumbCategory())
|
|
|
+
|
|
|
+ def test_obj_type(self):
|
|
|
+ msg = "'obj' must be a model instance."
|
|
|
+ with self.assertRaisesMessage(TypeError, msg):
|
|
|
+ DumbCategory.objects.contains(object())
|
|
|
+
|
|
|
+ def test_values(self):
|
|
|
+ msg = 'Cannot call QuerySet.contains() after .values() or .values_list().'
|
|
|
+ with self.assertRaisesMessage(TypeError, msg):
|
|
|
+ DumbCategory.objects.values_list('pk').contains(self.category)
|
|
|
+ with self.assertRaisesMessage(TypeError, msg):
|
|
|
+ DumbCategory.objects.values('pk').contains(self.category)
|
|
|
+
|
|
|
+ def test_basic(self):
|
|
|
+ with self.assertNumQueries(1):
|
|
|
+ self.assertIs(DumbCategory.objects.contains(self.category), True)
|
|
|
+ # QuerySet.contains() doesn't evaluate a queryset.
|
|
|
+ with self.assertNumQueries(1):
|
|
|
+ self.assertIs(DumbCategory.objects.contains(self.category), True)
|
|
|
+
|
|
|
+ def test_evaluated_queryset(self):
|
|
|
+ qs = DumbCategory.objects.all()
|
|
|
+ proxy_qs = ProxyCategory.objects.all()
|
|
|
+ # Evaluate querysets.
|
|
|
+ list(qs)
|
|
|
+ list(proxy_qs)
|
|
|
+ with self.assertNumQueries(0):
|
|
|
+ self.assertIs(qs.contains(self.category), True)
|
|
|
+ self.assertIs(qs.contains(self.proxy_category), True)
|
|
|
+ self.assertIs(proxy_qs.contains(self.category), True)
|
|
|
+ self.assertIs(proxy_qs.contains(self.proxy_category), True)
|
|
|
+
|
|
|
+ def test_proxy_model(self):
|
|
|
+ with self.assertNumQueries(1):
|
|
|
+ self.assertIs(DumbCategory.objects.contains(self.proxy_category), True)
|
|
|
+ with self.assertNumQueries(1):
|
|
|
+ self.assertIs(ProxyCategory.objects.contains(self.category), True)
|
|
|
+
|
|
|
+ def test_wrong_model(self):
|
|
|
+ qs = DumbCategory.objects.all()
|
|
|
+ named_category = NamedCategory(name='category')
|
|
|
+ with self.assertNumQueries(0):
|
|
|
+ self.assertIs(qs.contains(named_category), False)
|
|
|
+ # Evaluate the queryset.
|
|
|
+ list(qs)
|
|
|
+ with self.assertNumQueries(0):
|
|
|
+ self.assertIs(qs.contains(named_category), False)
|