Author: rjollos
Date: Thu Mar  6 08:47:29 2014
New Revision: 1574802

URL: http://svn.apache.org/r1574802
Log:
0.8dev: It was not possible to create multiple //is a parent of// relations. 
Refs #775.

Modified:
    bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
    bloodhound/trunk/bloodhound_relations/bhrelations/validation.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=1574802&r1=1574801&r2=1574802&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py Thu Mar  6 
08:47:29 2014
@@ -224,13 +224,13 @@ class ApiTestCase(BaseRelationsTestCase)
         parent2 = self._insert_and_load_ticket("A3")
         #act
         relations_system = self.relations_system
-        relations_system.add(child, parent1, "parent")
+        relations_system.add(parent1, child, 'parent')
         self.assertRaises(
             ValidationError,
             relations_system.add,
-            child,
             parent2,
-            "parent")
+            child,
+            'parent')
 
     def test_can_not_add_more_than_one_parents_via_children(self):
         #arrange
@@ -239,12 +239,12 @@ class ApiTestCase(BaseRelationsTestCase)
         parent2 = self._insert_and_load_ticket("A3")
         #act
         relations_system = self.relations_system
-        relations_system.add(parent1, child, "children")
+        relations_system.add(child, parent1, "children")
         self.assertRaises(
             ValidationError,
             relations_system.add,
-            parent2,
             child,
+            parent2,
             "children")
 
     def test_ticket_can_be_resolved(self):
@@ -254,13 +254,13 @@ class ApiTestCase(BaseRelationsTestCase)
         parent2 = self._insert_and_load_ticket("A3")
         #act
         relations_system = self.relations_system
-        relations_system.add(parent1, child, "children")
-        self.assertRaises(
-            ValidationError,
-            relations_system.add,
-            parent2,
-            child,
-            "children")
+        relations_system.add(child, parent1, "children")
+
+        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):
         #arrange
@@ -397,53 +397,53 @@ class ApiTestCase(BaseRelationsTestCase)
 
     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(t4, t2, "parent")  #    t1 -> t2
-        self.relations_system.add(t3, t2, "parent")  #         /  \
-        self.relations_system.add(t2, t1, "parent")  #       t3    t4
+        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.assertRaises(
             ValidationError,
-            self.relations_system.add, t1, t2, "dependent"
+            self.relations_system.add, t2, t1, "dependent"
         )
         self.assertRaises(
             ValidationError,
-            self.relations_system.add, t2, t1, "dependent"
+            self.relations_system.add, t1, t2, "dependent"
         )
         self.assertRaises(
             ValidationError,
-            self.relations_system.add, t1, t4, "dependent"
+            self.relations_system.add, t4, t1, "dependent"
         )
         self.assertRaises(
             ValidationError,
-            self.relations_system.add, t3, t1, "dependent"
+            self.relations_system.add, t1, t3, "dependent"
         )
         try:
-            self.relations_system.add(t1, t5, "dependent")
-            self.relations_system.add(t3, t4, "dependent")
+            self.relations_system.add(t5, t1,"dependent")
+            self.relations_system.add(t4, t3, "dependent")
         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(t4, t2, "parent")  #    t1 -> t2
-        self.relations_system.add(t3, t2, "parent")  #         /  \
-        self.relations_system.add(t2, t1, "parent")  #       t3    t4    t5
-        self.relations_system.add(t2, t5, "dependent")
+        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.assertRaises(
             ValidationError,
-            self.relations_system.add, t5, t2, "parent"
+            self.relations_system.add, t2, t5, "parent"
         )
         self.assertRaises(
             ValidationError,
-            self.relations_system.add, t5, t3, "parent"
+            self.relations_system.add, t3, t5, "parent"
         )
         self.assertRaises(
             ValidationError,
-            self.relations_system.add, t1, t5, "parent"
+            self.relations_system.add, t5, t1, "parent"
         )
         try:
-            self.relations_system.add(t5, t1, "parent")
+            self.relations_system.add(t1, t5, "parent")
         except ValidationError:
             self.fail("Could not add valid relation.")
 

Modified: bloodhound/trunk/bloodhound_relations/bhrelations/validation.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/validation.py?rev=1574802&r1=1574801&r2=1574802&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/validation.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/validation.py Thu Mar  6 
08:47:29 2014
@@ -186,15 +186,19 @@ class NoSelfReferenceValidator(Validator
 
 
 class OneToManyValidator(Validator):
+    """Only tree relationships are allowed. A ticket cannot have multiple
+    parents."""
     def validate(self, relation):
         rls = RelationsSystem(self.env)
-        existing_relations = rls._select_relations(relation.source,
-                                                   relation.type)
+        if relation.type != rls.PARENT_RELATION_TYPE:
+            return
+        existing_relations = rls._select_relations(relation.destination,
+                                                   rls.CHILDREN_RELATION_TYPE)
         if existing_relations:
             raise ValidationError(
                 tag_("Resource %(source)s can only have one %(relation)s "
                      "relation.",
-                     source=tag.em(relation.source),
+                     source=tag.em(relation.destination),
                      relation=tag.b(self.render_relation_type(relation.type)))
             )
 


Reply via email to