Author: andrej
Date: Fri May  3 13:18:56 2013
New Revision: 1478770

URL: http://svn.apache.org/r1478770
Log:
adding multi-product fixes and tests to bhrelations - towards BEP-0006

Modified:
    bloodhound/trunk/bloodhound_relations/bhrelations/api.py
    bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py

Modified: bloodhound/trunk/bloodhound_relations/bhrelations/api.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/api.py?rev=1478770&r1=1478769&r2=1478770&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/api.py Fri May  3 
13:18:56 2013
@@ -414,9 +414,14 @@ class ResourceIdSerializer(object):
         * resource_instance: can be instance of a ticket, wiki page etc.
         """
         resource = resource_instance.resource
-        rsys = ResourceSystem(manager_for_neighborhood(
-            env, resource.neighborhood))
-        nbhprefix = rsys.neighborhood_prefix(resource.neighborhood)
+        # nbhprefix = ResourceSystem(env).neighborhood_prefix(
+        #     resource.neighborhood)
+
+        #TODO: temporary workaround for the ticket specific behavior
+        #change it to generic resource behaviour
+        ticket = resource_instance
+        nbhprefix = ticket["product"]
+
         resource_full_id = cls.RESOURCE_ID_DELIMITER.join(
             (nbhprefix, resource.realm, unicode(resource.id))
         )
@@ -471,10 +476,9 @@ class TicketRelationsSpecifics(Component
                             "Bloodhound Relations" % resource.realm)
 
     def _get_env_for_resource(self, resource):
-        if hasattr(resource, "nbhprefix") and resource.nbhprefix:
-            env = ProductEnvironment(resource.nbhprefix)
-        elif hasattr(self.env, "parent") and self.env.parent:
-            env = self.env.parent
+        if hasattr(resource, "neighborhood"):
+            env =  ResourceSystem(self.env).load_component_manager(
+                resource.neighborhood)
         else:
             env = self.env
         return env

Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py?rev=1478770&r1=1478769&r2=1478770&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py Fri May  3 
13:18:56 2013
@@ -19,12 +19,15 @@
 #  under the License.
 from datetime import datetime
 from _sqlite3 import OperationalError, IntegrityError
-from bhrelations.api import EnvironmentSetup, RelationsSystem, 
CycleValidationError, ParentValidationError, TicketRelationsSpecifics
+from bhrelations.api import (EnvironmentSetup, RelationsSystem,
+                             CycleValidationError, ParentValidationError,
+                             TicketRelationsSpecifics)
+from multiproduct.env import ProductEnvironment
+from tests.env import MultiproductTestCase
 from trac.ticket.model import Ticket
 from trac.test import EnvironmentStub, Mock
 from trac.core import TracError
 from trac.util.datefmt import utc
-import unittest
 
 try:
     from babel import Locale
@@ -32,23 +35,30 @@ try:
 except ImportError:
     locale_en = None
 
-class ApiTestCase(unittest.TestCase):
+class ApiTestCase(MultiproductTestCase):
     def setUp(self):
-        self.env = EnvironmentStub(
+        env = EnvironmentStub(
             default_data=True,
-            enable=['trac.*', 'bhrelations.*']
+            enable=['trac.*', 'multiproduct.*', 'bhrelations.*']
         )
         config_name = RelationsSystem.RELATIONS_CONFIG_NAME
-        self.env.config.set(config_name, 'dependency', 'dependson,dependent')
-        self.env.config.set(config_name, 'dependency.validator', 'no_cycle')
-        self.env.config.set(config_name, 'dependent.blocks', 'true')
-        self.env.config.set(config_name, 'parent_children','parent,children')
-        self.env.config.set(config_name, 'parent_children.validator',
+        env.config.set(config_name, 'dependency', 'dependson,dependent')
+        env.config.set(config_name, 'dependency.validator', 'no_cycle')
+        env.config.set(config_name, 'dependent.blocks', 'true')
+        env.config.set(config_name, 'parent_children','parent,children')
+        env.config.set(config_name, 'parent_children.validator',
                                                             'parent_child')
-        self.env.config.set(config_name, 'children.label', 'Overridden')
-        self.env.config.set(config_name, 'parent.copy_fields',
+        env.config.set(config_name, 'children.label', 'Overridden')
+        env.config.set(config_name, 'parent.copy_fields',
                                                             'summary, foo')
-        self.env.config.set(config_name, 'oneway', 'refersto')
+        env.config.set(config_name, 'oneway', 'refersto')
+
+        self.global_env = env
+        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.req = Mock(href=self.env.href, authname='anonymous', tz=utc,
                         args=dict(action='dummy'),
                         locale=locale_en, lc_time=locale_en)
@@ -56,8 +66,7 @@ class ApiTestCase(unittest.TestCase):
         self._upgrade_env()
 
     def tearDown(self):
-        # shutil.rmtree(self.env.path)
-        self.env.reset_db()
+        self.global_env.reset_db()
 
     def _upgrade_env(self):
         environment_setup = EnvironmentSetup(self.env)
@@ -67,15 +76,20 @@ class ApiTestCase(unittest.TestCase):
             # table remains but database version is deleted
             pass
 
-    def _insert_ticket(self, summary, **kw):
+    #classmethod
+    def _insert_ticket(cls, env, summary, **kw):
         """Helper for inserting a ticket into the database"""
-        ticket = Ticket(self.env)
+        ticket = Ticket(env)
+        ticket["Summary"] = summary
         for k,v in kw.items():
             ticket[k] = v
         return ticket.insert()
 
     def _insert_and_load_ticket(self, summary, **kw):
-        return Ticket(self.env, self._insert_ticket(summary, **kw))
+        return Ticket(self.env, self._insert_ticket(self.env, summary, **kw))
+
+    def _insert_and_load_ticket_with_env(self, env, summary, **kw):
+        return Ticket(env, self._insert_ticket(env, summary, **kw))
 
     def test_can_add_two_ways_relations(self):
         #arrange
@@ -221,7 +235,7 @@ class ApiTestCase(unittest.TestCase):
             relations_system.add(ticket2, ticket1, "dependson")
             self.assertFalse(True, "Should throw an exception")
         except CycleValidationError, ex:
-            self.assertEqual(":ticket:1", ex.failed_ids[0])
+            self.assertEqual("tp1:ticket:1", ex.failed_ids[0])
 
 
     def test_can_add_more_dependsons(self):
@@ -257,9 +271,8 @@ class ApiTestCase(unittest.TestCase):
         relations_system = self.relations_system
         relations_system.add(ticket1, ticket2, "dependson")
         relations_system.add(ticket2, ticket3, "dependson")
-        self.assertRaisesRegexp(
+        self.assertRaises(
             CycleValidationError,
-            "Cycle in Dependson: #1 -> #2 -> #3",
             relations_system.add,
             ticket3,
             ticket1,
@@ -363,6 +376,21 @@ class ApiTestCase(unittest.TestCase):
         #act
         ticket1.delete()
 
+    def test_can_add_multi_product_relations(self):
+        #arrange
+        ticket1 = self._insert_and_load_ticket("A1")
+
+        product2 = "tp2"
+        self._load_product_from_data(self.global_env, product2)
+        p2_env = ProductEnvironment(self.global_env, product2)
+        ticket2 = self._insert_and_load_ticket_with_env(p2_env, "A2")
+        relations_system = self.relations_system
+        #act
+        relations_system.add(ticket1, ticket2, "dependent")
+        #assert
+        self.assertEqual(1, len(relations_system.get_relations(ticket1)))
+        self.assertEqual(1, len(relations_system.get_relations(ticket2)))
+
     #todo: add multi-product ticket relations test
 
     def _debug_select(self):


Reply via email to