diff options
| author | Simon Charette <charette.s@gmail.com> | 2020-10-25 17:41:06 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-10-28 07:21:53 +0100 |
| commit | bbf141bcdc31f1324048af9233583a523ac54c94 (patch) | |
| tree | 0babf338ba1a5d8c5f5710a777eea60dd3b9aa3d /tests | |
| parent | 556fa4bbba5ba86bc1646a86fb11ab55405d4aa4 (diff) | |
Refs #27149 -- Fixed sql.Query identity.
By making Query subclass BaseExpression in
35431298226165986ad07e91f9d3aca721ff38ec the former defined it's
identity based off _construct_args which is not appropriate.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/lookup/test_lookups.py | 26 | ||||
| -rw-r--r-- | tests/queries/test_query.py | 28 |
2 files changed, 53 insertions, 1 deletions
diff --git a/tests/lookup/test_lookups.py b/tests/lookup/test_lookups.py index c3aa48ddad..4d90612048 100644 --- a/tests/lookup/test_lookups.py +++ b/tests/lookup/test_lookups.py @@ -1,10 +1,34 @@ from datetime import datetime +from unittest import mock from django.db.models import DateTimeField, Value -from django.db.models.lookups import YearLookup +from django.db.models.lookups import Lookup, YearLookup from django.test import SimpleTestCase +class CustomLookup(Lookup): + pass + + +class LookupTests(SimpleTestCase): + def test_equality(self): + lookup = Lookup(Value(1), Value(2)) + self.assertEqual(lookup, lookup) + self.assertEqual(lookup, Lookup(lookup.lhs, lookup.rhs)) + self.assertEqual(lookup, mock.ANY) + self.assertNotEqual(lookup, Lookup(lookup.lhs, Value(3))) + self.assertNotEqual(lookup, Lookup(Value(3), lookup.rhs)) + self.assertNotEqual(lookup, CustomLookup(lookup.lhs, lookup.rhs)) + + def test_hash(self): + lookup = Lookup(Value(1), Value(2)) + self.assertEqual(hash(lookup), hash(lookup)) + self.assertEqual(hash(lookup), hash(Lookup(lookup.lhs, lookup.rhs))) + self.assertNotEqual(hash(lookup), hash(Lookup(lookup.lhs, Value(3)))) + self.assertNotEqual(hash(lookup), hash(Lookup(Value(3), lookup.rhs))) + self.assertNotEqual(hash(lookup), hash(CustomLookup(lookup.lhs, lookup.rhs))) + + class YearLookupTests(SimpleTestCase): def test_get_bound_params(self): look_up = YearLookup( diff --git a/tests/queries/test_query.py b/tests/queries/test_query.py index 523fa607f0..5db9d96163 100644 --- a/tests/queries/test_query.py +++ b/tests/queries/test_query.py @@ -150,3 +150,31 @@ class TestQuery(SimpleTestCase): msg = 'Cannot filter against a non-conditional expression.' with self.assertRaisesMessage(TypeError, msg): query.build_where(Func(output_field=CharField())) + + def test_equality(self): + self.assertNotEqual( + Author.objects.all().query, + Author.objects.filter(item__name='foo').query, + ) + self.assertEqual( + Author.objects.filter(item__name='foo').query, + Author.objects.filter(item__name='foo').query, + ) + self.assertEqual( + Author.objects.filter(item__name='foo').query, + Author.objects.filter(Q(item__name='foo')).query, + ) + + def test_hash(self): + self.assertNotEqual( + hash(Author.objects.all().query), + hash(Author.objects.filter(item__name='foo').query) + ) + self.assertEqual( + hash(Author.objects.filter(item__name='foo').query), + hash(Author.objects.filter(item__name='foo').query), + ) + self.assertEqual( + hash(Author.objects.filter(item__name='foo').query), + hash(Author.objects.filter(Q(item__name='foo')).query), + ) |
