[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Security/tests - testPrincipalPermissionManager.py:1.1.2.6

Anthony Baxter anthony@interlink.com.au
Fri, 8 Feb 2002 15:05:45 -0500


Update of /cvs-repository/Zope3/lib/python/Zope/App/Security/tests
In directory cvs.zope.org:/tmp/cvs-serv29142/tests

Modified Files:
      Tag: Zope-3x-branch
	testPrincipalPermissionManager.py 
Log Message:
Checking in new PrincipalPermissionManager. The Security unit tests will
be broken for a short while until we finish the whiteboarding and fix the
code. (wasn't planning to break it immediately, but what the heck, Andreas
already broke it with the RolePermissionManager changes :)


=== Zope3/lib/python/Zope/App/Security/tests/testPrincipalPermissionManager.py 1.1.2.5 => 1.1.2.6 ===
 from Zope.App.Security.PrincipalPermissionManager \
     import principalPermissionManager as manager
+from Zope.App.Security.Settings import Allow, Deny
 
 class Test(unittest.TestCase):
 
@@ -32,7 +33,6 @@
             title or 'A Principal',
             login = id or 'APrincipal')
         return id or 'APrincipal'
-             
 
     def testUnboundPrincipalPermission(self):
         permission = permregistry.definePermission('APerm', 'title')
@@ -43,11 +43,39 @@
     def testPrincipalPermission(self):
         permission = permregistry.definePermission('APerm', 'title')
         principal = self._make_principal()
+        # check that an allow permission is saved correctly
         manager.grantPermissionToPrincipal(permission, principal)
         self.assertEqual(manager.getPrincipalsForPermission(permission),
-                         [principal])
+                         [(principal, Allow)])
         self.assertEqual(manager.getPermissionsForPrincipal(principal),
-                         [permission])
+                         [(permission, Allow)])
+        # check that the allow permission is removed.
+        manager.unsetPermissionForPrincipal(permission, principal)
+        self.assertEqual(manager.getPrincipalsForPermission(permission), [])
+        self.assertEqual(manager.getPermissionsForPrincipal(principal), [])
+        # now put a deny in there, check it's set.
+        manager.denyPermissionToPrincipal(permission, principal)
+        self.assertEqual(manager.getPrincipalsForPermission(permission),
+                         [(principal, Deny)])
+        self.assertEqual(manager.getPermissionsForPrincipal(principal),
+                         [(permission, Deny)])
+        # test for deny followed by allow . The latter should override.
+        manager.grantPermissionToPrincipal(permission, principal)
+        self.assertEqual(manager.getPrincipalsForPermission(permission),
+                         [(principal, Allow)])
+        self.assertEqual(manager.getPermissionsForPrincipal(principal),
+                         [(permission, Allow)])
+        # check that allow followed by allow is just a single allow.
+        manager.grantPermissionToPrincipal(permission, principal)
+        self.assertEqual(manager.getPrincipalsForPermission(permission),
+                         [(principal, Allow)])
+        self.assertEqual(manager.getPermissionsForPrincipal(principal),
+                         [(permission, Allow)])
+        # check that two unsets in a row quietly ignores the second one.
+        manager.unsetPermissionForPrincipal(permission, principal)
+        manager.unsetPermissionForPrincipal(permission, principal)
+        self.assertEqual(manager.getPrincipalsForPermission(permission), [])
+        self.assertEqual(manager.getPermissionsForPrincipal(principal), [])
 
     def testManyPermissionsOnePrincipal(self):
         perm1 = permregistry.definePermission('Perm One', 'title')
@@ -57,19 +85,24 @@
         manager.grantPermissionToPrincipal(perm2, prin1)
         perms = manager.getPermissionsForPrincipal(prin1)
         self.assertEqual(len(perms), 2)
-        self.failUnless(perm1 in perms)
-        self.failUnless(perm2 in perms)
+        self.failUnless((perm1,Allow) in perms)
+        self.failUnless((perm2,Allow) in perms)
+        manager.denyPermissionToPrincipal(perm2, prin1)
+        perms = manager.getPermissionsForPrincipal(prin1)
+        self.assertEqual(len(perms), 2)
+        self.failUnless((perm1,Allow) in perms)
+        self.failUnless((perm2,Deny) in perms)
 
     def testManyPrincipalsOnePermission(self):
         perm1 = permregistry.definePermission('Perm One', 'title').getId()
         prin1 = self._make_principal()
         prin2 = self._make_principal('Principal 2', 'Principal Two')
         manager.grantPermissionToPrincipal(perm1, prin1)
-        manager.grantPermissionToPrincipal(perm1, prin2)
+        manager.denyPermissionToPrincipal(perm1, prin2)
         principals = manager.getPrincipalsForPermission(perm1)
         self.assertEqual(len(principals), 2)
-        self.failUnless(prin1 in principals)
-        self.failUnless(prin2 in principals)
+        self.failUnless((prin1,Allow) in principals)
+        self.failUnless((prin2,Deny) in principals)
 
 def test_suite():
     loader=unittest.TestLoader()