Commit 9277bc60 authored by Tres Seaver's avatar Tres Seaver

Normalize / slim down tests.

- Avoid module-scope imports.

- Avoid complex shared setup.

- Remove run-as-script cruft.
parent 46d074ee
...@@ -10,138 +10,160 @@ ...@@ -10,138 +10,160 @@
# FOR A PARTICULAR PURPOSE. # FOR A PARTICULAR PURPOSE.
# #
############################################################################## ##############################################################################
"""User folder tests. """ Unit tests for AccessControl.User
$Id$
""" """
import unittest import unittest
import Testing
import Zope2
Zope2.startup()
import os, sys, base64
import transaction
from Testing.makerequest import makerequest
from AccessControl import Unauthorized
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
from AccessControl.User import BasicUserFolder, UserFolder
from AccessControl.User import User
class UserFolderTests(unittest.TestCase): class UserFolderTests(unittest.TestCase):
def setUp(self): def setUp(self):
import transaction
transaction.begin() transaction.begin()
self.app = makerequest(Zope2.app())
try:
# Set up a user and role
self.uf = UserFolder().__of__(self.app)
self.uf._doAddUser('user1', 'secret', ['role1'], [])
self.app._addRole('role1')
self.app.manage_role('role1', ['View'])
# Set up a published object accessible to user
self.app.addDTMLMethod('doc', file='')
self.app.doc.manage_permission('View', ['role1'], acquire=0)
# Rig the REQUEST so it looks like we traversed to doc
self.app.REQUEST.set('PUBLISHED', self.app.doc)
self.app.REQUEST.set('PARENTS', [self.app])
self.app.REQUEST.steps = ['doc']
self.basic = 'Basic %s' % base64.encodestring('user1:secret')
except:
self.tearDown()
raise
def tearDown(self): def tearDown(self):
import transaction
from AccessControl.SecurityManagement import noSecurityManager
noSecurityManager() noSecurityManager()
transaction.abort() transaction.abort()
self.app._p_jar.close()
def login(self, name): def _getTargetClass(self):
user = self.uf.getUserById(name) from AccessControl.User import UserFolder
user = user.__of__(self.uf) return UserFolder
def _makeOne(self, app=None):
if app is None:
app = self._makeApp()
uf = self._getTargetClass()().__of__(app)
uf._doAddUser('user1', 'secret', ['role1'], [])
return uf
def _makeApp(self):
from Testing.makerequest import makerequest
from Testing.ZopeTestCase import ZopeLite
app = makerequest(ZopeLite.app())
# Set up a user and role
app._addRole('role1')
app.manage_role('role1', ['View'])
# Set up a published object accessible to user
app.addDTMLMethod('doc', file='')
app.doc.manage_permission('View', ['role1'], acquire=0)
# Rig the REQUEST so it looks like we traversed to doc
app.REQUEST.set('PUBLISHED', app.doc)
app.REQUEST.set('PARENTS', [app])
app.REQUEST.steps = ['doc']
return app
def _makeBasicAuthToken(self, creds='user1:secret'):
import base64
return 'Basic %s' % base64.encodestring(creds)
def _login(self, uf, name):
from AccessControl.SecurityManagement import newSecurityManager
user = uf.getUserById(name)
user = user.__of__(uf)
newSecurityManager(None, user) newSecurityManager(None, user)
def test_z3interfaces(self): def test_class_conforms_to_IStandardUserFolder(self):
from AccessControl.interfaces import IStandardUserFolder from AccessControl.interfaces import IStandardUserFolder
from AccessControl.User import UserFolder
from zope.interface.verify import verifyClass from zope.interface.verify import verifyClass
verifyClass(IStandardUserFolder, self._getTargetClass())
verifyClass(IStandardUserFolder, UserFolder)
def testGetUser(self): def testGetUser(self):
self.failIfEqual(self.uf.getUser('user1'), None) uf = self._makeOne()
self.failIfEqual(uf.getUser('user1'), None)
def testGetBadUser(self): def testGetBadUser(self):
self.assertEqual(self.uf.getUser('user2'), None) uf = self._makeOne()
self.assertEqual(uf.getUser('user2'), None)
def testGetUserById(self): def testGetUserById(self):
self.failIfEqual(self.uf.getUserById('user1'), None) uf = self._makeOne()
self.failIfEqual(uf.getUserById('user1'), None)
def testGetBadUserById(self): def testGetBadUserById(self):
self.assertEqual(self.uf.getUserById('user2'), None) uf = self._makeOne()
self.assertEqual(uf.getUserById('user2'), None)
def testGetUsers(self): def testGetUsers(self):
users = self.uf.getUsers() uf = self._makeOne()
users = uf.getUsers()
self.failUnless(users) self.failUnless(users)
self.assertEqual(users[0].getUserName(), 'user1') self.assertEqual(users[0].getUserName(), 'user1')
def testGetUserNames(self): def testGetUserNames(self):
names = self.uf.getUserNames() uf = self._makeOne()
names = uf.getUserNames()
self.failUnless(names) self.failUnless(names)
self.assertEqual(names[0], 'user1') self.assertEqual(names[0], 'user1')
def testIdentify(self): def testIdentify(self):
name, password = self.uf.identify(self.basic) uf = self._makeOne()
name, password = uf.identify(self._makeBasicAuthToken())
self.assertEqual(name, 'user1') self.assertEqual(name, 'user1')
self.assertEqual(password, 'secret') self.assertEqual(password, 'secret')
def testGetRoles(self): def testGetRoles(self):
user = self.uf.getUser('user1') uf = self._makeOne()
user = uf.getUser('user1')
self.failUnless('role1' in user.getRoles()) self.failUnless('role1' in user.getRoles())
def testGetRolesInContext(self): def testGetRolesInContext(self):
user = self.uf.getUser('user1') app = self._makeApp()
self.app.manage_addLocalRoles('user1', ['Owner']) uf = self._makeOne(app)
roles = user.getRolesInContext(self.app) user = uf.getUser('user1')
app.manage_addLocalRoles('user1', ['Owner'])
roles = user.getRolesInContext(app)
self.failUnless('role1' in roles) self.failUnless('role1' in roles)
self.failUnless('Owner' in roles) self.failUnless('Owner' in roles)
def testHasRole(self): def testHasRole(self):
user = self.uf.getUser('user1') app = self._makeApp()
self.failUnless(user.has_role('role1', self.app)) uf = self._makeOne(app)
user = uf.getUser('user1')
self.failUnless(user.has_role('role1', app))
def testHasLocalRole(self): def testHasLocalRole(self):
user = self.uf.getUser('user1') app = self._makeApp()
self.app.manage_addLocalRoles('user1', ['Owner']) uf = self._makeOne(app)
self.failUnless(user.has_role('Owner', self.app)) user = uf.getUser('user1')
app.manage_addLocalRoles('user1', ['Owner'])
self.failUnless(user.has_role('Owner', app))
def testHasPermission(self): def testHasPermission(self):
user = self.uf.getUser('user1') app = self._makeApp()
self.failUnless(user.has_permission('View', self.app)) uf = self._makeOne(app)
self.app.manage_role('role1', ['Add Folders']) user = uf.getUser('user1')
self.failUnless(user.has_permission('Add Folders', self.app)) self.failUnless(user.has_permission('View', app))
app.manage_role('role1', ['Add Folders'])
self.failUnless(user.has_permission('Add Folders', app))
def testHasLocalRolePermission(self): def testHasLocalRolePermission(self):
user = self.uf.getUser('user1') app = self._makeApp()
self.app.manage_role('Owner', ['Add Folders']) uf = self._makeOne(app)
self.app.manage_addLocalRoles('user1', ['Owner']) user = uf.getUser('user1')
self.failUnless(user.has_permission('Add Folders', self.app)) app.manage_role('Owner', ['Add Folders'])
app.manage_addLocalRoles('user1', ['Owner'])
self.failUnless(user.has_permission('Add Folders', app))
def testAuthenticate(self): def testAuthenticate(self):
user = self.uf.getUser('user1') app = self._makeApp()
self.failUnless(user.authenticate('secret', self.app.REQUEST)) uf = self._makeOne(app)
user = uf.getUser('user1')
self.failUnless(user.authenticate('secret', app.REQUEST))
def testValidate(self): def testValidate(self):
user = self.uf.validate(self.app.REQUEST, self.basic, ['role1']) app = self._makeApp()
uf = self._makeOne(app)
user = uf.validate(app.REQUEST, self._makeBasicAuthToken(),
['role1'])
self.failIfEqual(user, None) self.failIfEqual(user, None)
self.assertEqual(user.getUserName(), 'user1') self.assertEqual(user.getUserName(), 'user1')
def testNotValidateWithoutAuth(self): def testNotValidateWithoutAuth(self):
user = self.uf.validate(self.app.REQUEST, '', ['role1']) app = self._makeApp()
uf = self._makeOne(app)
user = uf.validate(app.REQUEST, '', ['role1'])
self.assertEqual(user, None) self.assertEqual(user, None)
def testValidateWithoutRoles(self): def testValidateWithoutRoles(self):
...@@ -152,30 +174,39 @@ class UserFolderTests(unittest.TestCase): ...@@ -152,30 +174,39 @@ class UserFolderTests(unittest.TestCase):
# really should have expected success, since the user and the # really should have expected success, since the user and the
# object being checked both have the role 'role1', even though no # object being checked both have the role 'role1', even though no
# roles are passed explicitly to the userfolder validate method. # roles are passed explicitly to the userfolder validate method.
user = self.uf.validate(self.app.REQUEST, self.basic) app = self._makeApp()
uf = self._makeOne(app)
user = uf.validate(app.REQUEST, self._makeBasicAuthToken())
self.assertEqual(user.getUserName(), 'user1') self.assertEqual(user.getUserName(), 'user1')
def testNotValidateWithEmptyRoles(self): def testNotValidateWithEmptyRoles(self):
user = self.uf.validate(self.app.REQUEST, self.basic, []) app = self._makeApp()
uf = self._makeOne(app)
user = uf.validate(app.REQUEST, self._makeBasicAuthToken(), [])
self.assertEqual(user, None) self.assertEqual(user, None)
def testNotValidateWithWrongRoles(self): def testNotValidateWithWrongRoles(self):
user = self.uf.validate(self.app.REQUEST, self.basic, ['Manager']) app = self._makeApp()
uf = self._makeOne(app)
user = uf.validate(app.REQUEST, self._makeBasicAuthToken(),
['Manager'])
self.assertEqual(user, None) self.assertEqual(user, None)
def testAllowAccessToUser(self): def testAllowAccessToUser(self):
self.login('user1') app = self._makeApp()
try: uf = self._makeOne(app)
self.app.restrictedTraverse('doc') self._login(uf, 'user1')
except Unauthorized: app.restrictedTraverse('doc')
self.fail('Unauthorized')
def testDenyAccessToAnonymous(self): def testDenyAccessToAnonymous(self):
self.assertRaises(Unauthorized, self.app.restrictedTraverse, 'doc') from AccessControl import Unauthorized
app = self._makeApp()
self.assertRaises(Unauthorized, app.restrictedTraverse, 'doc')
def testMaxListUsers(self): def testMaxListUsers(self):
# create a folder-ish thing which contains a roleManager, # create a folder-ish thing which contains a roleManager,
# then put an acl_users object into the folde-ish thing # then put an acl_users object into the folde-ish thing
from AccessControl.User import BasicUserFolder
class Folderish(BasicUserFolder): class Folderish(BasicUserFolder):
def __init__(self, size, count): def __init__(self, size, count):
...@@ -220,7 +251,7 @@ class UserFolderTests(unittest.TestCase): ...@@ -220,7 +251,7 @@ class UserFolderTests(unittest.TestCase):
USER_ID = 'not_yet_encrypted' USER_ID = 'not_yet_encrypted'
PASSWORD = 'password' PASSWORD = 'password'
uf = UserFolder().__of__(self.app) uf = self._makeOne()
uf.encrypt_passwords = True uf.encrypt_passwords = True
self.failIf(uf._isPasswordEncrypted(PASSWORD)) self.failIf(uf._isPasswordEncrypted(PASSWORD))
...@@ -236,7 +267,7 @@ class UserFolderTests(unittest.TestCase): ...@@ -236,7 +267,7 @@ class UserFolderTests(unittest.TestCase):
USER_ID = 'already_encrypted' USER_ID = 'already_encrypted'
PASSWORD = 'password' PASSWORD = 'password'
uf = UserFolder().__of__(self.app) uf = self._makeOne()
uf.encrypt_passwords = True uf.encrypt_passwords = True
ENCRYPTED = uf._encryptPassword(PASSWORD) ENCRYPTED = uf._encryptPassword(PASSWORD)
...@@ -249,34 +280,41 @@ class UserFolderTests(unittest.TestCase): ...@@ -249,34 +280,41 @@ class UserFolderTests(unittest.TestCase):
class UserTests(unittest.TestCase): class UserTests(unittest.TestCase):
def _getTargetClass(self):
from AccessControl.User import User
return User
def _makeOne(self, name, password, roles, domains):
return self._getTargetClass()(name, password, roles, domains)
def testGetUserName(self): def testGetUserName(self):
f = User('chris', '123', ['Manager'], []) f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getUserName(), 'chris') self.assertEqual(f.getUserName(), 'chris')
def testGetUserId(self): def testGetUserId(self):
f = User('chris', '123', ['Manager'], []) f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getId(), 'chris') self.assertEqual(f.getId(), 'chris')
def testBaseUserGetIdEqualGetName(self): def testBaseUserGetIdEqualGetName(self):
# this is true for the default user type, but will not # this is true for the default user type, but will not
# always be true for extended user types going forward (post-2.6) # always be true for extended user types going forward (post-2.6)
f = User('chris', '123', ['Manager'], []) f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getId(), f.getUserName()) self.assertEqual(f.getId(), f.getUserName())
def testGetPassword(self): def testGetPassword(self):
f = User('chris', '123', ['Manager'], []) f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f._getPassword(), '123') self.assertEqual(f._getPassword(), '123')
def testGetRoles(self): def testGetRoles(self):
f = User('chris', '123', ['Manager'], []) f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getRoles(), ('Manager', 'Authenticated')) self.assertEqual(f.getRoles(), ('Manager', 'Authenticated'))
def testGetDomains(self): def testGetDomains(self):
f = User('chris', '123', ['Manager'], []) f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getDomains(), ()) self.assertEqual(f.getDomains(), ())
def testRepr(self): def testRepr(self):
f = User('flo', '123', ['Manager'], []) f = self._makeOne('flo', '123', ['Manager'], [])
self.assertEqual(repr(f), "<User 'flo'>") self.assertEqual(repr(f), "<User 'flo'>")
def testReprSpecial(self): def testReprSpecial(self):
...@@ -291,11 +329,9 @@ class UserTests(unittest.TestCase): ...@@ -291,11 +329,9 @@ class UserTests(unittest.TestCase):
self.assertEqual(repr(system), self.assertEqual(repr(system),
"<UnrestrictedUser 'System Processes'>") "<UnrestrictedUser 'System Processes'>")
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(UserFolderTests)) suite.addTest(unittest.makeSuite(UserFolderTests))
suite.addTest(unittest.makeSuite(UserTests)) suite.addTest(unittest.makeSuite(UserTests))
return suite return suite
if __name__ == '__main__':
unittest.main(defaultTest='test_suite')
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment