1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#
# Generic user folder tests. Every user folder implementation
# must pass these.
#
import os, sys
if __name__ == '__main__':
execfile(os.path.join(sys.path[0], 'framework.py'))
from Testing import ZopeTestCase
from Products.CMFPlone.tests import PloneTestCase
import base64
from AccessControl import Unauthorized
default_user = PloneTestCase.default_user
default_password = PloneTestCase.default_password
user_perms = ZopeTestCase.standard_permissions
user_role = 'Member'
class TestUserFolder(PloneTestCase.PloneTestCase):
def afterSetUp(self):
self.logout()
self.uf = self.portal.acl_users
self.basic = 'Basic %s' % base64.encodestring('%s:%s' % (default_user, default_password))
# Set up a published object accessible to the default user
self.folder.addDTMLMethod('doc', file='')
self.folder.doc.manage_permission('View', [user_role], acquire=0)
# Rig the REQUEST so it looks like we traversed to 'doc'
self.app.REQUEST.set('PUBLISHED', self.folder['doc'])
self.app.REQUEST.set('PARENTS', [self.folder, self.app])
folder_path = list(self.folder.getPhysicalPath())
self.app.REQUEST.steps = folder_path + ['doc']
# Nuke Administators and Reviewers groups added in 2.1a2 migrations
# (and any other migrated-in groups) to avoid test confusion
self.portal.portal_groups.removeGroups(self.portal.portal_groups.listGroupIds())
def testGetUser(self):
self.failIfEqual(self.uf.getUser(default_user), None)
def testGetBadUser(self):
self.assertEqual(self.uf.getUser('user2'), None)
def testGetUserById(self):
self.failIfEqual(self.uf.getUserById(default_user), None)
def testGetBadUserById(self):
self.assertEqual(self.uf.getUserById('user2'), None)
def testGetUsers(self):
users = self.uf.getUsers()
self.failUnless(users)
self.assertEqual(users[0].getUserName(), default_user)
def testGetUserNames(self):
names = self.uf.getUserNames()
self.failUnless(names)
self.assertEqual(names[0], default_user)
def testGetRoles(self):
user = self.uf.getUser(default_user)
self.failUnless(user_role in user.getRoles())
def testGetRolesInContext(self):
user = self.uf.getUser(default_user)
self.folder.manage_addLocalRoles(default_user, ['Owner'])
roles = user.getRolesInContext(self.folder)
self.failUnless(user_role in roles)
self.failUnless('Owner' in roles)
def testHasRole(self):
user = self.uf.getUser(default_user)
self.failUnless(user.has_role(user_role, self.folder))
def testHasLocalRole(self):
user = self.uf.getUser(default_user)
self.folder.manage_addLocalRoles(default_user, ['Owner'])
self.failUnless(user.has_role('Owner', self.folder))
def testHasPermission(self):
user = self.uf.getUser(default_user)
self.failUnless(user.has_permission('View', self.folder))
self.folder.manage_role(user_role, ['Add Folders'])
self.failUnless(user.has_permission('Add Folders', self.folder))
def testHasLocalRolePermission(self):
user = self.uf.getUser(default_user)
self.folder.manage_role('Owner', ['Add Folders'])
self.folder.manage_addLocalRoles(default_user, ['Owner'])
self.failUnless(user.has_permission('Add Folders', self.folder))
def testValidate(self):
self.app.REQUEST._auth = self.basic
user = self.uf.validate(self.app.REQUEST, self.basic, [user_role])
self.failIfEqual(user, None)
self.assertEqual(user.getUserName(), default_user)
def testNotValidateWithoutAuth(self):
self.app.REQUEST._auth = ''
user = self.uf.validate(self.app.REQUEST, '', ['role1'])
self.assertEqual(user, None)
def testValidateWithoutRoles(self):
self.app.REQUEST._auth = self.basic
# Roles will be determined by looking at 'doc' itself
user = self.uf.validate(self.app.REQUEST, self.basic)
self.assertEqual(user.getUserName(), default_user)
def testNotValidateWithEmptyRoles(self):
self.app.REQUEST._auth = self.basic
user = self.uf.validate(self.app.REQUEST, self.basic, [])
self.assertEqual(user, None)
def testNotValidateWithWrongRoles(self):
self.app.REQUEST._auth = self.basic
user = self.uf.validate(self.app.REQUEST, self.basic, ['Manager'])
self.assertEqual(user, None)
def testAllowAccessToUser(self):
self.login()
try:
self.folder.restrictedTraverse('doc')
except Unauthorized:
self.fail('Unauthorized')
def testDenyAccessToAnonymous(self):
self.assertRaises(Unauthorized, self.folder.restrictedTraverse, 'doc')
def test_suite():
from unittest import TestSuite, makeSuite
suite = TestSuite()
suite.addTest(makeSuite(TestUserFolder))
return suite
if __name__ == '__main__':
framework()
|