[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/ - made sure getMembersFolder works if tool is used as local utility

Yvo Schubbe y.2011 at wcm-solutions.de
Mon Feb 13 09:15:54 UTC 2012


Log message for revision 124384:
  - made sure getMembersFolder works if tool is used as local utility

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py	2012-02-13 09:12:58 UTC (rev 124383)
+++ Products.CMFDefault/trunk/Products/CMFDefault/MembershipTool.py	2012-02-13 09:15:54 UTC (rev 124384)
@@ -14,13 +14,14 @@
 """
 
 from AccessControl.SecurityInfo import ClassSecurityInfo
-from AccessControl.SecurityManagement import getSecurityManager
 from Acquisition import aq_base
 from Acquisition import aq_inner
 from Acquisition import aq_parent
 from App.class_init import InitializeClass
 from App.special_dtml import DTMLFile
+from zope.globalrequest import getRequest
 from zope.interface import implements
+from ZPublisher.BaseRequest import RequestContainer
 
 from Products.CMFCore.MembershipTool import MembershipTool as BaseTool
 from Products.CMFCore.utils import _checkPermission
@@ -104,12 +105,13 @@
     def getMembersFolder(self):
         """ Get the members folder object.
         """
-        parent = aq_parent( aq_inner(self) )
+        parent = aq_parent(aq_inner(self))
         try:
             members_folder = parent.restrictedTraverse(self.membersfolder_id)
         except (AttributeError, KeyError):
-            members_folder = None
-        return members_folder
+            return None
+        request_container = RequestContainer(REQUEST=getRequest())
+        return members_folder.__of__(request_container)
 
     security.declarePublic('createMemberArea')
     def createMemberArea(self, member_id=''):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py	2012-02-13 09:12:58 UTC (rev 124383)
+++ Products.CMFDefault/trunk/Products/CMFDefault/tests/test_MembershipTool.py	2012-02-13 09:15:54 UTC (rev 124384)
@@ -17,7 +17,11 @@
 import Testing
 
 from AccessControl.SecurityManagement import newSecurityManager
+from five.localsitemanager import make_objectmanager_site
 from zope.component import getSiteManager
+from zope.component.hooks import setSite
+from zope.globalrequest import clearRequest
+from zope.globalrequest import setRequest
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
 
@@ -28,9 +32,10 @@
 from Products.CMFCore.tests.base.dummy import DummyTool
 from Products.CMFCore.tests.base.dummy import DummyUserFolder
 from Products.CMFCore.tests.base.testcase import SecurityTest
+from Products.CMFCore.tests.base.testcase import TransactionalTest
 
 
-class MembershipToolTests(unittest.TestCase):
+class MembershipToolTests(TransactionalTest):
 
     def _makeOne(self, *args, **kw):
         from Products.CMFDefault.MembershipTool import MembershipTool
@@ -38,9 +43,20 @@
         return MembershipTool(*args, **kw)
 
     def setUp(self):
-        self.site = DummySite('site')
-        self.site._setObject( 'portal_membership', self._makeOne() )
+        from Products.CMFCore.interfaces import IMembershipTool
 
+        TransactionalTest.setUp(self)
+        self.site = DummySite('site').__of__(self.app)
+        make_objectmanager_site(self.site)
+        setSite(self.site)
+        self.site._setObject('portal_membership', self._makeOne())
+        sm = getSiteManager()
+        sm.registerUtility(self.site.portal_membership, IMembershipTool)
+
+    def tearDown(self):
+        cleanUp()
+        TransactionalTest.tearDown(self)
+
     def test_interfaces(self):
         from Products.CMFDefault.interfaces import IMembershipTool
         from Products.CMFDefault.MembershipTool import MembershipTool
@@ -48,23 +64,42 @@
         verifyClass(IMembershipTool, MembershipTool)
 
     def test_MembersFolder_methods(self):
-        mtool = self.site.portal_membership
-        self.assertEqual( mtool.getMembersFolder(), None )
-        self.site._setObject( 'Members', DummyFolder() )
-        self.assertEqual( mtool.getMembersFolder(), self.site.Members )
+        from Products.CMFCore.interfaces import IMembershipTool
+
+        mtool = getSiteManager().getUtility(IMembershipTool)
+        self.assertEqual(mtool.getMembersFolder(), None)
+        self.site._setObject('Members', DummyFolder())
+        self.assertEqual(mtool.getMembersFolder(), self.site.Members)
         mtool.setMembersFolderById(id='foo')
-        self.assertEqual( mtool.getMembersFolder(), None )
-        self.site._setObject( 'foo', DummyFolder() )
-        self.assertEqual( mtool.getMembersFolder(), self.site.foo )
-        mtool.setMembersFolderById( id='foo/members' )
-        self.assertEqual( mtool.getMembersFolder(), None )
-        self.site.foo._setObject( 'members', DummyFolder() )
-        self.assertEqual( mtool.getMembersFolder(), self.site.foo.members )
+        self.assertEqual(mtool.getMembersFolder(), None)
+        self.site._setObject('foo', DummyFolder())
+        self.assertEqual(mtool.getMembersFolder(), self.site.foo)
+        mtool.setMembersFolderById(id='foo/members')
+        self.assertEqual(mtool.getMembersFolder(), None)
+        self.site.foo._setObject('members', DummyFolder())
+        self.assertEqual(mtool.getMembersFolder(), self.site.foo.members)
         mtool.setMembersFolderById()
         # Note: self.site is returned due to DummyObject.restrictedTraverse
-        self.assertEqual( mtool.getMembersFolder(), self.site )
+        self.assertEqual(mtool.getMembersFolder(), self.site)
 
+    def test_HomeFolder_methods(self):
+        from Products.CMFCore.interfaces import IMembershipTool
 
+        mtool = getSiteManager().getUtility(IMembershipTool)
+        setRequest(self.REQUEST)
+        self.assertEqual(mtool.getHomeFolder(id='member_foo'), None)
+        self.assertEqual(mtool.getHomeUrl(id='member_foo'), None)
+        self.site._setObject('Members', PortalFolder('Members'))
+        self.assertEqual(mtool.getHomeFolder(id='member_foo'), None)
+        self.assertEqual(mtool.getHomeUrl(id='member_foo'), None)
+        self.site.Members._setObject('member_foo', PortalFolder('member_foo'))
+        self.assertEqual(mtool.getHomeFolder(id='member_foo'),
+                         self.site.Members.member_foo)
+        self.assertEqual(mtool.getHomeUrl(id='member_foo'),
+                         'http://nohost/bar/site/Members/member_foo')
+        clearRequest()
+
+
 class MembershipToolSecurityTests(SecurityTest):
 
     def _makeOne(self, *args, **kw):
@@ -74,7 +109,7 @@
 
     def setUp(self):
         SecurityTest.setUp(self)
-        self.site = DummySite('site').__of__(self.root)
+        self.site = DummySite('site').__of__(self.app)
         self.site._setObject( 'portal_membership', self._makeOne() )
 
     def tearDown(self):



More information about the checkins mailing list