import unittest #import Testing #from zope.interface import implements from zope.component import getMultiAdapter from zope.component import provideUtility from Products.Five import zcml from Products.GenericSetup.interfaces import IBody from Products.GenericSetup.ZCatalog.tests import test_exportimport from Products.GenericSetup.testing import DummyLogger from Products.GenericSetup.testing import DummySetupEnviron from quintagroup.catalogupdater.interfaces import ICatalogUpdater from Products.CMFPlone.utils import getFSVersionTuple PLONEFOUR = getFSVersionTuple()[0] == 4 and True or False _CATALOG_BODY = test_exportimport._CATALOG_BODY _ZCTEXT_XML = test_exportimport._ZCTEXT_XML _CATALOG_UPDATE_BODY = """\ %s """ % (PLONEFOUR and '' or '') class DummyCatalogUpdaterUtility: _logger = None def updateMetadata4All(self, catalog, columns): self._logger.info("%s:%s" % (catalog.id, columns)) class CatalogUpdaterZCMLLayer(test_exportimport.ZCatalogXMLAdapterTests.layer): @classmethod def setUp(cls): # Not import 'configure.zcml' - because it register 'catalog_updater' # utility, which we override with DummyCatalogUpdaterUtility test_exportimport.ZCatalogXMLAdapterTests.layer.setUp() import quintagroup.catalogupdater zcml.load_config('overrides.zcml', quintagroup.catalogupdater) class CatalogUpdaterXMLAdapterTest(test_exportimport.ZCatalogXMLAdapterTests): layer = CatalogUpdaterZCMLLayer def _getTargetClass(self): from quintagroup.catalogupdater.exportimport.catalogupdater \ import CatalogUpdaterXMLAdapter return CatalogUpdaterXMLAdapter def setUp(self): super(CatalogUpdaterXMLAdapterTest, self).setUp() self.logger = DummyLogger('CatalogUpdaterLogger', []) dummy_cu = DummyCatalogUpdaterUtility() dummy_cu._logger = self.logger provideUtility(dummy_cu, ICatalogUpdater, name="catalog_updater") def getLastMessage(self): messages = getattr(self.logger, '_messages', []) return messages[-1] or [None, ] * 3 def test_body_set_update(self): # Assert that the catalog ends up the way we expect it to. self._populate_special(self._obj) context = DummySetupEnviron() context._should_purge = False adapted = getMultiAdapter((self._obj, context), IBody) adapted.body = _CATALOG_UPDATE_BODY self.assertEqual(adapted.body, _CATALOG_BODY % ('', _ZCTEXT_XML, '')) message = self.getLastMessage() self.assertEqual(message[-1], "foo_catalog:['eggs', 'spam']", "Not updated columns in catalog") def test_suite(): return unittest.TestSuite(( unittest.makeSuite(CatalogUpdaterXMLAdapterTest), )) if __name__ == '__main__': from Products.GenericSetup.testing import run run(test_suite())