You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by ju...@apache.org on 2013/02/14 09:21:38 UTC

svn commit: r1446061 - in /incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct: multiproduct/api.py multiproduct/env.py tests/ticket/batch.py

Author: jure
Date: Thu Feb 14 08:21:37 2013
New Revision: 1446061

URL: http://svn.apache.org/r1446061
Log:
#355, test cases for batch ticket updates, patch t355_r1444754_trac_test_ticket_batch.patch applied (from Olemis)


Added:
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/ticket/batch.py
Modified:
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
    incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py?rev=1446061&r1=1446060&r2=1446061&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/api.py Thu Feb 14 08:21:37 2013
@@ -24,7 +24,7 @@ from genshi.builder import tag
 import copy
 
 from pkg_resources import resource_filename
-from trac.config import PathOption
+from trac.config import Option, PathOption
 from trac.core import Component, TracError, implements
 from trac.db import Table, Column, DatabaseManager, Index
 from trac.env import IEnvironmentSetupParticipant
@@ -46,6 +46,19 @@ class MultiProductSystem(Component):
     implements(IEnvironmentSetupParticipant, ITemplateProvider,
             IPermissionRequestor, ITicketFieldProvider, IResourceManager)
 
+    product_base_url = Option('multiproduct', 'product_base_url', '',
+        """A pattern used to generate the base URL of product environments,
+        e.g. the use cases listed in bh:wiki:/Proposals/BEP-0003#url-mapping .
+        Both absolute as well as relative URLs are supported. The later 
+        will be resolved with respect to the base URL of the parent global
+        environment. The pattern may contain references to $(prefix)s and 
+        $(name)s placeholders representing the product prefix and name
+        respectively . If nothing is set the following will be used 
+        `products/$(prefix)s`
+
+        Note the usage of `$(...)s` instead of `%(...)s` as the later form 
+        would be interpreted by the ConfigParser itself. """)
+
     product_config_parent = PathOption('inherit', 'multiproduct', '',
         """The path to the configuration file containing the settings shared
         by sibling product environments. By default will inherit 

Modified: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py?rev=1446061&r1=1446060&r2=1446061&view=diff
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py (original)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/multiproduct/env.py Thu Feb 14 08:21:37 2013
@@ -22,7 +22,7 @@ import os.path
 from urlparse import urlsplit
 from sqlite3 import OperationalError
 
-from trac.config import ConfigSection, Option
+from trac.config import BoolOption, ConfigSection, Option
 from trac.core import Component, ComponentManager, implements
 from trac.db.api import TransactionContextManager, QueryContextManager
 from trac.util import get_pkginfo, lazy
@@ -240,11 +240,25 @@ class ProductEnvironment(Component, Comp
         """
         return ''
 
-    # TODO: Estimate product base URL considering global base URL, pattern, ...
-    base_url = ''
-
-    # TODO: Estimate product base URL considering global base URL, pattern, ...
-    base_url_for_redirect = ''
+    base_url = Option('trac', 'base_url', '',
+        """Reference URL for the Trac deployment.
+        
+        This is the base URL that will be used when producing
+        documents that will be used outside of the web browsing
+        context, like for example when inserting URLs pointing to Trac
+        resources in notification e-mails.""")
+
+    base_url_for_redirect = BoolOption('trac', 'use_base_url_for_redirect',
+            False, 
+        """Optionally use `[trac] base_url` for redirects.
+        
+        In some configurations, usually involving running Trac behind
+        a HTTP proxy, Trac can't automatically reconstruct the URL
+        that is used to access it. You may need to use this option to
+        force Trac to use the `base_url` setting also for
+        redirects. This introduces the obvious limitation that this
+        environment will only be usable when accessible from that URL,
+        as redirects are frequently used. ''(since 0.10.5)''""")
 
     @property
     def project_name(self):
@@ -590,9 +604,16 @@ class ProductEnvironment(Component, Comp
         """The application URL"""
         if not self._abs_href:
             if not self.base_url:
-                self.log.warn("base_url option not set in configuration, "
-                              "generated links may be incorrect")
-                self._abs_href = Href('')
+                urlpattern = MultiProductSystem(self.parent).product_base_url
+                if not urlpattern:
+                    self.log.warn("product_base_url option not set in "
+                                  "configuration, generated links may be "
+                                  "incorrect")
+                    urlpattern = 'product/$(prefix)s'
+                url = urlpattern.replace('$(', '%(') \
+                     .replace('%(prefix)s', self.product.prefix) \
+                     .replace('%(name)s', self.product.name)
+                self._abs_href = Href(self.parent.abs_href(url))
             else:
                 self._abs_href = Href(self.base_url)
         return self._abs_href

Added: incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/ticket/batch.py
URL: http://svn.apache.org/viewvc/incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/ticket/batch.py?rev=1446061&view=auto
==============================================================================
--- incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/ticket/batch.py (added)
+++ incubator/bloodhound/branches/bep_0003_multiproduct/bloodhound_multiproduct/tests/ticket/batch.py Thu Feb 14 08:21:37 2013
@@ -0,0 +1,66 @@
+
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+
+"""Tests for Apache(TM) Bloodhound's tickets batch updates 
+in product environments"""
+
+import unittest
+
+from trac.perm import PermissionCache
+from trac.test import Mock
+from trac.ticket.batch import BatchModifyModule
+from trac.ticket.tests.batch import BatchModifyTestCase
+from trac.ticket.default_workflow import ConfigurableTicketWorkflow
+from trac.util.datefmt import utc
+
+from multiproduct.env import ProductEnvironment
+from multiproduct.ticket.web_ui import ProductTicketModule
+from tests.env import MultiproductTestCase
+
+class ProductBatchModifyTestCase(BatchModifyTestCase, MultiproductTestCase):
+
+    def setUp(self):
+        self.global_env = self._setup_test_env(create_folder=False)
+        self._upgrade_mp(self.global_env)
+        self._setup_test_log(self.global_env)
+        self._load_product_from_data(self.global_env, self.default_product)
+        self.env = ProductEnvironment(self.global_env, self.default_product)
+
+        self.global_env.enable_component_in_config(self.env, 
+                ConfigurableTicketWorkflow)
+        self.global_env.enable_component_in_config(self.env, 
+                ProductTicketModule)
+
+        self._load_default_data(self.env)
+
+        self.req = Mock(href=self.env.href, authname='anonymous', tz=utc)
+        self.req.session = {}
+        self.req.perm = PermissionCache(self.env)
+
+    def tearDown(self):
+        self.global_env.reset_db()
+
+
+def test_suite():
+    return unittest.TestSuite([
+            unittest.makeSuite(ProductBatchModifyTestCase,'test'),
+        ])
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')
+