[Zope3-checkins] CVS: Zope3/src/zope/app/browser/security/grants/tests - __init__.py:1.2 permissionservice.py:1.2 rolepermissionmanager.py:1.2 roleservice.py:1.2 test_principalpermissionview.py:1.2 test_principalroleview.py:1.2 test_rolepermissionview.py:1.2
Jim Fulton
jim@zope.com
Wed, 25 Dec 2002 09:14:07 -0500
Update of /cvs-repository/Zope3/src/zope/app/browser/security/grants/tests
In directory cvs.zope.org:/tmp/cvs-serv15352/src/zope/app/browser/security/grants/tests
Added Files:
__init__.py permissionservice.py rolepermissionmanager.py
roleservice.py test_principalpermissionview.py
test_principalroleview.py test_rolepermissionview.py
Log Message:
Grand renaming:
- Renamed most files (especially python modules) to lower case.
- Moved views and interfaces into separate hierarchies within each
project, where each top-level directory under the zope package
is a separate project.
- Moved everything to src from lib/python.
lib/python will eventually go away. I need access to the cvs
repository to make this happen, however.
There are probably some bits that are broken. All tests pass
and zope runs, but I haven't tried everything. There are a number
of cleanups I'll work on tomorrow.
=== Zope3/src/zope/app/browser/security/grants/tests/__init__.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:06 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/__init__.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,2 @@
+#
+# This file is necessary to make this directory a package.
=== Zope3/src/zope/app/browser/security/grants/tests/permissionservice.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:06 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/permissionservice.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,45 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""PermissionService implementation for testing
+
+$Id$
+"""
+
+from zope.app.interfaces.security import IPermissionService
+from zope.app.interfaces.security import IPermission
+
+class Permission:
+
+ __implements__ = IPermission
+
+ def __init__(self, id, title): self._id, self._title = id, title
+ def getId(self): return self._id
+ def getTitle(self): return self._title
+ def getDescription(self): return ''
+
+class PermissionService:
+
+ __implements__ = IPermissionService
+
+ def __init__(self, **kw):
+ self._permissions = r = {}
+ for id, title in kw.items(): r[id]=Permission(id, title)
+
+ def getPermission(self, rid):
+ '''See interface IPermissionService'''
+ return self._permissions.get(rid)
+
+ def getPermissions(self):
+ '''See interface IPermissionService'''
+ return self._permissions.values()
=== Zope3/src/zope/app/browser/security/grants/tests/rolepermissionmanager.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:06 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/rolepermissionmanager.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,87 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Test IRolePermissionManager class that has no context.
+
+$Id$
+"""
+
+from zope.component import getAdapter
+from zope.app.interfaces.security import IRolePermissionManager
+from zope.app.interfaces.security import IRolePermissionMap
+from zope.app.security.grants.localsecuritymap import LocalSecurityMap
+from zope.app.security.settings import Allow, Deny, Unset
+
+class RolePermissionManager:
+ """
+ provide adapter that manages role permission data in an object attribute
+ """
+
+ __implements__ = IRolePermissionManager, IRolePermissionMap
+
+ def __init__(self):
+ self._rp = LocalSecurityMap()
+
+ def grantPermissionToRole(self, permission_id, role_id):
+ ''' See the interface IRolePermissionManager '''
+ rp = self._getRolePermissions(create=1)
+ rp.addCell(permission_id, role_id, Allow)
+
+ def denyPermissionToRole(self, permission_id, role_id):
+ ''' See the interface IRolePermissionManager '''
+ rp = self._getRolePermissions(create=1)
+ rp.addCell(permission_id, role_id, Deny)
+
+ def unsetPermissionFromRole(self, permission_id, role_id):
+ ''' See the interface IRolePermissionManager '''
+ rp = self._getRolePermissions()
+ # Only unset if there is a security map, otherwise, we're done
+ if rp:
+ rp.delCell(permission_id, role_id)
+
+ def getRolesForPermission(self, permission_id):
+ '''See interface IRolePermissionMap'''
+ rp = self._getRolePermissions()
+ if rp:
+ return rp.getRow(permission_id)
+ else:
+ return []
+
+ def getPermissionsForRole(self, role_id):
+ '''See interface IRolePermissionMap'''
+ rp = self._getRolePermissions()
+ if rp:
+ return rp.getCol(role_id)
+ else:
+ return []
+
+ def getRolesAndPermissions(self):
+ '''See interface IRolePermissionMap'''
+ rp = self._getRolePermissions()
+ if rp:
+ return rp.getAllCells()
+ else:
+ return []
+
+ def getSetting(self, permission_id, role_id):
+ '''See interface IRolePermissionMap'''
+ rp = self._getRolePermissions()
+ if rp:
+ return rp.getCell(permission_id, role_id)
+ else:
+ return Unset
+
+ def _getRolePermissions(self, create=0):
+ """Get the role permission map stored in the context, optionally
+ creating one if necessary"""
+ return self._rp
=== Zope3/src/zope/app/browser/security/grants/tests/roleservice.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:06 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/roleservice.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,43 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""RoleService implementation for testing
+
+$Id$
+"""
+
+from zope.app.interfaces.security import IRoleService
+from zope.app.interfaces.security import IRole
+
+class Role:
+
+ __implements__ = IRole
+
+ def __init__(self, id, title): self._id, self._title = id, title
+ def getId(self): return self._id
+ def getTitle(self): return self._title
+ def getDescription(self): return ''
+
+class RoleService:
+
+ __implements__ = IRoleService
+
+ def __init__(self, **kw):
+ self._roles = r = {}
+ for id, title in kw.items(): r[id]=Role(id, title)
+
+ def getRole(self, rid):
+ return self._roles.get(rid)
+
+ def getRoles(self):
+ return self._roles.values()
=== Zope3/src/zope/app/browser/security/grants/tests/test_principalpermissionview.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:06 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/test_principalpermissionview.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,358 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+
+import unittest
+
+from zope.component import getService, getServiceManager
+from zope.app.interfaces.annotation import IAttributeAnnotatable
+from zope.app.interfaces.annotation import IAnnotations
+from zope.app.attributeannotations import AttributeAnnotations
+from zope.app.interfaces.security import IPermissionService
+from zope.app.interfaces.security import IAuthenticationService
+from zope.app.interfaces.security \
+ import IPrincipalPermissionManager
+from zope.app.interfaces.security import IPrincipalPermissionMap
+from zope.app.security.settings import Allow, Deny, Unset
+from zope.app.services.tests.placefulsetup \
+ import PlacefulSetup
+
+class DummyContext:
+
+ __implements__ = IAttributeAnnotatable
+#IPrincipalPermissionManager, IPrincipalPermissionMap
+
+class DummyPermissionService:
+
+ __implements__ = IPermissionService
+
+ def __init__(self, perm_objs):
+ perms = {}
+ for perm_obj in perm_objs:
+ perms[perm_obj.getId()] = perm_obj
+
+ self.perms = perms
+
+ def getPermission(self,pr_id):
+ return self.perms[pr_id]
+
+ def getPermissions(self):
+ return self.perms.keys()
+
+
+class DummyAuthenticationService:
+ __implements__ = IAuthenticationService
+
+ def __init__(self, principals):
+ pr = {}
+ for principal in principals:
+ pr[principal.getId()] = principal
+ self.principals = pr
+
+ def getPrincipal(self, principal_id):
+ return self.principals[principal_id]
+
+class DummyAdapter:
+
+ __implements__ = IPrincipalPermissionManager, IPrincipalPermissionMap
+
+ def __init__(self, context):
+ self._context = context
+ if not hasattr(self._context,'principals'):
+ self._context.principals = {}
+
+ def grantPermissionToPrincipal(self, permission, principal):
+ if not (principal in self._context.principals):
+ self._context.principals[principal]={}
+
+ self._context.principals[principal][permission]=Allow
+
+ def denyPermissionToPrincipal(self, permission, principal):
+ if not (principal in self._context.principals):
+ self._context.principals[principal]={}
+
+ self._context.principals[principal][permission]=Deny
+
+ def unsetPermissionForPrincipal(self, permission, principal):
+ if not (principal in self._context.principals):
+ return
+ try:
+ del self._context.principals[principal][permission]
+ except KeyError:
+ pass
+
+ def getSetting(self, permission, principal):
+ try:
+ setting = self._context.principals[principal][permission]
+
+ except KeyError:
+ setting = Unset
+
+ return setting
+
+ def getPrincipalsForPermission(self, permission):
+ ret = []
+ for principal, permissions in self._context.principals.items():
+ if permissions in permissions:
+ ret.append((principal, permissions[permission]))
+ return ret
+
+ def getPermissionsForPrincipal(self, principal):
+ try:
+ return self._context.principals[principal].items()
+ except KeyError:
+ return []
+
+class DummyObject:
+ def __init__(self, id, title):
+ self._id = id
+ self._title = title
+
+ def getId(self):
+ return self._id
+
+ def getTitle(self):
+ return self._title
+
+
+class Test(PlacefulSetup, unittest.TestCase):
+
+ def setUp(self):
+ PlacefulSetup.setUp(self)
+ self._permissions = []
+ self._permissions.append(DummyObject('qux', 'Qux'))
+ self._permissions.append(DummyObject('baz', 'Baz'))
+ defineService=getServiceManager(None).defineService
+ provideService=getServiceManager(None).provideService
+
+ defineService(
+ 'Permissions', IPermissionService)
+ provideService('Permissions',
+ DummyPermissionService(self._permissions))
+
+ defineService('Authentication',
+ IAuthenticationService)
+
+ self._principals = []
+ self._principals.append(DummyObject('foo', 'Foo'))
+ self._principals.append(DummyObject('bar', 'Bar'))
+
+ provideService('Authentication',
+ DummyAuthenticationService(principals = self._principals))
+ provideAdapter=getService(None,'Adapters').provideAdapter
+ provideAdapter(IAttributeAnnotatable,
+ IPrincipalPermissionManager, DummyAdapter)
+ provideAdapter(
+ IAttributeAnnotatable, IAnnotations, AttributeAnnotations)
+
+ def _makeOne(self):
+ from zope.app.browser.security.grants.principalpermissionview \
+ import PrincipalPermissionView
+ return PrincipalPermissionView(DummyContext(), None)
+
+ def testGrantPermissions(self):
+ view = self._makeOne()
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ denied_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Deny')
+
+ self.assertEqual(len(allowed_perms), 0, 'List not empty')
+ self.assertEqual(len(denied_perms), 0, 'List not empty')
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow'),
+ [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny'),
+ [])
+
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[1].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow').sort(),
+ self._permissions.sort())
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny'),
+ [])
+
+ view.grantPermissions(self._principals[1].getId(),
+ [self._permissions[0].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Allow'),
+ [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Deny'),
+ [])
+
+ view.grantPermissions(self._principals[1].getId(),
+ [self._permissions[1].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Allow').sort(),
+ self._permissions.sort())
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Deny'),
+ [])
+
+ def testDenyPermissions(self):
+ view = self._makeOne()
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ denied_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Deny')
+
+ self.assertEqual(len(allowed_perms), 0, 'List not empty')
+ self.assertEqual(len(denied_perms), 0, 'List not empty')
+ view.denyPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny'),
+ [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow'),
+ [])
+
+ view.denyPermissions(self._principals[0].getId(),
+ [self._permissions[1].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny').sort(),
+ self._permissions.sort())
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow'),
+ [])
+
+ view.denyPermissions(self._principals[1].getId(), [
+ self._permissions[0].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Deny'),
+ [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Allow'),
+ [])
+
+ view.denyPermissions(self._principals[1].getId(),
+ [self._permissions[1].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Deny').sort(),
+ self._permissions.sort())
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[1].getId(),'Allow'),
+ [])
+
+ def testAllowDenyPermissions(self):
+ view = self._makeOne()
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ denied_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Deny')
+
+ self.assertEqual(len(allowed_perms), 0, 'List not empty')
+ self.assertEqual(len(denied_perms), 0, 'List not empty')
+
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow'),
+ [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny'),
+ [])
+
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 1, 'List has wrong length')
+
+ # Now change it to deny
+ view.denyPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny'),
+ [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow'),
+ [])
+
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[1].getId()])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Deny'), [self._permissions[0]])
+ self.assertEqual(view.getPermissionsForPrincipal(
+ self._principals[0].getId(),'Allow'), [self._permissions[1]])
+
+ def testUnsetPermissions(self):
+ view = self._makeOne()
+
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 1, 'List has wrong length')
+
+ view.unsetPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 0, 'Permission not unset')
+
+ # Deleting mutiple in one step
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId(),
+ self._permissions[1].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 2, 'List has wrong length')
+
+ view.unsetPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId(),
+ self._permissions[1].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 0, 'Some permissions not unset')
+
+ # Deleting in a row
+ view.grantPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId(),
+ self._permissions[1].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 2, 'List has wrong length')
+
+ view.unsetPermissions(self._principals[0].getId(),
+ [self._permissions[0].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 1, 'Some permissions not unset')
+
+ view.unsetPermissions(self._principals[0].getId(),
+ [self._permissions[1].getId()])
+ allowed_perms = view.getPermissionsForPrincipal(
+ self._principals[0].getId(), 'Allow')
+ self.assertEqual(len(allowed_perms), 0, 'Not all permissions unset')
+
+ # Ask for an other way of getting the unset permisssions
+ unset_perms = view.getUnsetPermissionsForPrincipal(
+ self._principals[0].getId())
+ self.assertEqual(len(unset_perms), 2, 'Not all permissions unset')
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/src/zope/app/browser/security/grants/tests/test_principalroleview.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:06 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/test_principalroleview.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,156 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+
+$Id$
+"""
+
+import unittest
+
+from zope.app.services.tests.placefulsetup\
+ import PlacefulSetup
+from zope.component import getServiceManager
+
+from zope.app.interfaces.security import IRoleService
+from zope.app.interfaces.security import IAuthenticationService
+
+from zope.app.interfaces.security import IPrincipalRoleManager
+from zope.app.interfaces.security import IPrincipalRoleMap
+from zope.publisher.browser import TestRequest
+
+class DummySetting:
+ def __init__(self, name):
+ self._name = name
+ def getName(self):
+ return self._name
+
+class DummyManager:
+
+ __implements__ = IPrincipalRoleManager
+
+ def getSetting(self, role, principal):
+ return DummySetting('%r:%r' % (role, principal))
+
+class DummyRoleService:
+
+ __implements__ = IRoleService
+
+ def __init__(self, roles):
+ self._roles = roles
+
+ def getRoles(self):
+ return self._roles
+
+class DummyObject:
+ def __init__(self, id, title):
+ self._id = id
+ self._title = title
+
+ def getId(self):
+ return self._id
+
+ def getTitle(self):
+ return self._title
+
+class DummyAuthenticationService:
+
+ __implements__ = IAuthenticationService
+
+ def __init__(self, principals):
+ self._principals = principals
+
+ def getPrincipals(self, name):
+ return self._principals
+
+class Test(PlacefulSetup, unittest.TestCase):
+
+ def setUp(self):
+ PlacefulSetup.setUp(self)
+ self._roles = []
+ self._roles.append(DummyObject('qux', 'Qux'))
+ self._roles.append(DummyObject('baz', 'Baz'))
+ defineService=getServiceManager(None).defineService
+ provideService=getServiceManager(None).provideService
+
+ defineService('Roles', IRoleService)
+ provideService('Roles'
+ , DummyRoleService(roles = self._roles))
+
+ defineService('Authentication', IAuthenticationService)
+
+ self._principals = []
+ self._principals.append(DummyObject('foo', 'Foo'))
+ self._principals.append(DummyObject('bar', 'Bar'))
+
+ provideService('Authentication',
+ DummyAuthenticationService(principals = self._principals))
+
+ def _makeOne(self):
+ from zope.app.browser.security.grants.principalroleview \
+ import PrincipalRoleView
+ return PrincipalRoleView(DummyManager(), TestRequest())
+
+ def testRoles(self):
+ view = self._makeOne()
+ roles = list(view.getAllRoles())
+ self.assertEqual(len(roles), 2)
+
+ ids = map(lambda x: x.getId(), self._roles)
+
+ for role in roles:
+ self.failUnless(role.getId() in ids)
+
+ def testPrincipals(self):
+ view = self._makeOne()
+ principals = list(view.getAllPrincipals())
+ self.assertEqual(len(principals), 2)
+
+ ids = map(lambda x: x.getId(), self._principals)
+
+ for principal in principals:
+ self.failUnless(principal.getId() in ids, (principal, ids))
+
+ def testPrincipalRoleGrid(self):
+ view = self._makeOne()
+
+ grid = view.createGrid()
+
+ p_ids = [p.getId() for p in view.getAllPrincipals()]
+ r_ids = [r.getId() for r in view.getAllRoles()]
+
+ self.failUnless(grid.listAvailableValues())
+
+ for p in grid.principalIds():
+ self.failUnless(p in p_ids)
+
+ for r in grid.roleIds():
+ self.failUnless(r in r_ids)
+
+ map = DummyManager()
+
+ grid_entries = [(r, p, map.getSetting(r, p).getName())
+ for r in grid.roleIds()
+ for p in grid.principalIds()
+ ]
+
+ for r, p, setting in grid_entries:
+ self.assertEquals(setting, grid.getValue(p, r))
+
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())
=== Zope3/src/zope/app/browser/security/grants/tests/test_rolepermissionview.py 1.1 => 1.2 ===
--- /dev/null Wed Dec 25 09:14:07 2002
+++ Zope3/src/zope/app/browser/security/grants/tests/test_rolepermissionview.py Wed Dec 25 09:12:35 2002
@@ -0,0 +1,175 @@
+##############################################################################
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+import unittest, sys
+from zope.app.services.tests.placefulsetup\
+ import PlacefulSetup
+from zope.component import getServiceManager
+from zope.app.interfaces.security import IRoleService
+from zope.app.browser.security.grants.tests.roleservice import RoleService
+from zope.app.browser.security.grants.tests.permissionservice import PermissionService
+from zope.app.browser.security.grants.tests.rolepermissionmanager import RolePermissionManager
+from zope.app.browser.security.grants.rolepermissionview \
+ import RolePermissionView
+from zope.app.interfaces.security import IPermissionService
+
+class Test(PlacefulSetup, unittest.TestCase):
+
+ def setUp(self):
+ PlacefulSetup.setUp(self)
+ defineService=getServiceManager(None).defineService
+ provideService=getServiceManager(None).provideService
+ defineService('Roles', IRoleService)
+ provideService('Roles', RoleService(
+ manager='Manager', member='Member'))
+ defineService('Permissions', IPermissionService)
+ provideService('Permissions', PermissionService(
+ read='Read', write='Write'))
+ self.view = RolePermissionView(RolePermissionManager(), None)
+
+ def testRoles(self):
+ roles = list(self.view.roles())
+ ids = ['manager', 'member']
+ titles = ['Manager', 'Member']
+ for role in roles:
+ i=ids.index(role.getId())
+ self.failIf(i < 0)
+ self.assertEqual(role.getTitle(), titles[i])
+ del ids[i]
+ del titles[i]
+
+ def testPermisssions(self):
+ permissions = list(self.view.permissions())
+ ids = ['read', 'write']
+ titles = ['Read', 'Write']
+ for permission in permissions:
+ i=ids.index(permission.getId())
+ self.failIf(i < 0)
+ self.assertEqual(permission.getTitle(), titles[i])
+ del ids[i]
+ del titles[i]
+
+ def testMatrix(self):
+ roles = self.view.roles()
+ permissions = self.view.permissions()
+
+ # manager member
+ # read +
+ # write . -
+ REQ = {
+ 'p0': 'read', 'p1': 'write',
+ 'r0': 'manager', 'r1': 'member',
+ 'p0r0': 'Allow',
+ 'p1r0': 'Unset', 'p1r1': 'Deny',
+ }
+ self.view.request = REQ # XXX yuck
+ self.view.action(testing=1)
+ permissionRoles = self.view.permissionRoles()
+ for ip in range(len(permissionRoles)):
+ permissionRole = permissionRoles[ip]
+ rset = permissionRole.roleSettings()
+ for ir in range(len(rset)):
+ setting = rset[ir]
+ r = roles[ir].getId()
+ p = permissions[ip].getId()
+ if setting == 'Allow':
+ self.failUnless(r == 'manager' and p == 'read')
+ elif setting == 'Deny':
+ self.failUnless(r == 'member' and p == 'write')
+ else:
+ self.failUnless(setting == 'Unset')
+
+ # manager member
+ # read -
+ # write +
+ REQ = {
+ 'p0': 'read', 'p1': 'write',
+ 'r0': 'manager', 'r1': 'member',
+ 'p0r0': 'Deny',
+ 'p1r0': 'Allow', 'p1r1': 'Unset'
+ }
+ self.view.request = REQ # XXX yuck
+ self.view.action(testing=1)
+ permissionRoles = self.view.permissionRoles()
+ for ip in range(len(permissionRoles)):
+ permissionRole = permissionRoles[ip]
+ rset = permissionRole.roleSettings()
+ for ir in range(len(rset)):
+ setting = rset[ir]
+ r = roles[ir].getId()
+ p = permissions[ip].getId()
+ if setting == 'Allow':
+ self.failUnless(r == 'manager' and p == 'write')
+ elif setting == 'Deny':
+ self.failUnless(r == 'manager' and p == 'read')
+ else:
+ self.failUnless(setting == 'Unset')
+
+ def testPermissionRoles(self):
+ self.view.update_permission(permission_id='write',
+ settings=['Allow', 'Unset'],
+ testing=1)
+ permission = self.view.permissionForID('write')
+ settings = permission.roleSettings()
+ self.assertEquals(settings, ['Allow', 'Unset'])
+
+
+ self.view.update_permission(permission_id='write',
+ settings=['Unset', 'Deny'],
+ testing=1)
+ permission = self.view.permissionForID('write')
+ settings = permission.roleSettings()
+ self.assertEquals(settings, ['Unset', 'Deny'])
+
+ self.assertRaises(ValueError,
+ self.view.update_permission,
+ permission_id='write',
+ settings=['Unset', 'foo'],
+ testing=1)
+
+ def testRolePermissions(self):
+ REQ={'Allow': ['read'],
+ 'Deny': ['write']}
+ self.view.request = REQ # XXX yuck
+ self.view.update_role(role_id='member',
+ testing=1)
+ role = self.view.roleForID('member')
+ pinfos = role.permissionsInfo()
+ for pinfo in pinfos:
+ pid = pinfo['id']
+ if pid == 'read':
+ self.assertEquals(pinfo['setting'], 'Allow')
+ if pid == 'write':
+ self.assertEquals(pinfo['setting'], 'Deny')
+
+ REQ={'Allow': [],
+ 'Deny': ['read']}
+ self.view.request = REQ # XXX yuck
+ self.view.update_role(role_id='member',
+ testing=1)
+ role = self.view.roleForID('member')
+ pinfos = role.permissionsInfo()
+ for pinfo in pinfos:
+ pid = pinfo['id']
+ if pid == 'read':
+ self.assertEquals(pinfo['setting'], 'Deny')
+ if pid == 'write':
+ self.assertEquals(pinfo['setting'], 'Unset')
+
+
+def test_suite():
+ loader=unittest.TestLoader()
+ return loader.loadTestsFromTestCase(Test)
+
+if __name__=='__main__':
+ unittest.TextTestRunner().run(test_suite())