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 _______________________________________________ CMF-checkins mailing list [email protected] http://mail.zope.org/mailman/listinfo/cmf-checkins
