Skip to content

Commit

Permalink
Fix cache reuse and add tests that invoke backend
Browse files Browse the repository at this point in the history
  • Loading branch information
qeternity authored and brianmay committed Jan 13, 2020
1 parent 7803d0c commit 2efce15
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
4 changes: 3 additions & 1 deletion guardian/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -296,4 +296,6 @@ def _prefetch_cache(self):

if not hasattr(obj, '_guardian_perms_cache'):
obj, cache = self._init_obj_prefetch_cache(obj, *querysets)
self._obj_perms_cache = cache
else:
cache = obj._guardian_perms_cache
self._obj_perms_cache = cache
8 changes: 8 additions & 0 deletions guardian/testapp/tests/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,21 +486,25 @@ def test_autoprefetch_user_perms(self):

# Checking shouldn't spawn any queries
self.assertTrue(checker.has_perm("change_group", self.group))
self.assertTrue(user.has_perm("change_group", self.group))
self.assertEqual(len(connection.queries), query_count)

# Checking for other permission but for Group object again
# shouldn't spawn any query too
self.assertFalse(checker.has_perm("delete_group", self.group))
self.assertFalse(user.has_perm("delete_group", self.group))
self.assertEqual(len(connection.queries), query_count)

# Checking for same model but other instance shouldn't spawn any queries
self.assertTrue(checker.has_perm("change_group", group1))
self.assertTrue(user.has_perm("change_group", group1))
self.assertEqual(len(connection.queries), query_count)

# Checking for same model but other instance shouldn't spawn any queries
# Even though User doesn't have perms on Group2, we still should
# not hit DB
self.assertFalse(checker.has_perm("change_group", group2))
self.assertFalse(user.has_perm("change_group", group2))
self.assertEqual(len(connection.queries), query_count)

# Evict cache and verify that reloaded perms have changed
Expand All @@ -511,6 +515,7 @@ def test_autoprefetch_user_perms(self):
# New checker object so that we reload perms from db
checker = ObjectPermissionChecker(user)
self.assertTrue(checker.has_perm("delete_group", self.group))
self.assertTrue(user.has_perm("delete_group", self.group))
# Two more queries should have been executed
self.assertEqual(len(connection.queries), query_count + 2)

Expand Down Expand Up @@ -545,15 +550,18 @@ def test_autoprefetch_superuser_perms(self):

# Checking shouldn't spawn any queries
self.assertTrue(checker.has_perm("change_group", self.group))
self.assertTrue(user.has_perm("change_group", self.group))
self.assertEqual(len(connection.queries), query_count)

# Checking for other permission but for Group object again
# shouldn't spawn any query too
self.assertTrue(checker.has_perm("delete_group", self.group))
self.assertTrue(user.has_perm("delete_group", self.group))
self.assertEqual(len(connection.queries), query_count)

# Checking for same model but other instance shouldn't spawn any queries
self.assertTrue(checker.has_perm("change_group", group1))
self.assertTrue(user.has_perm("change_group", group1))
self.assertEqual(len(connection.queries), query_count)
finally:
settings.DEBUG = False
Expand Down

0 comments on commit 2efce15

Please sign in to comment.