[CMF-checkins] SVN: CMF/trunk/CMFCore/ Issue 445: Work around possible bogus alias left by '_guessMethodAliases'.

Tres Seaver tseaver at palladion.com
Tue Jul 18 14:48:47 EDT 2006


Log message for revision 69191:
  Issue 445:  Work around possible bogus alias left by '_guessMethodAliases'.

Changed:
  U   CMF/trunk/CMFCore/PortalContent.py
  U   CMF/trunk/CMFCore/tests/base/dummy.py
  U   CMF/trunk/CMFCore/tests/test_PortalContent.py

-=-
Modified: CMF/trunk/CMFCore/PortalContent.py
===================================================================
--- CMF/trunk/CMFCore/PortalContent.py	2006-07-18 18:48:40 UTC (rev 69190)
+++ CMF/trunk/CMFCore/PortalContent.py	2006-07-18 18:48:46 UTC (rev 69191)
@@ -95,7 +95,7 @@
         """
         ti = self.getTypeInfo()
         method_id = ti and ti.queryMethodID('(Default)', context=self)
-        if method_id:
+        if method_id and method_id!='(Default)':
             method = getattr(self, method_id)
             if getattr(aq_base(method), 'isDocTemp', 0):
                 return method(self, self.REQUEST, self.REQUEST['RESPONSE'])

Modified: CMF/trunk/CMFCore/tests/base/dummy.py
===================================================================
--- CMF/trunk/CMFCore/tests/base/dummy.py	2006-07-18 18:48:40 UTC (rev 69190)
+++ CMF/trunk/CMFCore/tests/base/dummy.py	2006-07-18 18:48:46 UTC (rev 69191)
@@ -98,6 +98,31 @@
         return True
 
 
+    def listActions(self, info=None, object=None):
+        rs = []
+        for k,v in self._actions.items():
+           rs.append( DummyAction( k,v ) )
+        return rs
+
+class DummyAction:
+
+    def __init__( self, id, target, permissions=() ):
+        self._id = id
+        self.target = target
+        self.permissions = permissions
+
+    def getId( self ):
+        return self._id
+
+    # can this be right? e.g. utils._getViewFor calls action
+    # attribute directly, which is not part of API but no other way
+    # to do it...
+    def action( self, context ):
+        return self.target
+
+    def getPermissions( self ):
+        return self.permissions
+
 class DummyContent( PortalContent, Item ):
     """
     A Dummy piece of PortalContent

Modified: CMF/trunk/CMFCore/tests/test_PortalContent.py
===================================================================
--- CMF/trunk/CMFCore/tests/test_PortalContent.py	2006-07-18 18:48:40 UTC (rev 69190)
+++ CMF/trunk/CMFCore/tests/test_PortalContent.py	2006-07-18 18:48:46 UTC (rev 69191)
@@ -20,14 +20,17 @@
 
 from AccessControl.SecurityManagement import newSecurityManager
 from Acquisition import aq_base
+from OFS.Folder import Folder
 from zope.testing.cleanup import cleanUp
 
 from Products.CMFCore.tests.base.dummy import DummySite
 from Products.CMFCore.tests.base.dummy import DummyUserFolder
 from Products.CMFCore.tests.base.testcase import SecurityRequestTest
 from Products.CMFCore.tests.base.testcase import setUpEvents
+from Products.CMFCore.tests.base.dummy import DummyTool
+from Products.CMFCore.tests.base.dummy import DummyContent
+from Products.CMFCore.tests.base.dummy import DummyObject
 
-
 class PortalContentTests(unittest.TestCase):
 
     def test_z2interfaces(self):
@@ -50,7 +53,43 @@
         verifyClass(IContentish, PortalContent)
         verifyClass(IDynamicType, PortalContent)
 
+    def _setupCallTests(self, aliases):
+        # root
+        root = Folder( 'root' )
 
+        # set up dummy type info with problematic double-default alias
+        root._setObject( 'portal_types', DummyTool() )
+        root.portal_types.view_actions = aliases
+
+        # dummy content and skin
+        root._setObject( 'dummycontent', DummyContent() )
+        root._setObject( 'dummy_view', DummyObject() )
+        return root.dummycontent
+
+    def test_DoubleDefaultAlias(self):
+        test_aliases = ( ('(Default)', '(Default)'),
+                         ('view', 'dummy_view'),
+                       )
+        ob = self._setupCallTests(test_aliases)
+        # in unfixed version fail here with AttributeError
+        # can end up with this arrangement using _getAliases though
+        # in fixed version, falls through to _getViewFor, which is BBB
+        self.assertEqual( ob(), 'dummy' )
+
+    def test_BlankDefaultAlias(self):
+        test_aliases = ( ('(Default)', ''),
+                         ('view', 'dummy_view'),
+                       )
+        ob = self._setupCallTests(test_aliases)
+        # blank default is BBB
+        self.assertEqual( ob(), 'dummy' )
+
+    def test_SpecificAlias(self):
+        test_aliases = ( ('(Default)', 'dummy_view'),
+                       )
+        ob = self._setupCallTests(test_aliases)
+        self.assertEqual( ob(), 'dummy' )
+
 class TestContentCopyPaste(SecurityRequestTest):
 
     # Tests related to http://www.zope.org/Collectors/CMF/205



More information about the CMF-checkins mailing list