Author: astaric Date: Thu Mar 6 11:12:21 2014 New Revision: 1574841 URL: http://svn.apache.org/r1574841 Log: Refactor bhrelations tests.
Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py bloodhound/trunk/bloodhound_relations/bhrelations/tests/base.py bloodhound/trunk/bloodhound_relations/bhrelations/tests/notification.py bloodhound/trunk/bloodhound_relations/bhrelations/tests/search.py bloodhound/trunk/bloodhound_relations/bhrelations/tests/web_ui.py Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py?rev=1574841&r1=1574840&r2=1574841&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py (original) +++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py Thu Mar 6 11:12:21 2014 @@ -18,10 +18,13 @@ # under the License. from datetime import datetime import unittest + from bhrelations.api import TicketRelationsSpecifics from bhrelations.tests.mocks import TestRelationChangingListener from bhrelations.validation import ValidationError -from bhrelations.tests.base import BaseRelationsTestCase +from bhrelations.tests.base import BaseRelationsTestCase, PARENT, CHILD, \ + DEPENDS_ON, DEPENDENCY_OF, BLOCKS, BLOCKED_BY, REFERS_TO, DUPLICATE_OF, \ + MULTIPRODUCT_REL from multiproduct.env import ProductEnvironment from trac.ticket.model import Ticket from trac.core import TracError @@ -32,146 +35,124 @@ class ApiTestCase(BaseRelationsTestCase) def test_can_add_two_ways_relations(self): #arrange ticket = self._insert_and_load_ticket("A1") - dependent = self._insert_and_load_ticket("A2") + ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add( - ticket, dependent, "dependent") - #assert - relations = relations_system.get_relations(ticket) - self.assertEqual("dependent", relations[0]["type"]) - self.assertEqual(unicode(dependent.id), relations[0]["destination"].id) + self.add_relation(ticket, DEPENDENCY_OF, ticket2) + #assert + relations = self.get_relations(ticket) + self.assertEqual(DEPENDENCY_OF, relations[0]["type"]) + self.assertEqual(unicode(ticket2.id), relations[0]["destination"].id) - relations = relations_system.get_relations(dependent) - self.assertEqual("dependson", relations[0]["type"]) + relations = self.get_relations(ticket2) + self.assertEqual(DEPENDS_ON, relations[0]["type"]) self.assertEqual(unicode(ticket.id), relations[0]["destination"].id) def test_can_add_single_way_relations(self): #arrange ticket = self._insert_and_load_ticket("A1") - referred = self._insert_and_load_ticket("A2") + ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add(ticket, referred, "refersto") + self.add_relation(ticket, REFERS_TO, ticket2) #assert - relations = relations_system.get_relations(ticket) - self.assertEqual("refersto", relations[0]["type"]) - self.assertEqual(unicode(referred.id), relations[0]["destination"].id) + relations = self.get_relations(ticket) + self.assertEqual(1, len(relations)) + self.assertEqual(REFERS_TO, relations[0]["type"]) + self.assertEqual(unicode(ticket2.id), relations[0]["destination"].id) - relations = relations_system.get_relations(referred) - self.assertEqual(0, len(relations)) + self.assertEqual(0, len(self.get_relations(ticket2))) def test_can_add_multiple_relations(self): #arrange ticket = self._insert_and_load_ticket("A1") - dependent1 = self._insert_and_load_ticket("A2") - dependent2 = self._insert_and_load_ticket("A3") + ticket2 = self._insert_and_load_ticket("A2") + ticket3 = self._insert_and_load_ticket("A3") #act - relations_system = self.relations_system - relations_system.add( - ticket, dependent1, "dependent") - relations_system.add( - ticket, dependent2, "dependent") + self.add_relation(ticket, DEPENDS_ON, ticket2) + self.add_relation(ticket, DEPENDS_ON, ticket3) #assert - relations = relations_system.get_relations(ticket) - self.assertEqual(2, len(relations)) + self.assertEqual(2, len(self.get_relations(ticket))) + self.assertEqual(1, len(self.get_relations(ticket2))) + self.assertEqual(1, len(self.get_relations(ticket3))) def test_will_not_create_more_than_one_identical_relations(self): #arrange ticket = self._insert_and_load_ticket("A1") - dependent1 = self._insert_and_load_ticket("A2") + ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add( - ticket, dependent1, "dependent") + self.add_relation(ticket, DEPENDS_ON, ticket2) self.assertRaisesRegexp( TracError, "already exists", - relations_system.add, - ticket, dependent1, "dependent") + self.add_relation, + ticket, DEPENDS_ON, ticket2 + ) def test_will_not_create_more_than_one_identical_relations_db_level(self): sql = """INSERT INTO bloodhound_relations (source, destination, type) VALUES (%s, %s, %s)""" with self.env.db_transaction as db: - db(sql, ["1", "2", "dependson"]) + db(sql, ["1", "2", DEPENDS_ON]) self.assertRaises( self.env.db_exc.IntegrityError, db, sql, - ["1", "2", "dependson"]) + ["1", "2", DEPENDS_ON] + ) def test_can_add_one_way_relations(self): #arrange ticket = self._insert_and_load_ticket("A1") - referred_ticket = self._insert_and_load_ticket("A2") + ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add( - ticket, referred_ticket, "refersto") - #assert - relations = relations_system.get_relations(ticket) - self.assertEqual("refersto", relations[0]["type"]) - self.assertEqual(unicode(referred_ticket.id), + self.add_relation(ticket, REFERS_TO, ticket2) + #assert + relations = self.get_relations(ticket) + self.assertEqual(REFERS_TO, relations[0]["type"]) + self.assertEqual(unicode(ticket2.id), relations[0]["destination"].id) - relations = relations_system.get_relations(referred_ticket) - self.assertEqual(0, len(relations)) + self.assertEqual(0, len(self.get_relations(ticket2))) def test_can_delete_two_ways_relation(self): #arrange ticket = self._insert_and_load_ticket("A1") - dependent_ticket = self._insert_and_load_ticket("A2") - relations_system = self.relations_system - relations_system.add( - ticket, dependent_ticket, "dependson") - relations = relations_system.get_relations(ticket) + ticket2 = self._insert_and_load_ticket("A2") + self.add_relation(ticket, DEPENDS_ON, ticket2) + + relations = self.get_relations(ticket) self.assertEqual(1, len(relations)) + self.assertEqual(1, len(self.get_relations(ticket2))) + #act - relation_to_delete = relations[0] - relations_system.delete(relation_to_delete["relation_id"]) + self.delete_relation(relations[0]) #assert - relations = relations_system.get_relations(ticket) - self.assertEqual(0, len(relations)) + self.assertEqual(0, len(self.get_relations(ticket))) + self.assertEqual(0, len(self.get_relations(ticket2))) def test_can_delete_single_way_relation(self): #arrange ticket = self._insert_and_load_ticket("A1") - referred = self._insert_and_load_ticket("A2") + ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add(ticket, referred, "refersto") - - ticket = self._insert_and_load_ticket("A1") - dependent_ticket = self._insert_and_load_ticket("A2") - relations_system = self.relations_system - relations_system.add( - ticket, dependent_ticket, "dependson") - relations = relations_system.get_relations(ticket) + self.add_relation(ticket, REFERS_TO, ticket2) + relations = self.get_relations(ticket) self.assertEqual(1, len(relations)) - reverted_relations = relations_system.get_relations(dependent_ticket) - self.assertEqual(1, len(reverted_relations)) + self.assertEqual(0, len(self.get_relations(ticket2))) #act - # self._debug_select() - relation_to_delete = relations[0] - relations_system.delete(relation_to_delete["relation_id"]) - #assert - relations = relations_system.get_relations(ticket) - self.assertEqual(0, len(relations)) - reverted_relations = relations_system.get_relations(dependent_ticket) - self.assertEqual(0, len(reverted_relations)) + self.delete_relation(relations[0]) + #assert + self.assertEqual(0, len(self.get_relations(ticket))) def test_can_not_add_cycled_immediate_relations(self): #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add(ticket1, ticket2, "dependson") + self.add_relation(ticket1, DEPENDS_ON, ticket2) try: - relations_system.add(ticket2, ticket1, "dependson") + self.add_relation(ticket2, DEPENDS_ON, ticket1) self.fail("Should throw an exception") except ValidationError as ex: self.assertSequenceEqual( @@ -183,23 +164,22 @@ class ApiTestCase(BaseRelationsTestCase) ticket2 = self._insert_and_load_ticket("A2") ticket3 = self._insert_and_load_ticket("A3") #act - relations_system = self.relations_system - relations_system.add(ticket1, ticket2, "dependson") - relations_system.add(ticket1, ticket3, "dependson") + self.add_relation(ticket1, DEPENDS_ON, ticket2) + self.add_relation(ticket1, DEPENDS_ON, ticket3) + + self.assertEqual(2, len(self.get_relations(ticket1))) def test_can_not_add_cycled_in_different_direction(self): #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add(ticket1, ticket2, "dependson") + self.add_relation(ticket1, DEPENDS_ON, ticket2) self.assertRaises( ValidationError, - relations_system.add, - ticket1, - ticket2, - "dependent") + self.add_relation, + ticket1, DEPENDENCY_OF, ticket2 + ) def test_can_not_add_cycled_relations(self): #arrange @@ -207,69 +187,52 @@ class ApiTestCase(BaseRelationsTestCase) ticket2 = self._insert_and_load_ticket("A2") ticket3 = self._insert_and_load_ticket("A3") #act - relations_system = self.relations_system - relations_system.add(ticket1, ticket2, "dependson") - relations_system.add(ticket2, ticket3, "dependson") + self.add_relation(ticket1, DEPENDS_ON, ticket2) + self.add_relation(ticket2, DEPENDS_ON, ticket3) self.assertRaises( ValidationError, - relations_system.add, - ticket3, - ticket1, - "dependson") + self.add_relation, + ticket3, DEPENDS_ON, ticket1 + ) - def test_can_not_add_more_than_one_parents(self): + def test_can_not_add_more_than_one_parent(self): #arrange child = self._insert_and_load_ticket("A1") parent1 = self._insert_and_load_ticket("A2") parent2 = self._insert_and_load_ticket("A3") #act - relations_system = self.relations_system - relations_system.add(parent1, child, 'parent') + self.add_relation(parent1, PARENT, child) self.assertRaises( ValidationError, - relations_system.add, - parent2, - child, - 'parent') + self.add_relation, + parent2, PARENT, child + ) - def test_can_not_add_more_than_one_parents_via_children(self): - #arrange - child = self._insert_and_load_ticket("A1") - parent1 = self._insert_and_load_ticket("A2") - parent2 = self._insert_and_load_ticket("A3") - #act - relations_system = self.relations_system - relations_system.add(child, parent1, "children") self.assertRaises( ValidationError, - relations_system.add, - child, - parent2, - "children") + self.add_relation, + child, CHILD, parent2 + ) def test_can_add_more_than_one_child(self): parent = self._insert_and_load_ticket("A1") child1 = self._insert_and_load_ticket("A2") child2 = self._insert_and_load_ticket("A3") - relations_system = self.relations_system - relations_system.add(parent, child1, 'parent') - relations_system.add(parent, child2, 'parent') - + self.add_relation(parent, PARENT, child1) + self.add_relation(parent, PARENT, child2) + self.assertEqual(2, len(self.get_relations(parent))) def test_ticket_can_be_resolved(self): #arrange - child = self._insert_and_load_ticket("A1") - parent1 = self._insert_and_load_ticket("A2") - parent2 = self._insert_and_load_ticket("A3") + parent = self._insert_and_load_ticket("A1") + child = self._insert_and_load_ticket("A2") #act - relations_system = self.relations_system - relations_system.add(child, parent1, "children") + self.add_relation(parent, PARENT, child) self.req.args['action'] = 'resolve' warnings = \ TicketRelationsSpecifics(self.env).validate_ticket(self.req, child) - self.assertEqual(0, len(list(warnings))) def test_can_save_and_load_relation_time(self): @@ -278,8 +241,8 @@ class ApiTestCase(BaseRelationsTestCase) ticket2 = self._insert_and_load_ticket("A2") #act time = datetime.now(utc) - self.relations_system.add(ticket1, ticket2, "dependent", when=time) - relations = self.relations_system.get_relations(ticket1) + self.add_relation(ticket1, DEPENDS_ON, ticket2, when=time) + relations = self.get_relations(ticket1) #assert self.assertEqual(time, relations[0]["when"]) @@ -287,7 +250,7 @@ class ApiTestCase(BaseRelationsTestCase) #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - self.relations_system.add(ticket1, ticket2, "dependson") + self.add_relation(ticket1, DEPENDS_ON, ticket2) #act self.req.args["action"] = 'resolve' warnings = TicketRelationsSpecifics(self.env).validate_ticket( @@ -299,7 +262,7 @@ class ApiTestCase(BaseRelationsTestCase) #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2", status="closed") - self.relations_system.add(ticket1, ticket2, "dependson") + self.add_relation(ticket1, DEPENDS_ON, ticket2) #act self.req.args["action"] = 'resolve' warnings = TicketRelationsSpecifics(self.env).validate_ticket( @@ -311,13 +274,13 @@ class ApiTestCase(BaseRelationsTestCase) #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - relations_system = self.relations_system - relations_system.add(ticket1, ticket2, "dependent") - self.assertEqual(1, len(relations_system.get_relations(ticket2))) + + self.add_relation(ticket1, DEPENDS_ON, ticket2) + self.assertEqual(1, len(self.get_relations(ticket2))) #act ticket1.delete() #assert - self.assertEqual(0, len(relations_system.get_relations(ticket2))) + self.assertEqual(0, len(self.get_relations(ticket2))) def test_that_no_error_when_deleting_ticket_without_relations(self): #arrange @@ -326,19 +289,17 @@ class ApiTestCase(BaseRelationsTestCase) ticket1.delete() def test_can_add_multi_product_relations(self): - #arrange - ticket1 = self._insert_and_load_ticket("A1") + 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, "mprel") - #assert - self.assertEqual(1, len(relations_system.get_relations(ticket1))) - self.assertEqual(1, len(relations_system.get_relations(ticket2))) + + self.add_relation(ticket1, MULTIPRODUCT_REL, ticket2) + + self.assertEqual(1, len(self.get_relations(ticket1))) + self.assertEqual(1, len(self.get_relations(ticket2))) def _debug_select(self): """ @@ -354,38 +315,34 @@ class ApiTestCase(BaseRelationsTestCase) def test_parent_relation_is_incompatible_with_two_way_relations(self): ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - self.relations_system.add(ticket1, ticket2, "dependent") + self.add_relation(ticket2, DEPENDS_ON, ticket1) self.assertRaises( ValidationError, - self.relations_system.add, - ticket1, - ticket2, - "parent") + self.add_relation, + ticket1, PARENT, ticket2 + ) self.assertRaises( ValidationError, - self.relations_system.add, - ticket1, - ticket2, - "children") + self.add_relation, + ticket1, CHILD, ticket2 + ) def test_parent_relation_is_incompatible_with_one_way_relations(self): ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - self.relations_system.add(ticket1, ticket2, "refersto") + self.add_relation(ticket1, REFERS_TO, ticket2) self.assertRaises( ValidationError, - self.relations_system.add, - ticket1, - ticket2, - "parent") + self.add_relation, + ticket1, PARENT, ticket2 + ) self.assertRaises( ValidationError, - self.relations_system.add, - ticket1, - ticket2, - "children") + self.add_relation, + ticket1, CHILD, ticket2 + ) def test_parent_must_be_in_same_product(self): ticket1 = self._insert_and_load_ticket("A1") @@ -396,75 +353,82 @@ class ApiTestCase(BaseRelationsTestCase) self.assertRaises( ValidationError, - self.relations_system.add, - ticket1, ticket2, "parent" + self.add_relation, + ticket1, PARENT, ticket2 ) self.assertRaises( ValidationError, - self.relations_system.add, - ticket1, ticket2, "children" + self.add_relation, + ticket1, CHILD, ticket2 ) def test_cannot_create_other_relations_between_descendants(self): t1, t2, t3, t4, t5 = map(self._insert_and_load_ticket, "12345") - self.relations_system.add(t2, t4, "parent") # t1 -> t2 - self.relations_system.add(t2, t3, "parent") # / \ - self.relations_system.add(t1, t2, "parent") # t3 t4 + self.add_relation(t1, PARENT, t2) # t1 -> t2 + self.add_relation(t2, PARENT, t3) # / \ + self.add_relation(t2, PARENT, t4) # t3 t4 self.assertRaises( ValidationError, - self.relations_system.add, t2, t1, "dependent" + self.add_relation, + t2, DEPENDS_ON, t1 ) self.assertRaises( ValidationError, - self.relations_system.add, t1, t2, "dependent" + self.add_relation, + t1, DEPENDS_ON, t2 ) self.assertRaises( ValidationError, - self.relations_system.add, t4, t1, "dependent" + self.add_relation, + t4, DEPENDS_ON, t1 ) self.assertRaises( ValidationError, - self.relations_system.add, t1, t3, "dependent" + self.add_relation, + t1, DEPENDS_ON, t3 ) try: - self.relations_system.add(t5, t1,"dependent") - self.relations_system.add(t4, t3, "dependent") + self.add_relation(t1, DEPENDS_ON, t5) + self.add_relation(t3, DEPENDS_ON, t4) except ValidationError: self.fail("Could not add valid relation.") def test_cannot_add_parent_if_this_would_cause_invalid_relations(self): t1, t2, t3, t4, t5 = map(self._insert_and_load_ticket, "12345") - self.relations_system.add(t2, t4, "parent") # t1 -> t2 - self.relations_system.add(t2, t3, "parent") # / \ - self.relations_system.add(t1, t2, "parent") # t3 t4 t5 - self.relations_system.add(t5, t2, "dependent") + self.add_relation(t1, PARENT, t2) # t1 -> t2 + self.add_relation(t2, PARENT, t3) # / \ + self.add_relation(t2, PARENT, t4) # t3 t4 t5 + self.add_relation(t2, DEPENDS_ON, t5) self.assertRaises( ValidationError, - self.relations_system.add, t2, t5, "parent" + self.add_relation, + t2, PARENT, t5 ) self.assertRaises( ValidationError, - self.relations_system.add, t3, t5, "parent" + self.add_relation, + t3, PARENT, t5 ) self.assertRaises( ValidationError, - self.relations_system.add, t5, t1, "parent" + self.add_relation, + t5, PARENT, t1, ) try: - self.relations_system.add(t1, t5, "parent") + self.add_relation(t1, PARENT, t5) except ValidationError: self.fail("Could not add valid relation.") def test_cannot_close_ticket_with_open_children(self): - t1 = self._insert_and_load_ticket("1") # t1 - t2 = self._insert_and_load_ticket("2", status='closed') # / | \ - t3 = self._insert_and_load_ticket("3") # t2 t3 t4 + t1 = self._insert_and_load_ticket("1") # t1 + t2 = self._insert_and_load_ticket("2", status='closed') # / | \ + t3 = self._insert_and_load_ticket("3") # t2 t3 t4 t4 = self._insert_and_load_ticket("4") - self.relations_system.add(t1, t2, "parent") - self.relations_system.add(t1, t3, "parent") - self.relations_system.add(t1, t4, "parent") + self.add_relation(t1, PARENT, t2) + self.add_relation(t1, PARENT, t3) + self.add_relation(t1, PARENT, t4) # A warning is be returned for each open ticket self.req.args["action"] = 'resolve' @@ -479,36 +443,46 @@ class ApiTestCase(BaseRelationsTestCase) self.assertRaises( ValidationError, - self.relations_system.add, - t1, - t2, - "duplicateof", + self.add_relation, + t1, DUPLICATE_OF, t2 ) - self.relations_system.add(t2, t1, "duplicateof") + self.add_relation(t2, DUPLICATE_OF, t1) def test_detects_blocker_cycles(self): t1, t2, t3, t4, t5 = map(self._insert_and_load_ticket, "12345") - self.relations_system.add(t1, t2, "blocks") - self.relations_system.add(t3, t2, "dependson") - self.relations_system.add(t4, t3, "blockedby") - self.relations_system.add(t4, t5, "dependent") - - self.assertRaises(ValidationError, - self.relations_system.add, t2, t1, "blocks") - self.assertRaises(ValidationError, - self.relations_system.add, t3, t1, "dependent") - self.assertRaises(ValidationError, - self.relations_system.add, t1, t2, "blockedby") - self.assertRaises(ValidationError, - self.relations_system.add, t1, t5, "dependson") - - self.relations_system.add(t1, t2, "dependent") - self.relations_system.add(t2, t3, "blocks") - self.relations_system.add(t4, t3, "dependson") - self.relations_system.add(t5, t4, "blockedby") + self.add_relation(t1, BLOCKS, t2) + self.add_relation(t3, DEPENDS_ON, t2) + self.add_relation(t4, BLOCKED_BY, t3) + self.add_relation(t4, DEPENDENCY_OF, t5) - self.relations_system.add(t1, t2, "refersto") - self.relations_system.add(t2, t1, "refersto") + self.assertRaises( + ValidationError, + self.add_relation, + t2, BLOCKS, t1 + ) + self.assertRaises( + ValidationError, + self.add_relation, + t3, DEPENDENCY_OF, t1 + ) + self.assertRaises( + ValidationError, + self.add_relation, + t1, BLOCKED_BY, t2 + ) + self.assertRaises( + ValidationError, + self.add_relation, + t1, DEPENDS_ON, t5 + ) + + self.add_relation(t1, DEPENDENCY_OF, t2) + self.add_relation(t2, BLOCKS, t3) + self.add_relation(t4, DEPENDS_ON, t3) + self.add_relation(t5, BLOCKED_BY, t4) + + self.add_relation(t1, REFERS_TO, t2) + self.add_relation(t2, REFERS_TO, t1) def test_can_find_ticket_by_id_from_same_env(self): """ Can find ticket given #id""" @@ -552,30 +526,27 @@ class RelationChangingListenerTestCase(B #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - relations_system = self.relations_system test_changing_listener = self.env[TestRelationChangingListener] #act - relations_system.add(ticket1, ticket2, "dependent") + self.add_relation(ticket1, DEPENDS_ON, ticket2) #assert self.assertEqual("adding_relation", test_changing_listener.action) relation = test_changing_listener.relation - self.assertEqual("dependent", relation.type) + self.assertEqual(DEPENDS_ON, relation.type) def test_can_sent_deleting_event(self): #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - relations_system = self.relations_system test_changing_listener = self.env[TestRelationChangingListener] - relations_system.add(ticket1, ticket2, "dependent") + self.add_relation(ticket1, DEPENDS_ON, ticket2) #act - relations = relations_system.get_relations(ticket1) - relation_to_delete = relations[0] - relations_system.delete(relation_to_delete["relation_id"]) + relations = self.get_relations(ticket1) + self.delete_relation(relations[0]) #assert self.assertEqual("deleting_relation", test_changing_listener.action) relation = test_changing_listener.relation - self.assertEqual("dependent", relation.type) + self.assertEqual(DEPENDS_ON, relation.type) class TicketChangeRecordUpdaterTestCase(BaseRelationsTestCase): @@ -583,9 +554,8 @@ class TicketChangeRecordUpdaterTestCase( #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - relations_system = self.relations_system #act - relations_system.add(ticket1, ticket2, "dependent") + self.add_relation(ticket1, DEPENDS_ON, ticket2) #assert change_log1 = Ticket(self.env, ticket1.id).get_changelog() self.assertEquals(1, len(change_log1)) @@ -597,12 +567,11 @@ class TicketChangeRecordUpdaterTestCase( #arrange ticket1 = self._insert_and_load_ticket("A1") ticket2 = self._insert_and_load_ticket("A2") - relations_system = self.relations_system - relations_system.add(ticket1, ticket2, "dependent") - relations = relations_system.get_relations(ticket1) + + self.add_relation(ticket1, DEPENDS_ON, ticket2) + relations = self.get_relations(ticket1) #act - relation_to_delete = relations[0] - relations_system.delete(relation_to_delete["relation_id"]) + self.delete_relation(relations[0]) #assert change_log1 = Ticket(self.env, ticket1.id).get_changelog() self.assertEquals(2, len(change_log1)) Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/base.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/base.py?rev=1574841&r1=1574840&r2=1574841&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_relations/bhrelations/tests/base.py (original) +++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/base.py Thu Mar 6 11:12:21 2014 @@ -33,6 +33,19 @@ except ImportError: locale_en = None +PARENT = "parent" +CHILD = "child" +REFERS_TO = "refersto" +DEPENDS_ON = "dependson" +DEPENDENCY_OF = "dependent" +DUPLICATE_OF = "duplicateof" +DUPLICATED_BY = "duplicatedby" +BLOCKED_BY = "blockedby" +BLOCKS = "blocks" +MULTIPRODUCT_REL = "mprel" +MULTIPRODUCT_BACKREL = "mpbackrel" + + class BaseRelationsTestCase(MultiproductTestCase): def setUp(self, enabled=()): env = EnvironmentStub( @@ -46,24 +59,28 @@ class BaseRelationsTestCase(Multiproduct env.config.set('bhrelations', 'duplicate_relation', 'duplicateof') config_name = RELATIONS_CONFIG_NAME - env.config.set(config_name, 'dependency', 'dependson,dependent') + env.config.set(config_name, 'dependency', + ','.join([DEPENDS_ON, DEPENDENCY_OF])) env.config.set(config_name, 'dependency.validators', 'NoCycles,SingleProduct') env.config.set(config_name, 'dependson.blocks', 'true') - env.config.set(config_name, 'parent_children', 'parent,children') + env.config.set(config_name, 'parent_children', + ','.join([PARENT, CHILD])) env.config.set(config_name, 'parent_children.validators', 'OneToMany,SingleProduct,NoCycles') env.config.set(config_name, 'children.label', 'Overridden') env.config.set(config_name, 'parent.copy_fields', 'summary, foo') env.config.set(config_name, 'parent.exclusive', 'true') - env.config.set(config_name, 'multiproduct_relation', 'mprel,mpbackrel') - env.config.set(config_name, 'oneway', 'refersto') - env.config.set(config_name, 'duplicate', 'duplicateof,duplicatedby') + env.config.set(config_name, 'multiproduct_relation', + ','.join([MULTIPRODUCT_REL, MULTIPRODUCT_BACKREL])) + env.config.set(config_name, 'oneway', REFERS_TO) + env.config.set(config_name, 'duplicate', + ','.join([DUPLICATE_OF, DUPLICATED_BY])) env.config.set(config_name, 'duplicate.validators', 'ReferencesOlder') env.config.set(config_name, 'duplicateof.label', 'is a duplicate of') env.config.set(config_name, 'duplicatedby.label', 'duplicates') - env.config.set(config_name, 'blocker', 'blockedby,blocks') + env.config.set(config_name, 'blocker', ','.join([BLOCKED_BY, BLOCKS])) env.config.set(config_name, 'blockedby.blocks', 'true') self.global_env = env @@ -105,3 +122,12 @@ class BaseRelationsTestCase(Multiproduct def _insert_and_load_ticket_with_env(self, env, summary, **kw): return Ticket(env, self._insert_ticket(env, summary, **kw)) + + def add_relation(self, source, reltype, destination, *args, **kwargs): + return self.relations_system.add(source, destination, reltype, *args, **kwargs) + + def get_relations(self, ticket): + return self.relations_system.get_relations(ticket) + + def delete_relation(self, relation): + self.relations_system.delete(relation["relation_id"]) Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/notification.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/notification.py?rev=1574841&r1=1574840&r2=1574841&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_relations/bhrelations/tests/notification.py (original) +++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/notification.py Thu Mar 6 11:12:21 2014 @@ -20,7 +20,7 @@ import unittest from trac.tests.notification import SMTPServerStore, SMTPThreadedServer from trac.ticket.tests.notification import ( SMTP_TEST_PORT, smtp_address, parse_smtp_message) -from bhrelations.tests.base import BaseRelationsTestCase +from bhrelations.tests.base import BaseRelationsTestCase, DEPENDENCY_OF from bhrelations.notification import RelationNotifyEmail @@ -65,8 +65,7 @@ class NotificationTestCase(BaseRelations owner='bob.u...@example.net', cc='bob.u...@example.com, bob....@example.org, ' 'bob....@example.net') - relation = self.relations_system.add( - ticket, ticket2, "dependent") + relation = self.add_relation(ticket, DEPENDENCY_OF, ticket2) self.notifier.notify(relation) @@ -93,7 +92,7 @@ class NotificationTestCase(BaseRelations ticket = self._insert_and_load_ticket('Foo', reporter='anonymous') ticket2 = self._insert_and_load_ticket('Bar', reporter='anonymous') - relation = self.relations_system.add(ticket, ticket2, "dependent") + relation = self.add_relation(ticket, DEPENDENCY_OF, ticket2) self.notifier.notify(relation) sender = self.smtpd.get_sender() @@ -108,7 +107,7 @@ class NotificationTestCase(BaseRelations ticket = self._insert_and_load_ticket('Foo', reporter='anonymous') ticket2 = self._insert_and_load_ticket('Bar', reporter='anonymous') - relation = self.relations_system.add(ticket, ticket2, "dependent") + relation = self.add_relation(ticket, DEPENDENCY_OF, ticket2) self.notifier.notify(relation) relations = self.env.db_direct_query( Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/search.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/search.py?rev=1574841&r1=1574840&r2=1574841&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_relations/bhrelations/tests/search.py (original) +++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/search.py Thu Mar 6 11:12:21 2014 @@ -26,7 +26,7 @@ from bhsearch.api import BloodhoundSearc import bhsearch.query_parser, bhsearch.search_resources.ticket_search, \ bhsearch.whoosh_backend import bhrelations.search -from bhrelations.tests.base import BaseRelationsTestCase +from bhrelations.tests.base import BaseRelationsTestCase, DEPENDENCY_OF class SearchIntegrationTestCase(BaseRelationsTestCase): @@ -44,30 +44,30 @@ class SearchIntegrationTestCase(BaseRela t1 = self._insert_and_load_ticket("Foo") t2 = self._insert_and_load_ticket("Bar") - self.relations_system.add(t1, t2, 'dependent') + self.add_relation(t1, DEPENDENCY_OF, t2) - result = self.search_api.query('dependent:#2') + result = self.search_api.query('%s:#2' % DEPENDENCY_OF) self.assertEqual(result.hits, 1) def test_relations_are_indexed_on_deletion(self): t1 = self._insert_and_load_ticket("Foo") t2 = self._insert_and_load_ticket("Bar") - self.relations_system.add(t1, t2, 'dependent') - relations = self.relations_system.get_relations(t1) + self.add_relation(t1, DEPENDENCY_OF, t2) + relations = self.get_relations(t1) self.relations_system.delete(relations[0]["relation_id"]) - result = self.search_api.query('dependent:#2') + result = self.search_api.query('%s:#2' % DEPENDENCY_OF) self.assertEqual(result.hits, 0) def test_different_types_of_queries(self): t1 = self._insert_and_load_ticket("Foo") t2 = self._insert_and_load_ticket("Bar") - self.relations_system.add(t1, t2, 'dependent') + self.add_relation(t1, DEPENDENCY_OF, t2) - self.assertEqual(self.search_api.query('dependent:#2').hits, 1) - self.assertEqual(self.search_api.query('dependent:#tp1-2').hits, 1) + self.assertEqual(self.search_api.query('%s:#2' % DEPENDENCY_OF).hits, 1) + self.assertEqual(self.search_api.query('%s:#tp1-2' % DEPENDENCY_OF).hits, 1) def suite(): Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/web_ui.py URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/web_ui.py?rev=1574841&r1=1574840&r2=1574841&view=diff ============================================================================== --- bloodhound/trunk/bloodhound_relations/bhrelations/tests/web_ui.py (original) +++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/web_ui.py Thu Mar 6 11:12:21 2014 @@ -19,7 +19,8 @@ import unittest from bhrelations.api import ResourceIdSerializer from bhrelations.web_ui import RelationManagementModule -from bhrelations.tests.base import BaseRelationsTestCase +from bhrelations.tests.base import BaseRelationsTestCase,\ + DEPENDS_ON, DUPLICATE_OF from multiproduct.ticket.web_ui import TicketModule from trac.ticket import Ticket @@ -79,7 +80,7 @@ class RelationManagementModuleTestCase(B t2 = self._insert_ticket(self.env, "Bar") self.req.args['add'] = True self.req.args['dest_tid'] = str(t2) - self.req.args['reltype'] = 'dependson' + self.req.args['reltype'] = DEPENDS_ON data = self.process_request() @@ -89,7 +90,7 @@ class RelationManagementModuleTestCase(B t2 = self._insert_ticket(self.env, "Bar") self.req.args['add'] = True self.req.args['dest_tid'] = str(t2) - self.req.args['reltype'] = 'dependson' + self.req.args['reltype'] = DEPENDS_ON rlm = RelationManagementModule(self.env) rlm.notify_relation_changed = self._failing_notification @@ -123,16 +124,16 @@ class ResolveTicketIntegrationTestCase(B self.assertRaises(RequestDone, self.resolve_as_duplicate, t2, self.get_id(t1)) - relations = self.relations_system.get_relations(t2) + relations = self.get_relations(t2) self.assertEqual(len(relations), 1) relation = relations[0] self.assertEqual(relation['destination_id'], self.get_id(t1)) - self.assertEqual(relation['type'], 'duplicateof') + self.assertEqual(relation['type'], DUPLICATE_OF) def test_prefills_duplicate_id_if_relation_exists(self): t1 = self._insert_and_load_ticket("Foo") t2 = self._insert_and_load_ticket("Bar") - self.relations_system.add(t2, t1, 'duplicateof') + self.add_relation(t2, DUPLICATE_OF, t1) self.req.path_info = '/ticket/%d' % t2.id data = self.process_request() @@ -144,7 +145,7 @@ class ResolveTicketIntegrationTestCase(B def test_can_set_duplicate_resolution_even_if_relation_exists(self): t1 = self._insert_and_load_ticket("Foo") t2 = self._insert_and_load_ticket("Bar") - self.relations_system.add(t2, t1, 'duplicateof') + self.add_relation(t2, DUPLICATE_OF, t1) self.assertRaises(RequestDone, self.resolve_as_duplicate,