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

Tres Seaver <[email protected]>
Newsgroups gmane.comp.web.zope.cmf.cvs
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.