From 088d3bc2f84b6b68fee7e5de053b58049bd110e7 Mon Sep 17 00:00:00 2001 From: Anssi Kääriäinen Date: Thu, 13 Dec 2012 13:33:11 +0200 Subject: Fixed #19462 -- Made assertQuerysetEqual detect undefined ordering If there are more than one values to compare against and the qs isn't ordered then assertQuerysetEqual will raise a ValueError. --- tests/regressiontests/test_utils/models.py | 6 ++++- tests/regressiontests/test_utils/tests.py | 40 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) (limited to 'tests/regressiontests/test_utils') diff --git a/tests/regressiontests/test_utils/models.py b/tests/regressiontests/test_utils/models.py index 4da7a07bbf..85a1031c02 100644 --- a/tests/regressiontests/test_utils/models.py +++ b/tests/regressiontests/test_utils/models.py @@ -1,5 +1,9 @@ from django.db import models +from django.utils.encoding import python_2_unicode_compatible - +@python_2_unicode_compatible class Person(models.Model): name = models.CharField(max_length=100) + + def __str__(self): + return self.name diff --git a/tests/regressiontests/test_utils/tests.py b/tests/regressiontests/test_utils/tests.py index 95913b5aab..d5d49b2104 100644 --- a/tests/regressiontests/test_utils/tests.py +++ b/tests/regressiontests/test_utils/tests.py @@ -54,6 +54,46 @@ class AssertNumQueriesTests(TestCase): self.assertNumQueries(2, test_func) +class AssertQuerysetEqualTests(TestCase): + def setUp(self): + self.p1 = Person.objects.create(name='p1') + self.p2 = Person.objects.create(name='p2') + + def test_ordered(self): + self.assertQuerysetEqual( + Person.objects.all().order_by('name'), + [repr(self.p1), repr(self.p2)] + ) + + def test_unordered(self): + self.assertQuerysetEqual( + Person.objects.all().order_by('name'), + [repr(self.p2), repr(self.p1)], + ordered=False + ) + + def test_transform(self): + self.assertQuerysetEqual( + Person.objects.all().order_by('name'), + [self.p1.pk, self.p2.pk], + transform=lambda x: x.pk + ) + + def test_undefined_order(self): + # Using an unordered queryset with more than one ordered value + # is an error. + with self.assertRaises(ValueError): + self.assertQuerysetEqual( + Person.objects.all(), + [repr(self.p1), repr(self.p2)] + ) + # No error for one value. + self.assertQuerysetEqual( + Person.objects.filter(name='p1'), + [repr(self.p1)] + ) + + class AssertNumQueriesContextManagerTests(TestCase): urls = 'regressiontests.test_utils.urls' -- cgit v1.3