Author: astaric
Date: Mon May 27 14:34:12 2013
New Revision: 1486635

URL: http://svn.apache.org/r1486635
Log:
Moved env creation in ProductWikiTestCase from __init__ to setUp.

Config in product environments is stored in database and should be
part of the setUp method. This replaces the quickfix introduced in
r1486610.

Modified:
    bloodhound/trunk/bloodhound_multiproduct/tests/env.py
    bloodhound/trunk/bloodhound_multiproduct/tests/wiki/formatter.py

Modified: bloodhound/trunk/bloodhound_multiproduct/tests/env.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/tests/env.py?rev=1486635&r1=1486634&r2=1486635&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/tests/env.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/tests/env.py Mon May 27 14:34:12 
2013
@@ -47,22 +47,6 @@ from multiproduct.api import MultiProduc
 from multiproduct.env import ProductEnvironment
 from multiproduct.model import Product
 
-# unittests in python2.7 run in the same process and share the same connection
-# pool. This basically means that all tests share the same in-memory database,
-# and calling reset_db in teardown methods destroys data prepared in __init__
-# of other tests. Trac tests do not do prepare data in __init__, but when run
-# with a product env, which stores config values to database, this behavior
-# causes multiple tests to fail.
-#
-# We workaround this issue by monkey patching trac's ConnectionPool. We force
-# it to establish a separate connection for each DatabaseManager.
-from trac.db.pool import ConnectionPool, ConnectionPoolBackend
-def ConnectionPool_get_cnx(self, timeout=None):
-    if not hasattr(self, '_backend'):
-        self._backend = ConnectionPoolBackend(1)
-    return self._backend.get_cnx(self._connector, self._kwargs, timeout)
-ConnectionPool.get_cnx = ConnectionPool_get_cnx
-
 
 class ProductEnvironmentStub(ProductEnvironment):
     r"""A product environment slightly tweaked for testing purposes

Modified: bloodhound/trunk/bloodhound_multiproduct/tests/wiki/formatter.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/tests/wiki/formatter.py?rev=1486635&r1=1486634&r2=1486635&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/tests/wiki/formatter.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/tests/wiki/formatter.py Mon May 27 
14:34:12 2013
@@ -22,6 +22,9 @@ import os.path
 import re
 import unittest
 
+from trac.test import Mock, MockPerm, locale_en
+from trac.util.datefmt import utc
+from trac.web.href import Href
 from trac.web.main import FakeSession
 from trac.wiki.tests import formatter
 
@@ -29,42 +32,15 @@ from multiproduct.env import ProductEnvi
 from multiproduct.model import Product
 from tests.env import MultiproductTestCase
 
-class ProductWikiTestCase(formatter.WikiTestCase, MultiproductTestCase):
 
-    maxDiff = None
 
-    @property
-    def env(self):
-        env = getattr(self, '_env', None)
-        if env is None:
-            all_test_components = [
-                    formatter.HelloWorldMacro, formatter.DivHelloWorldMacro, 
-                    formatter.TableHelloWorldMacro, formatter.DivCodeMacro, 
-                    formatter.DivCodeElementMacro, 
formatter.DivCodeStreamMacro,
-                    formatter.NoneMacro, formatter.WikiProcessorSampleMacro, 
-                    formatter.SampleResolver]
-            self.global_env = self._setup_test_env(
-                    enable=['trac.*', 'multiproduct.*'] + all_test_components
-                )
-            self._upgrade_mp(self.global_env)
-            self._load_product_from_data(self.global_env, self.default_product)
-            prefix = self.default_product
-            if self.mpctx:
-                prefix = self.mpctx.get('setup_product', prefix)
-                if prefix and prefix != self.default_product:
-                    self._load_product_from_data(self.global_env, prefix)
-            if prefix:
-                self._env = env = ProductEnvironment(
-                        self.global_env, prefix or self.default_product)
-            else:
-                self._env = env = self.global_env
-        return env
 
-    @env.setter
-    def env(self, value):
-        pass
+class ProductWikiTestCase(formatter.WikiTestCase, MultiproductTestCase):
+    maxDiff = None
 
     def setUp(self):
+        self._prepare_env()
+
         self._setup_test_log(self.global_env)
         formatter.WikiTestCase.setUp(self)
         if self.context.req:
@@ -79,13 +55,60 @@ class ProductWikiTestCase(formatter.Wiki
 
             prefix = self.mpctx.get('main_product', NotImplemented)
             if prefix is None:
-                self._env = self.global_env
+                self.env = self.global_env
             elif prefix is not NotImplemented \
                     and (self.env is self.global_env or 
                          prefix != self.env.product.prefix):
-                self._env = ProductEnvironment(self.global_env, prefix)
+                self.env = ProductEnvironment(self.global_env, prefix)
             # Enable multi-product components
-            self._env.config.set('components', 'multiproduct.*', 'enabled')
+            self.env.config.set('components', 'multiproduct.*', 'enabled')
+
+    def _prepare_env(self):
+        all_test_components = [
+                    formatter.HelloWorldMacro, formatter.DivHelloWorldMacro,
+                    formatter.TableHelloWorldMacro, formatter.DivCodeMacro,
+                    formatter.DivCodeElementMacro, 
formatter.DivCodeStreamMacro,
+                    formatter.NoneMacro, formatter.WikiProcessorSampleMacro,
+                    formatter.SampleResolver]
+        self.global_env = self._setup_test_env(
+            enable=['trac.*', 'multiproduct.*'] + all_test_components
+        )
+
+        self._upgrade_mp(self.global_env)
+        self._load_product_from_data(self.global_env, self.default_product)
+        prefix = self.default_product
+        if self.mpctx:
+            prefix = self.mpctx.get('setup_product', prefix)
+            if prefix and prefix != self.default_product:
+                self._load_product_from_data(self.global_env, prefix)
+        if prefix:
+            self.env = ProductEnvironment(self.global_env,
+                                          prefix or self.default_product)
+        else:
+            self.env = self.global_env
+
+        self.env.path = ''
+        config = self.env.config
+        # -- intertrac support
+        config.set('intertrac', 'trac.title', "Trac's Trac")
+        config.set('intertrac', 'trac.url',
+                   "http://trac.edgewall.org";)
+        config.set('intertrac', 't', 'trac')
+        config.set('intertrac', 'th.title', "Trac Hacks")
+        config.set('intertrac', 'th.url',
+                   "http://trac-hacks.org";)
+        config.set('intertrac', 'th.compat', 'false')
+        # -- safe schemes
+        config.set('wiki', 'safe_schemes',
+                   'file,ftp,http,https,svn,svn+ssh,'
+                   'rfc-2396.compatible,rfc-2396+under_score')
+
+        req = Mock(href=Href('/'), abs_href=Href('http://www.example.com/'),
+                   authname='anonymous', perm=MockPerm(), tz=utc, args={},
+                   locale=locale_en, lc_time=locale_en)
+
+        self.env.href = req.href
+        self.env.abs_href = req.abs_href
 
     def tearDown(self):
         self.global_env.reset_db()


Reply via email to