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='[email protected]',
cc='[email protected], [email protected], '
'[email protected]')
- 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,