1
##############################################################################
3
# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
6
# This software is subject to the provisions of the Zope Public License,
7
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
8
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
9
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
10
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
11
# FOR A PARTICULAR PURPOSE.
13
##############################################################################
14
"""Role-Permission View Tests
16
$Id: test_rolepermissionview.py 67630 2006-04-27 00:54:03Z jim $
21
from zope.i18n.interfaces import ITranslationDomain
22
from zope.i18nmessageid import Message
23
from zope.publisher.browser import TestRequest, BrowserView
24
from zope.exceptions.interfaces import UserError
25
from zope.security.permission import Permission
26
from zope.security.interfaces import IPermission
28
from zope.app.testing import ztapi
29
from zope.app.component.testing import PlacefulSetup
31
from zope.app.securitypolicy.role import Role
32
from zope.app.securitypolicy.interfaces import IRole
33
from zope.app.securitypolicy.browser.tests.rolepermissionmanager import \
35
from zope.app.securitypolicy.browser.rolepermissionview \
36
import RolePermissionView
38
class RolePermissionView(RolePermissionView, BrowserView):
39
"""Adding BrowserView to Utilities; this is usually done by ZCML."""
41
class TranslationDomain:
42
zope.interface.implements(ITranslationDomain)
44
def __init__(self, **translations):
45
self.translations = translations
47
def translate(self, msgid, *ignored, **also_ignored):
48
return self.translations.get(msgid, msgid)
51
def defineRole(id, title=None, description=None):
52
role = Role(id, title, description)
53
ztapi.provideUtility(IRole, role, name=role.id)
56
def definePermission(id, title=None, description=None):
57
permission = Permission(id, title, description)
58
ztapi.provideUtility(IPermission, permission, name=permission.id)
61
class FakeSiteManager:
63
def __init__(self, site):
64
self.__parent__ = site
66
class Test(PlacefulSetup, unittest.TestCase):
69
PlacefulSetup.setUp(self)
70
defineRole('manager', Message('Manager', 'testdomain'))
71
defineRole('member', Message('Member', 'testdomain'))
72
definePermission('read', Message('Read', 'testdomain'))
73
definePermission('write', Message('Write', 'testdomain'))
74
site = RolePermissionManager()
75
self.view = RolePermissionView(FakeSiteManager(site), None)
76
ztapi.provideUtility(ITranslationDomain,
77
TranslationDomain(Member="A Member",
83
self.assertEqual([role.title for role in self.view.roles()],
84
["Member", "Manager"])
86
def testPermisssions(self):
87
self.assertEqual([role.title for role in self.view.permissions()],
91
roles = self.view.roles()
92
permissions = self.view.permissions()
98
'p0': 'read', 'p1': 'write',
99
'r0': 'manager', 'r1': 'member',
101
'p1r0': 'Unset', 'p1r1': 'Deny',
104
self.view.request = TestRequest(environ=env)
106
permissionRoles = self.view.permissionRoles()
107
for ip in range(len(permissionRoles)):
108
permissionRole = permissionRoles[ip]
109
rset = permissionRole.roleSettings()
110
for ir in range(len(rset)):
113
p = permissions[ip].id
114
if setting == 'Allow':
115
self.failUnless(r == 'manager' and p == 'read')
116
elif setting == 'Deny':
117
self.failUnless(r == 'member' and p == 'write')
119
self.failUnless(setting == 'Unset')
125
'p0': 'read', 'p1': 'write',
126
'r0': 'manager', 'r1': 'member',
128
'p1r0': 'Allow', 'p1r1': 'Unset',
131
self.view.request = TestRequest(environ=env)
133
permissionRoles = self.view.permissionRoles()
134
for ip in range(len(permissionRoles)):
135
permissionRole = permissionRoles[ip]
136
rset = permissionRole.roleSettings()
137
for ir in range(len(rset)):
140
p = permissions[ip].id
141
if setting == 'Allow':
142
self.failUnless(r == 'manager' and p == 'write')
143
elif setting == 'Deny':
144
self.failUnless(r == 'manager' and p == 'read')
146
self.failUnless(setting == 'Unset')
148
def testPermissionRoles(self):
149
env={'permission_id': 'write',
150
'settings': ['Allow', 'Unset'],
152
self.view.request = TestRequest(environ=env)
154
permission = self.view.permissionForID('write')
155
settings = permission.roleSettings()
156
self.assertEquals(settings, ['Allow', 'Unset'])
159
env={'permission_id': 'write',
160
'settings': ['Unset', 'Deny'],
162
self.view.request = TestRequest(environ=env)
164
permission = self.view.permissionForID('write')
165
settings = permission.roleSettings()
166
self.assertEquals(settings, ['Unset', 'Deny'])
168
env={'permission_id': 'write',
169
'settings': ['Unset', 'foo'],
171
self.view.request = TestRequest(environ=env)
172
self.assertRaises(ValueError, self.view.update)
174
def testRolePermissions(self):
175
env={'Allow': ['read'],
179
self.view.request = TestRequest(environ=env)
181
role = self.view.roleForID('member')
182
pinfos = role.permissionsInfo()
186
self.assertEquals(pinfo['setting'], 'Allow')
188
self.assertEquals(pinfo['setting'], 'Deny')
194
self.view.request = TestRequest(environ=env)
196
role = self.view.roleForID('member')
197
pinfos = role.permissionsInfo()
201
self.assertEquals(pinfo['setting'], 'Deny')
203
self.assertEquals(pinfo['setting'], 'Unset')
206
def testRolePermissions_UserError(self):
207
env={'Allow': ['read'],
211
self.view.request = TestRequest(environ=env)
212
self.assertRaises(UserError, self.view.update, 1)
216
loader=unittest.TestLoader()
217
return loader.loadTestsFromTestCase(Test)
219
if __name__=='__main__':
220
unittest.TextTestRunner().run(test_suite())