CVS: Products/Basket/tests - testBasket.py:1.18

Chris McDonough <[email protected]>
Newsgroups gmane.comp.web.zope.public-cvs
Message-ID <[email protected]>
Update of /cvs-repository/Products/Basket/tests
In directory cvs.zope.org:/tmp/cvs-serv13293/tests

Modified Files:
	testBasket.py 
Log Message:
Test failure modes.


=== Products/Basket/tests/testBasket.py 1.17 => 1.18 ===
--- Products/Basket/tests/testBasket.py:1.17	Wed Nov  9 16:43:28 2005
+++ Products/Basket/tests/testBasket.py	Wed Nov  9 17:31:13 2005
@@ -11,9 +11,39 @@
 from OFS.Folder import Folder
 import OFS
 from Interface import Interface
+import App.config
+import zLOG
 
 here = os.path.dirname(__file__)
 
+class LogInterceptor:
+
+    _old_log_write = None
+    logged = None
+
+    def _catch_log_errors( self, ignored_level=zLOG.PROBLEM ):
+
+        if self._old_log_write is not None:
+            return
+
+        def log_write(subsystem, severity, summary, detail, error):
+            if severity > ignored_level:
+                assert 0, "%s(%s): %s" % (subsystem, severity, summary)
+            if self.logged is None:
+                self.logged = []
+            self.logged.append( ( subsystem, severity, summary, detail ) )
+
+        self._old_log_write = zLOG.log_write
+        zLOG.log_write = log_write
+
+    def _ignore_log_errors( self ):
+
+        if self._old_log_write is None:
+            return
+
+        zLOG.log_write = self._old_log_write
+        del self._old_log_write
+
 class DummyProduct:
     def __init__(self, id):
         self.id = id
@@ -62,7 +92,7 @@
 def legacymethod(self):
     pass
 
-class TestBasket(unittest.TestCase):
+class TestBasket(unittest.TestCase, LogInterceptor):
 
     def setUp(self):
         self.working_set = pkg_resources.working_set
@@ -74,6 +104,8 @@
         self.old_callbacks = self.working_set.callbacks[:]
         self.oldproductpath = Products.__path__
         self.fixtures = os.path.join(here, 'fixtures')
+        self.old_debug_mode = App.config.getConfiguration().debug_mode
+        self.logged = []
 
     def tearDown(self):
         sys.path[:] = self.oldsyspath
@@ -87,6 +119,7 @@
         working_set.entry_keys.update(self.oldentry_keys)
         working_set.callbacks[:] = self.old_callbacks
         Products.__path__[:] = self.oldproductpath
+        App.config.getConfiguration().debug_mode = self.old_debug_mode
 
     def _getTargetClass(self):
         from Products.Basket import Basket
@@ -141,6 +174,68 @@
                                   'product2 initialized'])
         self.failUnless(sys.modules.has_key('Products.product1'))
         self.failUnless(sys.modules.has_key('Products.product2'))
+
+    def test_initialize_of_broken_at_import_in_debug_mode(self):
+        basket = self._makeOne()
+        basket.pre_initialized = True
+        App.config.getConfiguration().debug_mode = True
+        sys.path.append(self.fixtures)
+        self.working_set.add_entry(self.fixtures)
+
+        basket.require(distro_str='brokenatimport>=0.1')
+                
+        self.assertRaises(ImportError, basket.initialize,
+                          DummyProductContext('Basket'))
+
+    def test_initialize_of_broken_at_import_no_debug_mode(self):
+        basket = self._makeOne()
+        basket.pre_initialized = True
+        App.config.getConfiguration().debug_mode = False
+        sys.path.append(self.fixtures)
+        self.working_set.add_entry(self.fixtures)
+
+        basket.require(distro_str='brokenatimport>=0.1')
+                
+        self._catch_log_errors(zLOG.ERROR)
+        try:
+            basket.initialize(DummyProductContext('Basket'))
+        finally:
+            self._ignore_log_errors()
+
+        self.assertEqual(len(self.logged), 1)
+        warning = self.logged[0]
+        self.assertEqual(warning[1], zLOG.ERROR)
+        self.failUnless(warning[2].startswith('Problem initializing'))
+
+    def test_initialize_of_broken_at_initialize_debug_mode(self):
+        basket = self._makeOne()
+        basket.pre_initialized = True
+        App.config.getConfiguration().debug_mode = True
+        sys.path.append(self.fixtures)
+        self.working_set.add_entry(self.fixtures)
+
+        basket.require(distro_str='brokenatinitialize>=0.1')
+                
+        self.assertRaises(ValueError, basket.initialize,
+                          DummyProductContext('Basket'))
+
+    def test_initialize_of_broken_at_initialize_no_debug_mode(self):
+        basket = self._makeOne()
+        basket.pre_initialized = True
+        App.config.getConfiguration().debug_mode = False
+        sys.path.append(self.fixtures)
+        self.working_set.add_entry(self.fixtures)
+
+        basket.require(distro_str='brokenatinitialize>=0.1')
+        self._catch_log_errors(zLOG.ERROR)
+        try:
+            basket.initialize(DummyProductContext('Basket'))
+        finally:
+            self._ignore_log_errors()
+        self.assertEqual(len(self.logged), 1)
+        warning = self.logged[0]
+        self.assertEqual(warning[1], zLOG.ERROR)
+        self.failUnless(warning[2].startswith('Couldn\'t install'))
 
     def test_parse_product_distributions_file(self):
         from StringIO import StringIO

_______________________________________________
Zope-CVS maillist  -  [email protected]
http://mail.zope.org/mailman/listinfo/zope-cvs

Zope CVS instructions: http://dev.zope.org/CVS
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.