summaryrefslogtreecommitdiff
path: root/tests/test_utils/tests.py
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2020-10-18 18:29:52 +0200
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-11-06 09:24:50 +0100
commit3f7b3275627385f8f7531fca01cdda50d4ec6b6e (patch)
treefb082d40e73f6c877911eab92229ac21cdfaa5bc /tests/test_utils/tests.py
parent13b6fff11703a694e155b84d41d02822bbc0aaa0 (diff)
Fixed #31235 -- Made assertQuerysetEqual() compare querysets directly.
This also replaces assertQuerysetEqual() to assertSequenceEqual()/assertCountEqual() where appropriate. Co-authored-by: Peter Inglesby <peter.inglesby@gmail.com> Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'tests/test_utils/tests.py')
-rw-r--r--tests/test_utils/tests.py68
1 files changed, 57 insertions, 11 deletions
diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py
index 51e3c0548a..9255315e98 100644
--- a/tests/test_utils/tests.py
+++ b/tests/test_utils/tests.py
@@ -16,8 +16,8 @@ from django.forms import EmailField, IntegerField
from django.http import HttpResponse
from django.template.loader import render_to_string
from django.test import (
- SimpleTestCase, TestCase, TransactionTestCase, skipIfDBFeature,
- skipUnlessDBFeature,
+ SimpleTestCase, TestCase, TransactionTestCase, ignore_warnings,
+ skipIfDBFeature, skipUnlessDBFeature,
)
from django.test.html import HTMLParseError, parse_html
from django.test.utils import (
@@ -25,6 +25,7 @@ from django.test.utils import (
override_settings, setup_test_environment,
)
from django.urls import NoReverseMatch, path, reverse, reverse_lazy
+from django.utils.deprecation import RemovedInDjango41Warning
from .models import Car, Person, PossessedCar
from .views import empty_response
@@ -243,19 +244,34 @@ class AssertQuerysetEqualTests(TestCase):
cls.p1 = Person.objects.create(name='p1')
cls.p2 = Person.objects.create(name='p2')
+ def test_empty(self):
+ self.assertQuerysetEqual(Person.objects.filter(name='p3'), [])
+
def test_ordered(self):
self.assertQuerysetEqual(
Person.objects.all().order_by('name'),
- [repr(self.p1), repr(self.p2)]
+ [self.p1, self.p2],
)
def test_unordered(self):
self.assertQuerysetEqual(
Person.objects.all().order_by('name'),
- [repr(self.p2), repr(self.p1)],
+ [self.p2, self.p1],
ordered=False
)
+ def test_queryset(self):
+ self.assertQuerysetEqual(
+ Person.objects.all().order_by('name'),
+ Person.objects.all().order_by('name'),
+ )
+
+ def test_flat_values_list(self):
+ self.assertQuerysetEqual(
+ Person.objects.all().order_by('name').values_list('name', flat=True),
+ ['p1', 'p2'],
+ )
+
def test_transform(self):
self.assertQuerysetEqual(
Person.objects.all().order_by('name'),
@@ -263,6 +279,13 @@ class AssertQuerysetEqualTests(TestCase):
transform=lambda x: x.pk
)
+ def test_repr_transform(self):
+ self.assertQuerysetEqual(
+ Person.objects.all().order_by('name'),
+ [repr(self.p1), repr(self.p2)],
+ transform=repr,
+ )
+
def test_undefined_order(self):
# Using an unordered queryset with more than one ordered value
# is an error.
@@ -270,13 +293,10 @@ class AssertQuerysetEqualTests(TestCase):
with self.assertRaisesMessage(ValueError, msg):
self.assertQuerysetEqual(
Person.objects.all(),
- [repr(self.p1), repr(self.p2)]
+ [self.p1, self.p2],
)
# No error for one value.
- self.assertQuerysetEqual(
- Person.objects.filter(name='p1'),
- [repr(self.p1)]
- )
+ self.assertQuerysetEqual(Person.objects.filter(name='p1'), [self.p1])
def test_repeated_values(self):
"""
@@ -296,16 +316,42 @@ class AssertQuerysetEqualTests(TestCase):
with self.assertRaises(AssertionError):
self.assertQuerysetEqual(
self.p1.cars.all(),
- [repr(batmobile), repr(k2000)],
+ [batmobile, k2000],
ordered=False
)
self.assertQuerysetEqual(
self.p1.cars.all(),
- [repr(batmobile)] * 2 + [repr(k2000)] * 4,
+ [batmobile] * 2 + [k2000] * 4,
ordered=False
)
+class AssertQuerysetEqualDeprecationTests(TestCase):
+ @classmethod
+ def setUpTestData(cls):
+ cls.p1 = Person.objects.create(name='p1')
+ cls.p2 = Person.objects.create(name='p2')
+
+ @ignore_warnings(category=RemovedInDjango41Warning)
+ def test_str_values(self):
+ self.assertQuerysetEqual(
+ Person.objects.all().order_by('name'),
+ [repr(self.p1), repr(self.p2)],
+ )
+
+ def test_str_values_warning(self):
+ msg = (
+ "In Django 4.1, repr() will not be called automatically on a "
+ "queryset when compared to string values. Set an explicit "
+ "'transform' to silence this warning."
+ )
+ with self.assertRaisesMessage(RemovedInDjango41Warning, msg):
+ self.assertQuerysetEqual(
+ Person.objects.all().order_by('name'),
+ [repr(self.p1), repr(self.p2)],
+ )
+
+
@override_settings(ROOT_URLCONF='test_utils.urls')
class CaptureQueriesContextManagerTests(TestCase):