[CMF-checkins] CVS: CMF/CMFCore/tests - test_ActionInformation.py:1.2 test_ActionsTool.py:1.2 test_Expression.py:1.2 test_all.py:1.7
Andrew Sawyers
andrew@zope.com
Fri, 4 Jan 2002 14:50:35 -0500
Update of /cvs-repository/CMF/CMFCore/tests
In directory cvs.zope.org:/tmp/cvs-serv10417/CMFCore/tests
Modified Files:
test_all.py
Added Files:
test_ActionInformation.py test_ActionsTool.py
test_Expression.py
Log Message:
*Merging andrew_ttw_actions-branch into the head
*Adds TTW configuration of Action Providers
*Allows tools to have actions managed TTW
*Added unittests for ActionTool, ActionInformation, and
Expression
*Added TTW action management to all stock CMF tools
*Added Expression module for allowing actions and conditions of
actions to be TALES.
=== CMF/CMFCore/tests/test_ActionInformation.py 1.1 => 1.2 ===
+from Products.CMFDefault.MembershipTool import *
+from Products.CMFCore.PortalContent import PortalContent
+from Products.CMFCore.ActionInformation import ActionInformation
+from Products.CMFCore.Expression import Expression, createExprContext
+
+class DummyMembershipTool:
+ def isAnonymousUser(self):
+ return 1
+
+class DummyContent(PortalContent, OFS.SimpleItem.Item):
+ """
+ """
+ meta_type = 'Dummy'
+ url = 'foo_url'
+
+ def __init__(self, id, url=None):
+ self.url = url
+
+ def absolute_url(self):
+ return self.url
+
+class ActionInformationTests(unittest.TestCase):
+
+ def setUp( self ):
+ get_transaction().begin()
+ self.connection = Zope.DB.open()
+ root = self.root = self.connection.root()[ 'Application' ]
+ root._setObject('portal', DummyContent('portal', 'url_portal'))
+ portal = self.portal = self.root.portal
+ portal.portal_membership = DummyMembershipTool()
+ self.folder = DummyContent('foo', 'url_foo')
+ self.object = DummyContent('bar', 'url_bar')
+
+ def test_basic_construction(self):
+ ai = ActionInformation(id='view'
+ )
+ self.assertEqual(ai.getId(), 'view')
+ self.assertEqual(ai.Title(), 'view')
+ self.assertEqual(ai.Description(), '')
+ self.assertEqual(ai.getCondition(), '')
+ self.assertEqual(ai.getActionExpression(), '')
+ self.assertEqual(ai.getVisibility(), 1)
+ self.assertEqual(ai.getCategory(), 'object')
+ self.assertEqual(ai.getPermissions(), ())
+
+ def test_construction_with_Expressions(self):
+ ai = ActionInformation(id='view'
+ , title='View'
+ , action=Expression(
+ text='view')
+ , condition=Expression(
+ text='member')
+ , category='global'
+ , visible=0)
+ self.assertEqual(ai.getId(), 'view')
+ self.assertEqual(ai.Title(), 'View')
+ self.assertEqual(ai.Description(), '')
+ self.assertEqual(ai.getCondition(), 'member')
+ self.assertEqual(ai.getActionExpression(), 'view')
+ self.assertEqual(ai.getVisibility(), 0)
+ self.assertEqual(ai.getCategory(), 'global')
+ self.assertEqual(ai.getPermissions(), ())
+
+ def test_Condition(self):
+ portal = self.portal
+ folder = self.folder
+ object = self.object
+ ai = ActionInformation(id='view'
+ , title='View'
+ , action=Expression(
+ text='view')
+ , condition=Expression(
+ text='member')
+ , category='global'
+ , visible=1)
+ ec = createExprContext(folder, portal, object)
+ self.failIf(ai.testCondition(ec))
+
+ def tearDown( self ):
+ get_transaction().abort()
+ self.connection.close()
+
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(ActionInformationTests))
+ return suite
+
+def run():
+ unittest.TextTestRunner().run(test_suite())
+
+if __name__ == '__main__':
+ run()
=== CMF/CMFCore/tests/test_ActionsTool.py 1.1 => 1.2 ===
+from Products.CMFCore.ActionsTool import *
+from Products.CMFDefault.URLTool import *
+import ZPublisher.HTTPRequest
+
+class ActionsToolTests( unittest.TestCase ):
+
+ def setUp( self ):
+ get_transaction().begin()
+ self.connection = Zope.DB.open()
+ root = self.root = self.connection.root()[ 'Application' ]
+
+ env = { 'SERVER_NAME' : 'http://localhost'
+ , 'SERVER_PORT' : '80'
+ }
+ root.REQUEST = ZPublisher.HTTPRequest.HTTPRequest( None, env, None )
+
+ root._setObject( 'portal_actions', ActionsTool() )
+ root._setObject('foo', URLTool() )
+ self.tool = root.portal_actions
+ self.ut = root.foo
+ self.tool.action_providers = ('portal_actions',)
+
+ def test_actionProviders(self):
+ tool = self.tool
+ self.assertEqual(tool.listActionProviders(), ('portal_actions',))
+
+ def test_addActionProvider(self):
+ tool = self.tool
+ tool.addActionProvider('foo')
+ self.assertEqual(tool.listActionProviders(),
+ ('portal_actions', 'foo'))
+
+ def test_delActionProvider(self):
+ tool = self.tool
+ tool.deleteActionProvider('foo')
+ self.assertEqual(tool.listActionProviders(),
+ ('portal_actions',))
+
+ def tearDown( self ):
+ get_transaction().abort()
+ self.connection.close()
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(ActionsToolTests))
+ return suite
+
+def run():
+ unittest.TextTestRunner().run(test_suite())
+
+if __name__ == '__main__':
+ run()
=== CMF/CMFCore/tests/test_Expression.py 1.1 => 1.2 ===
+from AccessControl.SecurityManagement import newSecurityManager
+from AccessControl.SecurityManagement import noSecurityManager
+from AccessControl import SecurityManager
+from Products.CMFCore.ActionsTool import *
+from Products.CMFCore.ActionInformation import ActionInformation
+from Products.CMFCore.PortalContent import PortalContent
+from Products.CMFCore.Expression import Expression, createExprContext
+import ZPublisher.HTTPRequest
+
+class PermissiveSecurityPolicy:
+ """
+ Stub out the existing security policy for unit testing purposes.
+ """
+ #
+ # Standard SecurityPolicy interface
+ #
+ def validate( self
+ , accessed=None
+ , container=None
+ , name=None
+ , value=None
+ , context=None
+ , roles=None
+ , *args
+ , **kw):
+ return 1
+
+ def checkPermission( self, permission, object, context) :
+ if permission == 'forbidden permission':
+ return 0
+ return 1
+
+class UnitTestUser( Acquisition.Implicit ):
+ """
+ Stubbed out manager for unit testing purposes.
+ """
+ def getId( self ):
+ return 'unit_tester'
+
+ getUserName = getId
+
+ def allowed( self, object, object_roles=None ):
+ # for testing permissions on actions
+ if object.getId() == 'actions_dummy':
+ if 'Anonymous' in object_roles:
+ return 1
+ else:
+ return 0
+ return 1
+
+class DummyMembershipTool:
+ def __init__(self, anon=1):
+ self.anon = anon
+
+ def isAnonymousUser(self):
+ return self.anon
+
+ def getAuthenticatedMember(self):
+ return "member"
+
+class DummyContent(PortalContent, OFS.SimpleItem.Item):
+ """
+ """
+ meta_type = 'Dummy'
+ url = 'foo_url'
+
+ def __init__(self, id, url=None):
+ self.id = id
+ self.url = url
+
+ def absolute_url(self):
+ return self.url
+
+class ExpressionTests( unittest.TestCase ):
+
+ def setUp( self ):
+ get_transaction().begin()
+ self._policy = PermissiveSecurityPolicy()
+ self._oldPolicy = SecurityManager.setSecurityPolicy(self._policy)
+ self.connection = Zope.DB.open()
+ root = self.root = self.connection.root()[ 'Application' ]
+ newSecurityManager(None, UnitTestUser().__of__( self.root ))
+ root._setObject('portal', DummyContent('portal', 'url_portal'))
+ portal = self.portal = self.root.portal
+ self.folder = DummyContent('foo', 'url_foo')
+ self.object = DummyContent('bar', 'url_bar')
+ self.ai = ActionInformation(id='view'
+ , title='View'
+ , action=Expression(
+ text='view')
+ , condition=Expression(
+ text='member')
+ , category='global'
+ , visible=1)
+
+ def test_anonymous_ec(self):
+ self.portal.portal_membership = DummyMembershipTool()
+ ec = createExprContext(self.folder, self.portal, self.object)
+ member = ec.global_vars['member']
+ self.failIf(member)
+
+
+ def test_authenticatedUser_ec(self):
+ self.portal.portal_membership = DummyMembershipTool(anon=0)
+ ec = createExprContext(self.folder, self.portal, self.object)
+ member = ec.global_vars['member']
+ self.assertEqual(member, 'member')
+
+ def test_ec_context(self):
+ self.portal.portal_membership = DummyMembershipTool()
+ ec = createExprContext(self.folder, self.portal, self.object)
+ object = ec.global_vars['object']
+ portal = ec.global_vars['portal']
+ folder = ec.global_vars['folder']
+ self.failUnless(object)
+ self.assertEqual(object.id, 'bar')
+ self.assertEqual(object.absolute_url(), 'url_bar')
+ self.failUnless(portal)
+ self.assertEqual(portal.id, 'portal')
+ self.assertEqual(portal.absolute_url(), 'url_portal')
+ self.failUnless(folder)
+ self.assertEqual(folder.id, 'foo')
+ self.assertEqual(folder.absolute_url(), 'url_foo')
+
+
+
+ def tearDown( self ):
+ get_transaction().abort()
+ self.connection.close()
+ noSecurityManager()
+ SecurityManager.setSecurityPolicy(self._oldPolicy)
+
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(ExpressionTests))
+ return suite
+
+def run():
+ unittest.TextTestRunner().run(test_suite())
+
+if __name__ == '__main__':
+ run()
=== CMF/CMFCore/tests/test_all.py 1.6 => 1.7 ===
from Products.CMFCore.tests import test_PortalFolder
from Products.CMFCore.tests import test_TypesTool
+from Products.CMFCore.tests import test_ActionsTool
+from Products.CMFCore.tests import test_ActionInformation
+from Products.CMFCore.tests import test_Expression
from Products.CMFCore.tests import test_CatalogTool
def test_suite():
@@ -10,6 +13,9 @@
suite.addTest( test_ContentTypeRegistry.test_suite() )
suite.addTest( test_PortalFolder.test_suite() )
suite.addTest( test_TypesTool.test_suite() )
+ suite.addTest( test_ActionsTool.test_suite() )
+ suite.addTest( test_ActionInformation.test_suite() )
+ suite.addTest( test_Expression.test_suite() )
suite.addTest( test_CatalogTool.test_suite() )
return suite