Author: astaric
Date: Mon May 20 07:47:32 2013
New Revision: 1484388
URL: http://svn.apache.org/r1484388
Log:
Do not allow closing tickets with open children. Towards #528.
Modified:
bloodhound/trunk/bloodhound_relations/bhrelations/api.py
bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
bloodhound/trunk/bloodhound_relations/bhrelations/tests/validation.py
Modified: bloodhound/trunk/bloodhound_relations/bhrelations/api.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/api.py?rev=1484388&r1=1484387&r2=1484388&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/api.py Mon May 20
07:47:32 2013
@@ -460,7 +460,8 @@ class TicketRelationsSpecifics(Component
def validate_ticket(self, req, ticket):
action = req.args.get('action')
if action == 'resolve':
- blockers = RelationsSystem(self.env).find_blockers(
+ rls = RelationsSystem(self.env)
+ blockers = rls.find_blockers(
ticket, self.is_blocker)
if blockers:
blockers_str = ', '.join(
@@ -471,6 +472,14 @@ class TicketRelationsSpecifics(Component
% blockers_str)
yield None, msg
+ for relation in [r for r in rls.get_relations(ticket)
+ if r['type'] == rls.CHILDREN_RELATION_TYPE]:
+ ticket =
self._create_ticket_by_full_id(relation['destination'])
+ if ticket['status'] != 'closed':
+ msg = ("Cannot resolve this ticket because it has open"
+ "child tickets.")
+ yield None, msg
+
def is_blocker(self, resource):
ticket = self._create_ticket_by_full_id(resource)
if ticket['status'] != 'closed':
Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py?rev=1484388&r1=1484387&r2=1484388&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py Mon May 20
07:47:32 2013
@@ -517,6 +517,19 @@ class ApiTestCase(BaseApiApiTestCase):
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", status='closed')
+ t2 = self._insert_and_load_ticket("2", status='closed')
+ t3 = self._insert_and_load_ticket("3")
+ self.relations_system.add(t2, t1, "parent")
+ self.relations_system.add(t3, t1, "parent")
+
+ self.req.args["action"] = 'resolve'
+ warnings = TicketRelationsSpecifics(self.env).validate_ticket(
+ self.req, t1)
+ #assert
+ self.assertEqual(1, len(list(warnings)))
+
class RelationChangingListenerTestCase(BaseApiApiTestCase):
def test_can_sent_adding_event(self):
Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/validation.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/validation.py?rev=1484388&r1=1484387&r2=1484388&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/tests/validation.py
(original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/validation.py Mon
May 20 07:47:32 2013
@@ -17,8 +17,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-
-from trac.test import Mock
+import unittest
from bhrelations.validation import Validator
from bhrelations.tests.api import BaseApiApiTestCase
@@ -92,4 +91,10 @@ class GraphFunctionsTestCase(BaseApiApiT
)
+def suite():
+ test_suite = unittest.TestSuite()
+ test_suite.addTest(unittest.makeSuite(GraphFunctionsTestCase, 'test'))
+ return test_suite
+if __name__ == '__main__':
+ unittest.main()