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