[Checkins] SVN: Products.CMFCore/branches/matthewwilkes-traversalprecedence/Products/CMFCore/tests/test_SkinsTool.py Test of new publish traversal rules

Matthew Wilkes matthew at matthewwilkes.co.uk
Sun Aug 16 17:09:41 EDT 2009


Log message for revision 102863:
  Test of new publish traversal rules

Changed:
  U   Products.CMFCore/branches/matthewwilkes-traversalprecedence/Products/CMFCore/tests/test_SkinsTool.py

-=-
Modified: Products.CMFCore/branches/matthewwilkes-traversalprecedence/Products/CMFCore/tests/test_SkinsTool.py
===================================================================
--- Products.CMFCore/branches/matthewwilkes-traversalprecedence/Products/CMFCore/tests/test_SkinsTool.py	2009-08-16 20:14:54 UTC (rev 102862)
+++ Products.CMFCore/branches/matthewwilkes-traversalprecedence/Products/CMFCore/tests/test_SkinsTool.py	2009-08-16 21:09:41 UTC (rev 102863)
@@ -18,10 +18,14 @@
 import unittest
 import Testing
 
+from zope.component import adapts, getGlobalSiteManager, queryMultiAdapter
+from zope.interface import implements, Interface
 from zope.interface.verify import verifyClass
 from zope.testing.cleanup import cleanUp
 
+from Products.CMFCore.traverser import PortalRootPublishTraverse
 
+
 class SkinsContainerTests(unittest.TestCase):
 
     def test_interfaces(self):
@@ -107,8 +111,41 @@
         # after a changeSkin the new skin name should be returned
         som.changeSkin('skinB', som.REQUEST)
         self.failUnless(som.getCurrentSkinName() == 'skinB')
+    
+    def test_publish_traversal(self):
+        som = self._makeOne()
+        fake_request = {"URL":"/"}
+        pt = PortalRootPublishTraverse(som, fake_request)
+        
+        class FakeView(object):
+            implements(Interface)
+            adapts(som.__class__, object)
+            
+            def __init__(self, context, request):
+                pass
 
+        a_root = object()
+        a_skinlayer = object()
+        
+        class mock_skin(object):
+            def __init__(self):
+                self.a = a_skinlayer
 
+        # We set up a fake skin that contains a marker object at "a"
+        som.tool.getSkinByName = lambda x:mock_skin()
+        som.changeSkin("mock")
+        assert pt.publishTraverse({"URL":"/"}, "a") is a_skinlayer
+        
+        # Now, we override that with a view
+        gsm = getGlobalSiteManager()
+        gsm.registerAdapter(FakeView, (som.__class__, object), Interface, 'a')
+        assert pt.publishTraverse({"URL":"/"}, "a").__class__ is FakeView
+        
+        # Finally, we override that with a real object at the skinnable root
+        setattr(som, "a", a_root)
+        assert pt.publishTraverse({"URL":"/"}, "a") is a_root
+        
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(SkinsContainerTests),



More information about the Checkins mailing list