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 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""User folder tests.
$Id$
""" Unit tests for AccessControl.User
"""
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):
def setUp(self):
import transaction
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):
import transaction
from AccessControl.SecurityManagement import noSecurityManager
noSecurityManager()
transaction.abort()
self.app._p_jar.close()
def login(self, name):
user = self.uf.getUserById(name)
user = user.__of__(self.uf)
def _getTargetClass(self):
from AccessControl.User import UserFolder
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)
def test_z3interfaces(self):
def test_class_conforms_to_IStandardUserFolder(self):
from AccessControl.interfaces import IStandardUserFolder
from AccessControl.User import UserFolder
from zope.interface.verify import verifyClass
verifyClass(IStandardUserFolder, UserFolder)
verifyClass(IStandardUserFolder, self._getTargetClass())
def testGetUser(self):
self.failIfEqual(self.uf.getUser('user1'), None)
uf = self._makeOne()
self.failIfEqual(uf.getUser('user1'), None)
def testGetBadUser(self):
self.assertEqual(self.uf.getUser('user2'), None)
uf = self._makeOne()
self.assertEqual(uf.getUser('user2'), None)
def testGetUserById(self):
self.failIfEqual(self.uf.getUserById('user1'), None)
uf = self._makeOne()
self.failIfEqual(uf.getUserById('user1'), None)
def testGetBadUserById(self):
self.assertEqual(self.uf.getUserById('user2'), None)
uf = self._makeOne()
self.assertEqual(uf.getUserById('user2'), None)
def testGetUsers(self):
users = self.uf.getUsers()
uf = self._makeOne()
users = uf.getUsers()
self.failUnless(users)
self.assertEqual(users[0].getUserName(), 'user1')
def testGetUserNames(self):
names = self.uf.getUserNames()
uf = self._makeOne()
names = uf.getUserNames()
self.failUnless(names)
self.assertEqual(names[0], 'user1')
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(password, 'secret')
def testGetRoles(self):
user = self.uf.getUser('user1')
uf = self._makeOne()
user = uf.getUser('user1')
self.failUnless('role1' in user.getRoles())
def testGetRolesInContext(self):
user = self.uf.getUser('user1')
self.app.manage_addLocalRoles('user1', ['Owner'])
roles = user.getRolesInContext(self.app)
app = self._makeApp()
uf = self._makeOne(app)
user = uf.getUser('user1')
app.manage_addLocalRoles('user1', ['Owner'])
roles = user.getRolesInContext(app)
self.failUnless('role1' in roles)
self.failUnless('Owner' in roles)
def testHasRole(self):
user = self.uf.getUser('user1')
self.failUnless(user.has_role('role1', self.app))
app = self._makeApp()
uf = self._makeOne(app)
user = uf.getUser('user1')
self.failUnless(user.has_role('role1', app))
def testHasLocalRole(self):
user = self.uf.getUser('user1')
self.app.manage_addLocalRoles('user1', ['Owner'])
self.failUnless(user.has_role('Owner', self.app))
app = self._makeApp()
uf = self._makeOne(app)
user = uf.getUser('user1')
app.manage_addLocalRoles('user1', ['Owner'])
self.failUnless(user.has_role('Owner', app))
def testHasPermission(self):
user = self.uf.getUser('user1')
self.failUnless(user.has_permission('View', self.app))
self.app.manage_role('role1', ['Add Folders'])
self.failUnless(user.has_permission('Add Folders', self.app))
app = self._makeApp()
uf = self._makeOne(app)
user = uf.getUser('user1')
self.failUnless(user.has_permission('View', app))
app.manage_role('role1', ['Add Folders'])
self.failUnless(user.has_permission('Add Folders', app))
def testHasLocalRolePermission(self):
user = self.uf.getUser('user1')
self.app.manage_role('Owner', ['Add Folders'])
self.app.manage_addLocalRoles('user1', ['Owner'])
self.failUnless(user.has_permission('Add Folders', self.app))
app = self._makeApp()
uf = self._makeOne(app)
user = uf.getUser('user1')
app.manage_role('Owner', ['Add Folders'])
app.manage_addLocalRoles('user1', ['Owner'])
self.failUnless(user.has_permission('Add Folders', app))
def testAuthenticate(self):
user = self.uf.getUser('user1')
self.failUnless(user.authenticate('secret', self.app.REQUEST))
app = self._makeApp()
uf = self._makeOne(app)
user = uf.getUser('user1')
self.failUnless(user.authenticate('secret', app.REQUEST))
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.assertEqual(user.getUserName(), 'user1')
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)
def testValidateWithoutRoles(self):
......@@ -152,30 +174,39 @@ class UserFolderTests(unittest.TestCase):
# really should have expected success, since the user and the
# object being checked both have the role 'role1', even though no
# 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')
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)
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)
def testAllowAccessToUser(self):
self.login('user1')
try:
self.app.restrictedTraverse('doc')
except Unauthorized:
self.fail('Unauthorized')
app = self._makeApp()
uf = self._makeOne(app)
self._login(uf, 'user1')
app.restrictedTraverse('doc')
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):
# create a folder-ish thing which contains a roleManager,
# then put an acl_users object into the folde-ish thing
from AccessControl.User import BasicUserFolder
class Folderish(BasicUserFolder):
def __init__(self, size, count):
......@@ -220,7 +251,7 @@ class UserFolderTests(unittest.TestCase):
USER_ID = 'not_yet_encrypted'
PASSWORD = 'password'
uf = UserFolder().__of__(self.app)
uf = self._makeOne()
uf.encrypt_passwords = True
self.failIf(uf._isPasswordEncrypted(PASSWORD))
......@@ -236,7 +267,7 @@ class UserFolderTests(unittest.TestCase):
USER_ID = 'already_encrypted'
PASSWORD = 'password'
uf = UserFolder().__of__(self.app)
uf = self._makeOne()
uf.encrypt_passwords = True
ENCRYPTED = uf._encryptPassword(PASSWORD)
......@@ -249,34 +280,41 @@ class UserFolderTests(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):
f = User('chris', '123', ['Manager'], [])
f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getUserName(), 'chris')
def testGetUserId(self):
f = User('chris', '123', ['Manager'], [])
f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getId(), 'chris')
def testBaseUserGetIdEqualGetName(self):
# this is true for the default user type, but will not
# 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())
def testGetPassword(self):
f = User('chris', '123', ['Manager'], [])
f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f._getPassword(), '123')
def testGetRoles(self):
f = User('chris', '123', ['Manager'], [])
f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getRoles(), ('Manager', 'Authenticated'))
def testGetDomains(self):
f = User('chris', '123', ['Manager'], [])
f = self._makeOne('chris', '123', ['Manager'], [])
self.assertEqual(f.getDomains(), ())
def testRepr(self):
f = User('flo', '123', ['Manager'], [])
f = self._makeOne('flo', '123', ['Manager'], [])
self.assertEqual(repr(f), "<User 'flo'>")
def testReprSpecial(self):
......@@ -291,11 +329,9 @@ class UserTests(unittest.TestCase):
self.assertEqual(repr(system),
"<UnrestrictedUser 'System Processes'>")
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(UserFolderTests))
suite.addTest(unittest.makeSuite(UserTests))
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