[CMF-checkins] CVS: CMF/CMFStaging/tests - testLockTool.py:1.1 testStaging.py:1.4

Shane Hathaway shane@cvs.zope.org
Mon, 13 May 2002 13:14:11 -0400


Update of /cvs-repository/CMF/CMFStaging/tests
In directory cvs.zope.org:/tmp/cvs-serv22059/tests

Modified Files:
	testStaging.py 
Added Files:
	testLockTool.py 
Log Message:
Added tests of LockTool.  Also improved teardown in testStaging.


=== Added File CMF/CMFStaging/tests/testLockTool.py ===
##############################################################################
#
# 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
#
##############################################################################
"""Unit tests for the lock tool.

$Id: testLockTool.py,v 1.1 2002/05/13 17:14:11 shane Exp $
"""

import unittest
import Testing
from Acquisition import aq_base
import Zope
from OFS.Folder import Folder
from AccessControl.SecurityManagement import newSecurityManager, \
     noSecurityManager
from AccessControl.User import SimpleUser

from Products.CMFStaging.LockTool import LockTool, LockingError


class TestUser(SimpleUser):

    def __init__(self, id):
        SimpleUser.__init__(self, id, '', (), ())


class Tests(unittest.TestCase):

    def setUp(self):
        app = Zope.app()
        self.app = app
        if hasattr(app, 'testroot'):
            app._delObject('testroot')
        app.manage_addProduct['OFSP'].manage_addFolder('testroot')
        self.root = app.testroot

        setattr(self.root, LockTool.id, LockTool())
        self.tool = getattr(self.root, LockTool.id)
        self.root.content = Folder()
        self.root.content.id = 'content'
        user = TestUser('sally')
        newSecurityManager(None, user.__of__(self.root.acl_users))
        self.user = user

    def tearDown(self):
        noSecurityManager()
        app = self.app
        if hasattr(app, 'testroot'):
            app._delObject('testroot')
        self.app._p_jar.close()

    def testNotInitiallyLocked(self):
        self.assert_(not self.tool.locked(self.root.content))

    def testLock(self):
        self.tool.lock(self.root.content)
        self.assert_(self.tool.locked(self.root.content))

    def testUnlock(self):
        self.tool.lock(self.root.content)
        self.assert_(self.tool.locked(self.root.content))
        self.tool.unlock(self.root.content)
        self.assert_(not self.tool.locked(self.root.content))
        # Double-check: do it twice.
        self.tool.lock(self.root.content)
        self.tool.unlock(self.root.content)
        self.assert_(not self.tool.locked(self.root.content))

    def testTheftPrevention(self):
        self.tool.lock(self.root.content)
        self.assert_(self.tool.locked(self.root.content))
        # Another user can't steal the lock.
        user2 = TestUser('sue')
        newSecurityManager(None, user2.__of__(self.root.acl_users))
        self.assertRaises(LockingError, self.tool.unlock, self.root.content)
        self.assertRaises(LockingError, self.tool.lock, self.root.content)
        # But the original user can unlock.
        newSecurityManager(None, self.user.__of__(self.root.acl_users))
        self.tool.unlock(self.root.content)
        self.assert_(not self.tool.locked(self.root.content))

    def testLocker(self):
        self.tool.lock(self.root.content)
        self.assert_(self.tool.locker(self.root.content) == 'sally')

    def testIsLockedOut(self):
        # Not locked out if the object is not locked or the
        # current user holds the lock.
        self.assert_(not self.tool.isLockedOut(self.root.content))
        self.tool.lock(self.root.content)
        self.assert_(not self.tool.isLockedOut(self.root.content))
        user2 = TestUser('sue')
        newSecurityManager(None, user2.__of__(self.root.acl_users))
        self.assert_(self.tool.isLockedOut(self.root.content))
        # Go back to original user to double-check (might fail if
        # the computation depends on stored state)
        newSecurityManager(None, self.user.__of__(self.root.acl_users))
        self.assert_(not self.tool.isLockedOut(self.root.content))
        


def test_suite():
    return unittest.TestSuite((
        unittest.makeSuite(Tests),
        ))

if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')



=== CMF/CMFStaging/tests/testStaging.py 1.3 => 1.4 ===
 from Acquisition import aq_base
 from OFS.Folder import Folder
-from OFS.Application import Application
 
 from Products.CMFStaging.StagingTool import StagingTool, StagingError
 from Products.ZopeVersionControl.Utility import VersionControlError
@@ -62,6 +61,9 @@
 
 
     def tearDown(self):
+        app = self.app
+        if hasattr(app, 'testroot'):
+            app._delObject('testroot')
         self.app._p_jar.close()