From 67c05ed460f8abf59cb48e0db0126dfcfa5940a7 Mon Sep 17 00:00:00 2001 From: Bertrand Bordage Date: Tue, 17 Feb 2015 21:47:41 +0100 Subject: [PATCH] Adds 2 tests for HAVING queries. --- cachalot/tests/read.py | 11 +++++++++++ cachalot/tests/write.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/cachalot/tests/read.py b/cachalot/tests/read.py index 1d61cdb..8df0f9c 100644 --- a/cachalot/tests/read.py +++ b/cachalot/tests/read.py @@ -457,6 +457,17 @@ class ReadTestCase(TransactionTestCase): self.assertListEqual([t.name for t in data2], ['test1', 'test2']) + def test_having(self): + with self.assertNumQueries(1): + data1 = list(User.objects.annotate(n=Count('user_permissions')) + .filter(n__gte=1)) + self.assertListEqual(data1, [self.user]) + + with self.assertNumQueries(0): + data2 = list(User.objects.annotate(n=Count('user_permissions')) + .filter(n__gte=1)) + self.assertListEqual(data2, [self.user]) + def test_extra_select(self): username_length_sql = """ SELECT LENGTH(%(user_table)s.username) diff --git a/cachalot/tests/write.py b/cachalot/tests/write.py index d9dfc85..0465b46 100644 --- a/cachalot/tests/write.py +++ b/cachalot/tests/write.py @@ -299,6 +299,34 @@ class WriteTestCase(TransactionTestCase): self.assertListEqual(data5, [user1, user2]) self.assertListEqual([u.n for u in data5], [3, 2]) + def test_invalidate_having(self): + with self.assertNumQueries(1): + data1 = list(User.objects.annotate(n=Count('user_permissions')) + .filter(n__gte=1)) + self.assertListEqual(data1, []) + + u = User.objects.create_user('user') + + with self.assertNumQueries(1): + data2 = list(User.objects.annotate(n=Count('user_permissions')) + .filter(n__gte=1)) + self.assertListEqual(data2, []) + + p = Permission.objects.first() + p.save() + + with self.assertNumQueries(1): + data3 = list(User.objects.annotate(n=Count('user_permissions')) + .filter(n__gte=1)) + self.assertListEqual(data3, []) + + u.user_permissions.add(p) + + with self.assertNumQueries(1): + data3 = list(User.objects.annotate(n=Count('user_permissions')) + .filter(n__gte=1)) + self.assertListEqual(data3, [u]) + def test_invalidate_subquery(self): with self.assertNumQueries(1): data1 = list(Test.objects.filter(owner__in=User.objects.all()))