Skip to content

Commit d85b520

Browse files
committed
add failing test for OR with unimplemented has_object_permission
The previous test ensured that a permission whose has_permission returned False but didn't implement has_object_permission didn't cause an OR to suceed regardless of other conditions. However, if a permission doesn't implement has_object_permission but has_permission returns True, that should count as having permission on all objects.
1 parent b90e4d5 commit d85b520

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

tests/test_permissions.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,12 @@ def setUp(self):
528528
self.password
529529
)
530530
self.client.login(username=self.username, password=self.password)
531+
self.admin_user = User.objects.create_user(
532+
'paul',
533+
534+
'password',
535+
is_staff=True,
536+
)
531537

532538
def test_and_false(self):
533539
request = factory.get('/1', format='json')
@@ -685,7 +691,7 @@ def test_has_permission_not_implemented(self):
685691
assert composed_perm().has_permission(request, None) is NotImplemented
686692
assert composed_perm().has_object_permission(request, None, None) is True
687693

688-
def test_has_object_permission_not_implemented(self):
694+
def test_has_object_permission_not_implemented_false(self):
689695
request = factory.get('/1', format='json')
690696
request.user = self.user
691697
composed_perm = (
@@ -695,3 +701,12 @@ def test_has_object_permission_not_implemented(self):
695701
assert composed_perm().has_permission(request, None) is False
696702
assert composed_perm().has_object_permission(request, None, None) is False
697703

704+
def test_has_object_permission_not_implemented_true(self):
705+
request = factory.get('/1', format='json')
706+
request.user = self.admin_user
707+
composed_perm = (
708+
permissions.IsAdminUser |
709+
BasicObjectPerm
710+
)
711+
assert composed_perm().has_permission(request, None) is True
712+
assert composed_perm().has_object_permission(request, None, None) is True

0 commit comments

Comments
 (0)