[CMF-checkins] SVN: CMF/branches/1.5/C Issue 445: Work around
possible bogus alias left by '_guessMethodAliases'.
Tres Seaver
tseaver at palladion.com
Tue Jul 18 14:48:14 EDT 2006
Log message for revision 69188:
Issue 445: Work around possible bogus alias left by '_guessMethodAliases'.
Changed:
U CMF/branches/1.5/CHANGES.txt
U CMF/branches/1.5/CMFCore/PortalContent.py
U CMF/branches/1.5/CMFCore/tests/base/dummy.py
U CMF/branches/1.5/CMFCore/tests/test_PortalContent.py
-=-
Modified: CMF/branches/1.5/CHANGES.txt
===================================================================
--- CMF/branches/1.5/CHANGES.txt 2006-07-18 18:41:38 UTC (rev 69187)
+++ CMF/branches/1.5/CHANGES.txt 2006-07-18 18:48:12 UTC (rev 69188)
@@ -2,6 +2,10 @@
Bug Fixes
+ - CMFCore.PortalContent: '_guessAliases' may leave type information
+ with a default alias of '(Default)'; work around that case.
+ (http://www.zope.org/Collectors/CMF/445)
+
- CMFCore.CatalogTool: Removed import of LOG object from ZCatalog in
favor of the new 'logger' pattern using Python's logging module.
Modified: CMF/branches/1.5/CMFCore/PortalContent.py
===================================================================
--- CMF/branches/1.5/CMFCore/PortalContent.py 2006-07-18 18:41:38 UTC (rev 69187)
+++ CMF/branches/1.5/CMFCore/PortalContent.py 2006-07-18 18:48:12 UTC (rev 69188)
@@ -97,7 +97,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)
else:
method = _getViewFor(self)
Modified: CMF/branches/1.5/CMFCore/tests/base/dummy.py
===================================================================
--- CMF/branches/1.5/CMFCore/tests/base/dummy.py 2006-07-18 18:41:38 UTC (rev 69187)
+++ CMF/branches/1.5/CMFCore/tests/base/dummy.py 2006-07-18 18:48:12 UTC (rev 69188)
@@ -59,7 +59,7 @@
a page template.
"""
- self.id = id
+ self.id = self._id = id
self.title = title
self._actions = {}
@@ -78,6 +78,31 @@
def allowDiscussion(self):
return False
+ 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/branches/1.5/CMFCore/tests/test_PortalContent.py
===================================================================
--- CMF/branches/1.5/CMFCore/tests/test_PortalContent.py 2006-07-18 18:41:38 UTC (rev 69187)
+++ CMF/branches/1.5/CMFCore/tests/test_PortalContent.py 2006-07-18 18:48:12 UTC (rev 69188)
@@ -36,8 +36,11 @@
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.dummy import DummyTool
+from Products.CMFCore.tests.base.dummy import DummyContent
+from Products.CMFCore.tests.base.dummy import DummyObject
+from OFS.Folder import Folder
-
class PortalContentTests(TestCase):
def test_z2interfaces(self):
@@ -64,7 +67,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