summaryrefslogtreecommitdiff
path: root/tests/basic
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2013-08-14 11:05:01 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2013-08-22 17:24:07 +0300
commit6af05e7a0f0e4604d6a67899acaa99d73ec0dfaa (patch)
treede9bc5025ba6062a3ff71cb234c6e0c84a9daf9c /tests/basic
parent768bbf3efe0c412bced1e865e90139a0f07dc613 (diff)
Fixed model.__eq__ and __hash__ for no pk value cases
The __eq__ method now considers two instances without primary key value equal only when they have same id(). The __hash__ method raises TypeError for no primary key case. Fixed #18864, fixed #18250 Thanks to Tim Graham for docs review.
Diffstat (limited to 'tests/basic')
-rw-r--r--tests/basic/tests.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/tests/basic/tests.py b/tests/basic/tests.py
index 2b051621ef..611944902a 100644
--- a/tests/basic/tests.py
+++ b/tests/basic/tests.py
@@ -708,9 +708,20 @@ class ModelTest(TestCase):
SelfRef.objects.get(selfref=sr)
def test_eq(self):
+ self.assertEqual(Article(id=1), Article(id=1))
self.assertNotEqual(Article(id=1), object())
self.assertNotEqual(object(), Article(id=1))
+ a = Article()
+ self.assertEqual(a, a)
+ self.assertNotEqual(Article(), a)
+ def test_hash(self):
+ # Value based on PK
+ self.assertEqual(hash(Article(id=1)), hash(1))
+ with self.assertRaises(TypeError):
+ # No PK value -> unhashable (because save() would then change
+ # hash)
+ hash(Article())
class ConcurrentSaveTests(TransactionTestCase):