summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2012-12-17 23:48:23 +0200
committerAnssi Kääriäinen <akaariai@gmail.com>2013-01-06 19:18:29 +0200
commit69a46c5ca7d4e6819096af88cd8d51174efd46df (patch)
tree8e20849c803b47b68c9b3f49960ad14589fe98e1
parenta2396a4c8f2ccd7f91adee6d8c2e9c31f13f0e3f (diff)
Tests for various emptyqs tickets
The tickets are either about different signature between qs.none() and qs or problems with subclass types (either EmptyQS overrided the custom qs class, or EmptyQS was overridden by another class - values() did this). Fixed #15959, fixed #17271, fixed #17712, fixed #19426
-rw-r--r--tests/modeltests/basic/tests.py42
1 files changed, 41 insertions, 1 deletions
diff --git a/tests/modeltests/basic/tests.py b/tests/modeltests/basic/tests.py
index dba9a686d9..42375ceed9 100644
--- a/tests/modeltests/basic/tests.py
+++ b/tests/modeltests/basic/tests.py
@@ -4,7 +4,7 @@ from datetime import datetime
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.db.models.fields import Field, FieldDoesNotExist
-from django.db.models.query import EmptyQuerySet
+from django.db.models.query import QuerySet, EmptyQuerySet, ValuesListQuerySet
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature
from django.utils import six
from django.utils.translation import ugettext_lazy
@@ -646,3 +646,43 @@ class ModelTest(TestCase):
with self.assertRaises(TypeError):
EmptyQuerySet()
self.assertTrue(isinstance(Article.objects.none(), EmptyQuerySet))
+
+ def test_emptyqs_values(self):
+ # test for #15959
+ Article.objects.create(headline='foo', pub_date=datetime.now())
+ with self.assertNumQueries(0):
+ qs = Article.objects.none().values_list('pk')
+ self.assertTrue(isinstance(qs, EmptyQuerySet))
+ self.assertTrue(isinstance(qs, ValuesListQuerySet))
+ self.assertEqual(len(qs), 0)
+
+ def test_emptyqs_customqs(self):
+ # A hacky test for custom QuerySet subclass - refs #17271
+ Article.objects.create(headline='foo', pub_date=datetime.now())
+ class CustomQuerySet(QuerySet):
+ def do_something(self):
+ return 'did something'
+
+ qs = Article.objects.all()
+ qs.__class__ = CustomQuerySet
+ qs = qs.none()
+ with self.assertNumQueries(0):
+ self.assertEqual(len(qs), 0)
+ self.assertTrue(isinstance(qs, EmptyQuerySet))
+ self.assertEqual(qs.do_something(), 'did something')
+
+ def test_emptyqs_values_order(self):
+ # Tests for ticket #17712
+ Article.objects.create(headline='foo', pub_date=datetime.now())
+ with self.assertNumQueries(0):
+ self.assertEqual(len(Article.objects.none().values_list('id').order_by('id')), 0)
+ with self.assertNumQueries(0):
+ self.assertEqual(len(Article.objects.none().filter(
+ id__in=Article.objects.values_list('id', flat=True))), 0)
+
+ @skipUnlessDBFeature('can_distinct_on_fields')
+ def test_emptyqs_distinct(self):
+ # Tests for #19426
+ Article.objects.create(headline='foo', pub_date=datetime.now())
+ with self.assertNumQueries(0):
+ self.assertEqual(len(Article.objects.none().distinct('headline', 'pub_date')), 0)