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):