From 0e4e35722a03d2e4cb0b993f9b167103928b3199 Mon Sep 17 00:00:00 2001 From: Nick Pope Date: Sun, 21 Feb 2021 15:37:03 +0000 Subject: [PATCH] Fixed #32469 -- Made assertQuerysetEqual() respect maxDiff when ordered=False. --- django/test/testcases.py | 2 +- tests/test_utils/tests.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/django/test/testcases.py b/django/test/testcases.py index 5c8a46b153..eacf852118 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -1062,7 +1062,7 @@ class TransactionTestCase(SimpleTestCase): if transform is not None: items = map(transform, items) if not ordered: - return self.assertEqual(Counter(items), Counter(values), msg=msg) + return self.assertDictEqual(Counter(items), Counter(values), msg=msg) # For example qs.iterator() could be passed as qs, but it does not # have 'ordered' attribute. if len(values) > 1 and hasattr(qs, 'ordered') and not qs.ordered: diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py index 9255315e98..9465ace804 100644 --- a/tests/test_utils/tests.py +++ b/tests/test_utils/tests.py @@ -325,6 +325,37 @@ class AssertQuerysetEqualTests(TestCase): ordered=False ) + def test_maxdiff(self): + names = ['Joe Smith %s' % i for i in range(20)] + Person.objects.bulk_create([Person(name=name) for name in names]) + names.append('Extra Person') + + with self.assertRaises(AssertionError) as ctx: + self.assertQuerysetEqual( + Person.objects.filter(name__startswith='Joe'), + names, + ordered=False, + transform=lambda p: p.name, + ) + self.assertIn('Set self.maxDiff to None to see it.', str(ctx.exception)) + + original = self.maxDiff + self.maxDiff = None + try: + with self.assertRaises(AssertionError) as ctx: + self.assertQuerysetEqual( + Person.objects.filter(name__startswith='Joe'), + names, + ordered=False, + transform=lambda p: p.name, + ) + finally: + self.maxDiff = original + exception_msg = str(ctx.exception) + self.assertNotIn('Set self.maxDiff to None to see it.', exception_msg) + for name in names: + self.assertIn(name, exception_msg) + class AssertQuerysetEqualDeprecationTests(TestCase): @classmethod