[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py - improved tests

Yvo Schubbe cvs-admin at zope.org
Thu Jul 25 16:52:41 CEST 2013


Log message for revision 130272:
  - improved tests

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py	2013-07-16 17:15:47 UTC (rev 130271)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_MembershipTool.py	2013-07-25 14:52:40 UTC (rev 130272)
@@ -27,6 +27,8 @@
 from Products.CMFCore.interfaces import ISiteRoot
 from Products.CMFCore.interfaces import IWorkflowTool
 from Products.CMFCore.MemberDataTool import MemberDataTool
+from Products.CMFCore.permissions import AccessContentsInformation
+from Products.CMFCore.permissions import View
 from Products.CMFCore.PortalFolder import PortalFolder
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyTool
@@ -36,20 +38,27 @@
 
 class MembershipToolTests(unittest.TestCase):
 
+    def _getTargetClass(self):
+        from Products.CMFCore.MembershipTool import MembershipTool
+
+        return MembershipTool
+
     def test_interfaces(self):
         from Products.CMFCore.interfaces import IMembershipTool
-        from Products.CMFCore.MembershipTool import MembershipTool
 
-        verifyClass(IMembershipTool, MembershipTool)
+        verifyClass(IMembershipTool, self._getTargetClass())
 
 
 class MembershipToolSecurityTests(SecurityTest):
 
-    def _makeOne(self, *args, **kw):
+    def _getTargetClass(self):
         from Products.CMFCore.MembershipTool import MembershipTool
 
-        return MembershipTool(*args, **kw)
+        return MembershipTool
 
+    def _makeOne(self, *args, **kw):
+        return self._getTargetClass()(*args, **kw)
+
     def _makeSite(self, parent=None):
         if parent is None:
             parent = self.app
@@ -69,12 +78,105 @@
         rval = mtool.getCandidateLocalRoles(mtool)
         self.assertEqual(rval, ('Manager', 'Member', 'Owner', 'Reviewer'))
 
+    def test_isMemberAccessAllowed(self):
+        site = self._makeSite()
+        mtool = site.portal_membership
+        acl_users = site._setObject('acl_users', DummyUserFolder())
+        self.assertFalse(mtool.isMemberAccessAllowed('user_foo'))
+
+        newSecurityManager(None, acl_users.user_bar)
+        self.assertFalse(mtool.isMemberAccessAllowed('user_foo'))
+
+        newSecurityManager(None, acl_users.user_foo)
+        self.assertTrue(mtool.isMemberAccessAllowed('user_foo'))
+
+        newSecurityManager(None, acl_users.all_powerful_Oz)
+        self.assertTrue(mtool.isMemberAccessAllowed('user_foo'))
+
+    def test_getMemberById_nonesuch(self):
+        INVALID_USER_ID = 'nonesuch'
+
+        self.app._setObject('folder', Folder('folder'))
+        site = self._makeSite(self.app.folder)
+        tool = site.portal_membership
+        site.acl_users = DummyUserFolder()
+        self.assertEqual(None, tool.getMemberById(INVALID_USER_ID))
+
+    def test_getMemberById_local(self):
+        LOCAL_USER_ID = 'user_foo'
+
+        self.app._setObject('folder', Folder('folder'))
+        site = self._makeSite(self.app.folder)
+        site._setObject('acl_users', DummyUserFolder())
+        tool = site.portal_membership
+        member = tool.getMemberById(LOCAL_USER_ID)
+        self.assertEqual(member.getId(), LOCAL_USER_ID)
+
+    def test_getMemberById_nonlocal(self):
+        NONLOCAL_USER_ID = 'user_bar'
+
+        self.app._setObject('folder', Folder('folder'))
+        site = self._makeSite(self.app.folder)
+        self.app.folder._setObject('acl_users', DummyUserFolder())
+        tool = site.portal_membership
+        member = tool.getMemberById(NONLOCAL_USER_ID)
+        self.assertEqual(member.getId(), NONLOCAL_USER_ID)
+
+    def test_getMemberById_chained(self):
+        LOCAL_USER_ID = 'user_foo'
+        NONLOCAL_USER_ID = 'user_bar'
+
+        self.app._setObject('folder', Folder('folder'))
+        site = self._makeSite(self.app.folder)
+        tool = site.portal_membership
+
+        local_uf = DummyUserFolder()
+        delattr(local_uf, NONLOCAL_USER_ID)
+        site._setObject('acl_users', local_uf)
+
+        nonlocal_uf = DummyUserFolder()
+        delattr(nonlocal_uf, LOCAL_USER_ID)
+        self.app.folder._setObject('acl_users', nonlocal_uf)
+
+        local_member = tool.getMemberById(LOCAL_USER_ID)
+        self.assertEqual(local_member.getId(), LOCAL_USER_ID)
+
+        nonlocal_member = tool.getMemberById(NONLOCAL_USER_ID)
+        self.assertEqual(nonlocal_member.getId(), NONLOCAL_USER_ID)
+
+
+class MembershipToolMemberAreaTests(SecurityTest):
+
+    def _getTargetClass(self):
+        from Products.CMFCore.MembershipTool import MembershipTool
+
+        return MembershipTool
+
+    def _makeOne(self, *args, **kw):
+        return self._getTargetClass()(*args, **kw)
+
+    def _makeSite(self, parent=None):
+        if parent is None:
+            parent = self.app
+        site = DummySite('site').__of__(parent)
+        site.__ac_roles__ = ('Reviewer',)
+        site._setObject('portal_membership', self._makeOne())
+        return site
+
+    def setUp(self):
+        SecurityTest.setUp(self)
+        sm = getSiteManager()
+        sm.registerUtility(DummyTool(), IWorkflowTool)
+
+    def tearDown(self):
+        cleanUp()
+        SecurityTest.tearDown(self)
+
     def test_createMemberArea(self):
         site = self._makeSite()
         mtool = site.portal_membership
         members = site._setObject('Members', PortalFolder('Members'))
         acl_users = site._setObject('acl_users', DummyUserFolder())
-        getSiteManager().registerUtility(DummyTool(), IWorkflowTool)
 
         # permission
         mtool.createMemberArea('user_foo')
@@ -95,10 +197,17 @@
         f = members.user_foo
         ownership = acl_users.user_foo
         localroles = (('user_foo', ('Owner',)),)
+        self.assertEqual(f.Title(), "user_foo's Home")
+        self.assertEqual(f.getPortalTypeName(), 'Folder')
         self.assertEqual(f.getOwner(), ownership)
         self.assertEqual(f.get_local_roles(), localroles,
                          'CMF Collector issue #162 (LocalRoles broken): %s'
                          % str(f.get_local_roles()))
+        for p in (View, AccessContentsInformation):
+            roles = [ r['name'] for r in f.rolesOfPermission(p)
+                      if r['selected'] ]
+            self.assertEqual(roles, ['Manager', 'Owner', 'Reviewer'])
+            self.assertEqual(bool(f.acquiredRolesAreUsedBy(p)), False)
 
     def test_createMemberAreaCMFBTreeFolder(self):
         # Test member area creation if the toplevel "Members" folder is
@@ -107,7 +216,6 @@
         mtool = site.portal_membership
         members = site._setObject('Members', CMFBTreeFolder('Members'))
         acl_users = site._setObject('acl_users', DummyUserFolder())
-        getSiteManager().registerUtility(DummyTool(), IWorkflowTool)
 
         # permission
         mtool.createMemberArea('user_foo')
@@ -128,10 +236,17 @@
         f = members.user_foo
         ownership = acl_users.user_foo
         localroles = (('user_foo', ('Owner',)),)
+        self.assertEqual(f.Title(), "user_foo's Home")
+        self.assertEqual(f.getPortalTypeName(), 'Folder')
         self.assertEqual(f.getOwner(), ownership)
         self.assertEqual(f.get_local_roles(), localroles,
                          'CMF Collector issue #162 (LocalRoles broken): %s'
                          % str(f.get_local_roles()))
+        for p in (View, AccessContentsInformation):
+            roles = [ r['name'] for r in f.rolesOfPermission(p)
+                      if r['selected'] ]
+            self.assertEqual(roles, ['Manager', 'Owner', 'Reviewer'])
+            self.assertEqual(bool(f.acquiredRolesAreUsedBy(p)), False)
 
     def test_createMemberArea_chained(self):
         LOCAL_USER_ID = 'user_foo'
@@ -141,7 +256,6 @@
         site = self._makeSite(self.app.folder)
         mtool = site.portal_membership
         members = site._setObject('Members', PortalFolder('Members'))
-        getSiteManager().registerUtility(DummyTool(), IWorkflowTool)
 
         local_uf = DummyUserFolder()
         delattr(local_uf, NONLOCAL_USER_ID)
@@ -157,21 +271,6 @@
         mtool.createMemberArea(LOCAL_USER_ID)
         self.assertTrue(hasattr(members.aq_self, LOCAL_USER_ID))
 
-    def test_isMemberAccessAllowed(self):
-        site = self._makeSite()
-        mtool = site.portal_membership
-        acl_users = site._setObject('acl_users', DummyUserFolder())
-        self.assertFalse(mtool.isMemberAccessAllowed('user_foo'))
-
-        newSecurityManager(None, acl_users.user_bar)
-        self.assertFalse(mtool.isMemberAccessAllowed('user_foo'))
-
-        newSecurityManager(None, acl_users.user_foo)
-        self.assertTrue(mtool.isMemberAccessAllowed('user_foo'))
-
-        newSecurityManager(None, acl_users.all_powerful_Oz)
-        self.assertTrue(mtool.isMemberAccessAllowed('user_foo'))
-
     def test_deleteMembers(self):
         site = self._makeSite()
         sm = getSiteManager()
@@ -195,8 +294,6 @@
         self.assertFalse('user_foo' in mdtool._members)
         self.assertFalse(hasattr(members.aq_self, 'user_foo'))
 
-        cleanUp()
-
     def test_deleteMembersUnsupported(self):
         # Quite a few user folders do not support the deletion API
         # http://www.zope.org/Collectors/CMF/481
@@ -228,62 +325,11 @@
 
         # Cleanup
         DummyUserFolder.userFolderDelUsers = deletion_method
-        cleanUp()
 
-    def test_getMemberById_nonesuch(self):
-        INVALID_USER_ID = 'nonesuch'
 
-        self.app._setObject('folder', Folder('folder'))
-        site = self._makeSite(self.app.folder)
-        tool = site.portal_membership
-        site.acl_users = DummyUserFolder()
-        self.assertEqual(None, tool.getMemberById(INVALID_USER_ID))
-
-    def test_getMemberById_local(self):
-        LOCAL_USER_ID = 'user_foo'
-
-        self.app._setObject('folder', Folder('folder'))
-        site = self._makeSite(self.app.folder)
-        site._setObject('acl_users', DummyUserFolder())
-        tool = site.portal_membership
-        member = tool.getMemberById(LOCAL_USER_ID)
-        self.assertEqual(member.getId(), LOCAL_USER_ID)
-
-    def test_getMemberById_nonlocal(self):
-        NONLOCAL_USER_ID = 'user_bar'
-
-        self.app._setObject('folder', Folder('folder'))
-        site = self._makeSite(self.app.folder)
-        self.app.folder._setObject('acl_users', DummyUserFolder())
-        tool = site.portal_membership
-        member = tool.getMemberById(NONLOCAL_USER_ID)
-        self.assertEqual(member.getId(), NONLOCAL_USER_ID)
-
-    def test_getMemberById_chained(self):
-        LOCAL_USER_ID = 'user_foo'
-        NONLOCAL_USER_ID = 'user_bar'
-
-        self.app._setObject('folder', Folder('folder'))
-        site = self._makeSite(self.app.folder)
-        tool = site.portal_membership
-
-        local_uf = DummyUserFolder()
-        delattr(local_uf, NONLOCAL_USER_ID)
-        site._setObject('acl_users', local_uf)
-
-        nonlocal_uf = DummyUserFolder()
-        delattr(nonlocal_uf, LOCAL_USER_ID)
-        self.app.folder._setObject('acl_users', nonlocal_uf)
-
-        local_member = tool.getMemberById(LOCAL_USER_ID)
-        self.assertEqual(local_member.getId(), LOCAL_USER_ID)
-
-        nonlocal_member = tool.getMemberById(NONLOCAL_USER_ID)
-        self.assertEqual(nonlocal_member.getId(), NONLOCAL_USER_ID)
-
-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(MembershipToolTests),
         unittest.makeSuite(MembershipToolSecurityTests),
+        unittest.makeSuite(MembershipToolMemberAreaTests),
         ))



More information about the checkins mailing list