[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/t Syndication Tool uprgade test works in theory.

Charlie Clark cvs-admin at zope.org
Tue Mar 13 00:07:01 UTC 2012


Log message for revision 124588:
  Syndication Tool uprgade test works in theory.

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/tests/test_syndication_upgrade.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/tests/test_syndication_upgrade.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/tests/test_syndication_upgrade.py	2012-03-12 23:37:18 UTC (rev 124587)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/tests/test_syndication_upgrade.py	2012-03-13 00:06:58 UTC (rev 124588)
@@ -17,12 +17,16 @@
 import unittest
 from Testing import ZopeTestCase
 
-import transaction
-
-from AccessControl.SecurityManagement import newSecurityManager
-from AccessControl.User import UnrestrictedUser
+from DateTime.DateTime import DateTime
+from Products.CMFCore.PortalFolder import PortalFolder
+from Products.CMFCore.interfaces import ISyndicationTool, IFolderish
 from Products.CMFDefault.testing import FunctionalLayer
+from Products.CMFDefault.SyndicationInfo import SyndicationInfo, ISyndicationInfo
+from Products.CMFDefault.SyndicationTool import SyndicationTool
 from zope.site.hooks import setSite
+from zope.component import getSiteManager
+from zope.component import getAdapter
+from zope.testing.cleanup import cleanUp
 
 
 class FunctionalUpgradeTestCase(ZopeTestCase.FunctionalTestCase):
@@ -32,22 +36,49 @@
 
     def setUp(self):
         super(FunctionalUpgradeTestCase, self).setUp()
+        sm = getSiteManager()
+        #self.sm = sm
+        sm.registerAdapter(SyndicationInfo, [IFolderish], ISyndicationInfo)
+        syndication  = SyndicationTool()
+        sm.registerUtility(syndication, ISyndicationTool)
+        from zope.annotation.interfaces import IAnnotations
+        from zope.annotation.attribute import AttributeAnnotations
+        #sm.registerAdapter(AttributeAnnotations, [IFolderish], IAnnotations)
+        folder = PortalFolder("Dummy Portal Folder")
+        self.folder = folder
 
-    def makeOne(self):
-        """Create an old style SyndicatonInformation for a folder"""
-        from Products.CMFCore.PortalFolder import PortalFolder
+
+    def _make_info(self):
+        """Add an old style SyndicationInfo to the folder"""
         from Products.CMFDefault.SyndicationInfo import SyndicationInformation
-        folder = PortalFolder(syndicated_folder)
         info = SyndicationInformation()
-        info.syndBase = datetime.datetime.now()
-        info.syndPeriod = 1
-        info.syndFrequency = 1
+        info.syUpdateBase = DateTime()
+        info.syUpdatePeriod = 1
+        info.syUpdateFrequency = 1
         info.max_items = 5
+        return info
 
-    def test_nothing(self):
-        pass
+    def test_upgrade(self):
+        info = self._make_info()
+        self.folder._setObject(info.getId(), info)
+        old_info = self.folder._getOb(info.getId())
+        self.assertTrue('syndication_information' in self.folder.objectIds())
+        self.assertTrue(isinstance(old_info.syUpdateBase, DateTime))
 
+        from Products.CMFDefault.upgrade.to23 import change_to_adapter
+        change_to_adapter(old_info)
+        self.assertFalse('syndication_information' in self.folder.objectIds())
+        new_info = getAdapter(self.folder, ISyndicationInfo)
+        self.assertEqual(new_info.max_items, old_info.max_items)
+        self.assertEqual(new_info.period, old_info.syUpdatePeriod)
+        self.assertEqual(new_info.frequency, old_info.syUpdateFrequency)
+        self.assertFalse(old_info.syUpdateBase.timezoneNaive())
+        self.assertTrue(new_info.base.tzinfo is None)
 
+    def TearDown(self):
+        cleanUp()
+
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(FunctionalUpgradeTestCase),

Modified: Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2012-03-12 23:37:18 UTC (rev 124587)
+++ Products.CMFDefault/trunk/Products/CMFDefault/upgrade/to23.py	2012-03-13 00:06:58 UTC (rev 124588)
@@ -322,23 +322,44 @@
             logger.info('Registered %s for interface %s' % (tool_id,
                                                             tool_interface))
 
-def upgrade_syndicationtool(tool):
-    """Replace SyndicatonInformation objects with SyndicationInfo adapters"""
 
-    def change_to_adapter(SyndicationInformation):
-        """Read values from the SyndicationInformation object and set them on
-        the adapter"""
-        folder = aq_parent(aq_inner(SyndicationInformation))
-        adapter = getAdapter(folder, ISyndicationInfo)
-        adapter.period = SyndicationInformation.syndPeriod
-        adapter.base = SyndicationInformation.syndBase
-        adapter.frequency = SyndicationInformation.syndFrequency
-        adapter.max_items = SyndicationInformation.max_items
-        folder._delObj(SyndicationInformation.getId())
+def DateTime_to_datetime(Zope_DateTime):
+    """
+    Convert from Zope DateTime to Python datetime and strip timezone
+    """
+    from DateTime.DateTime import DateTime
+    naive = DateTime(str(Zope_DateTime).rsplit(' ', 1)[0])
+    return naive.asdatetime()
 
-    # convert Zope.DateTime to python.datetime on the tool
+def change_to_adapter(SyndicationInformation, path=None):
+    """
+    Read values from the SyndicationInformation object and set them on
+    the adapter and then delete the SyndicationInformation object
+    """
+    from zope.component import getAdapter
+    from Products.CMFDefault.SyndicationInfo import ISyndicationInfo
+    folder = aq_parent(aq_inner(SyndicationInformation))
+    adapter = getAdapter(folder, ISyndicationInfo)
+    adapter.period = SyndicationInformation.syUpdatePeriod
+    adapter.base = DateTime_to_datetime(SyndicationInformation.syUpdateBase)
+    adapter.frequency = SyndicationInformation.syUpdateFrequency
+    adapter.max_items = SyndicationInformation.max_items
+    folder._delObject(SyndicationInformation.getId())
 
-    # migrate existing SyndicationInformation objects to adapter based Infos.
+
+def check_syndication_tool(tool):
+    """Convert if portal_syndication exists"""
     portal = aq_parent(aq_inner(tool))
-    portal.ZopeFindAndApply(obj_metatypes=["SyndicationInformation"],
-                        apply_func=change_to_adapter)
\ No newline at end of file
+    try:
+        syndication = getToolByName(portal, "portal_syndication")
+        return True
+    except AttributeError:
+        return False
+
+
+def upgrade_syndication_tool(tool):
+    """Replace SyndicatonInformation objects with SyndicationInfo adapters"""
+    portal = aq_parent(aq_inner(tool))
+    syndication = getToolByName(portal, "portal_syndication")
+    syndication.base = DateTime_to_datetime(syndication.syUpdateBase)
+    portal.ZopeFind(portal, obj_metatypes=["SyndicationInformation"])
\ No newline at end of file



More information about the checkins mailing list