[CMF-checkins] SVN: CMF/branches/1.5/C - CMFDefault.DiscussionTool: Ensure that isDiscussionAllowedFor will

Jens Vagelpohl jens at dataflake.org
Sat Feb 18 15:56:48 EST 2006


Log message for revision 41675:
  - CMFDefault.DiscussionTool: Ensure that isDiscussionAllowedFor will
    not accidentally acquire discussion settings from the content
    object's parent.
    (http://www.zope.org/Collectors/CMF/398)
  

Changed:
  U   CMF/branches/1.5/CHANGES.txt
  U   CMF/branches/1.5/CMFCore/tests/base/dummy.py
  U   CMF/branches/1.5/CMFDefault/DiscussionTool.py
  U   CMF/branches/1.5/CMFDefault/tests/test_DiscussionTool.py

-=-
Modified: CMF/branches/1.5/CHANGES.txt
===================================================================
--- CMF/branches/1.5/CHANGES.txt	2006-02-18 20:56:18 UTC (rev 41674)
+++ CMF/branches/1.5/CHANGES.txt	2006-02-18 20:56:48 UTC (rev 41675)
@@ -2,6 +2,11 @@
 
   Bug Fixes
 
+    - CMFDefault.DiscussionTool: Ensure that isDiscussionAllowedFor will
+      not accidentally acquire discussion settings from the content 
+      object's parent.
+      (http://www.zope.org/Collectors/CMF/398)
+
     - CMFDefault.RegistrationTool: Adding single quotes to the allowed
       characters in the local part of an email address.
       (http://www.zope.org/Collectors/CMF/401)

Modified: CMF/branches/1.5/CMFCore/tests/base/dummy.py
===================================================================
--- CMF/branches/1.5/CMFCore/tests/base/dummy.py	2006-02-18 20:56:18 UTC (rev 41674)
+++ CMF/branches/1.5/CMFCore/tests/base/dummy.py	2006-02-18 20:56:48 UTC (rev 41675)
@@ -75,6 +75,9 @@
     def queryMethodID(self, alias, default=None, context=None):
         return self._actions.get(alias, default)
 
+    def allowDiscussion(self):
+        return False
+
 class DummyContent( PortalContent, Item ):
     """
     A Dummy piece of PortalContent

Modified: CMF/branches/1.5/CMFDefault/DiscussionTool.py
===================================================================
--- CMF/branches/1.5/CMFDefault/DiscussionTool.py	2006-02-18 20:56:18 UTC (rev 41674)
+++ CMF/branches/1.5/CMFDefault/DiscussionTool.py	2006-02-18 20:56:48 UTC (rev 41675)
@@ -112,7 +112,7 @@
     def isDiscussionAllowedFor( self, content ):
         """ Get boolean indicating whether discussion is allowed for content.
         """
-        if hasattr( content, 'allow_discussion' ):
+        if hasattr( aq_base(content), 'allow_discussion' ):
             return bool(content.allow_discussion)
         typeInfo = getToolByName(self, 'portal_types').getTypeInfo( content )
         if typeInfo:

Modified: CMF/branches/1.5/CMFDefault/tests/test_DiscussionTool.py
===================================================================
--- CMF/branches/1.5/CMFDefault/tests/test_DiscussionTool.py	2006-02-18 20:56:18 UTC (rev 41674)
+++ CMF/branches/1.5/CMFDefault/tests/test_DiscussionTool.py	2006-02-18 20:56:48 UTC (rev 41675)
@@ -39,6 +39,7 @@
         self.site = DummySite('site')
         self.site._setObject( 'portal_discussion', self._makeOne() )
         self.site._setObject( 'portal_membership', DummyTool() )
+        self.site._setObject( 'portal_types', DummyTool() )
 
     def test_z2interfaces(self):
         from Interface.Verify import verifyClass
@@ -79,6 +80,16 @@
         dtool.overrideDiscussionFor(foo, None)
         self.failIf( hasattr(foo.aq_base, 'allow_discussion') )
 
+    def test_isDiscussionAllowedFor(self):
+        # Test for Collector issue #398 (allow_discussion wrongly
+        # acquired and used from parent)
+        dtool = self.site.portal_discussion
+        foo = self.site._setObject( 'foo', DummyFolder() )
+        baz = foo._setObject( 'baz', DummyFolder() )
+        dtool.overrideDiscussionFor(foo, 1)
+
+        self.failIf(dtool.isDiscussionAllowedFor(baz))
+
     def test_getDiscussionFor(self):
         dtool = self.site.portal_discussion
         foo = self.site._setObject( 'foo', DummyFolder() )



More information about the CMF-checkins mailing list