Author: astaric
Date: Wed Sep 25 11:29:51 2013
New Revision: 1526159

URL: http://svn.apache.org/r1526159
Log:
Support #product-ticket_id syntax when adding relations.

Only non standard ways of specifying ticekts from different prouct
were supported before. (product_prefix:ticket:ticket_id)

Modified:
    bloodhound/trunk/bloodhound_relations/bhrelations/api.py
    bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py

Modified: bloodhound/trunk/bloodhound_relations/bhrelations/api.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/api.py?rev=1526159&r1=1526158&r2=1526159&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/api.py Wed Sep 25 
11:29:51 2013
@@ -561,23 +561,31 @@ class TicketRelationsSpecifics(Component
 
     def find_ticket(self, ticket_spec):
         ticket = None
-        m = re.match(r'#?(?P<tid>\d+)', ticket_spec)
+        m = re.match(r'#?(?:(?P<pid>[^-]+)-)?(?P<tid>\d+)', ticket_spec)
         if m:
+            pid = m.group('pid')
             tid = m.group('tid')
-            try:
-                ticket = Ticket(self.env, tid)
-            except ResourceNotFound:
-                # ticket not found in current product, try all other products
-                for p in Product.select(self.env):
-                    if p.prefix != self.env.product.prefix:
-                        # TODO: check for PRODUCT_VIEW permissions
-                        penv = ProductEnvironment(self.env.parent, p.prefix)
-                        try:
-                            ticket = Ticket(penv, tid)
-                        except ResourceNotFound:
-                            pass
-                        else:
-                            break
+            if pid:
+                try:
+                    env = ProductEnvironment(self.env.parent, pid)
+                    ticket = Ticket(env, tid)
+                except:
+                    pass
+            else:
+                try:
+                    ticket = Ticket(self.env, tid)
+                except ResourceNotFound:
+                    # ticket not found in current product, try all other 
products
+                    for p in Product.select(self.env):
+                        if p.prefix != self.env.product.prefix:
+                            # TODO: check for PRODUCT_VIEW permissions
+                            penv = ProductEnvironment(self.env.parent, 
p.prefix)
+                            try:
+                                ticket = Ticket(penv, tid)
+                            except ResourceNotFound:
+                                pass
+                            else:
+                                break
 
         # ticket still not found, use fallback for <prefix>:ticket:<id> syntax
         if ticket is None:

Modified: bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py?rev=1526159&r1=1526158&r2=1526159&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py (original)
+++ bloodhound/trunk/bloodhound_relations/bhrelations/tests/api.py Wed Sep 25 
11:29:51 2013
@@ -496,6 +496,42 @@ class ApiTestCase(BaseRelationsTestCase)
         self.relations_system.add(t1, t2, "refersto")
         self.relations_system.add(t2, t1, "refersto")
 
+    def test_can_find_ticket_by_id_from_same_env(self):
+        """ Can find ticket given #id"""
+        product2 = "tp2"
+        self._load_product_from_data(self.global_env, product2)
+        p2_env = ProductEnvironment(self.global_env, product2)
+        t1 = self._insert_and_load_ticket_with_env(p2_env, "T1")
+        trs = TicketRelationsSpecifics(p2_env)
+
+        ticket = trs.find_ticket("#%d" % t1.id)
+
+        self.assertEqual(ticket.id, 1)
+
+    def test_can_find_ticket_by_id_from_different_env(self):
+        """ Can find ticket from different env given #id"""
+        product2 = "tp2"
+        self._load_product_from_data(self.global_env, product2)
+        p2_env = ProductEnvironment(self.global_env, product2)
+        t1 = self._insert_and_load_ticket_with_env(p2_env, "T1")
+        trs = TicketRelationsSpecifics(self.env)
+
+        ticket = trs.find_ticket("#%d" % t1.id)
+
+        self.assertEqual(ticket.id, 1)
+
+    def test_can_find_ticket_by_product_and_id(self):
+        """ Can find ticket given #prefix-id"""
+        product2 = "tp2"
+        self._load_product_from_data(self.global_env, product2)
+        p2_env = ProductEnvironment(self.global_env, product2)
+        t1 = self._insert_and_load_ticket_with_env(p2_env, "T1")
+        trs = TicketRelationsSpecifics(self.env)
+
+        ticket = trs.find_ticket("#%s-%d" % (product2, t1.id))
+
+        self.assertEqual(ticket.id, 1)
+
 
 class RelationChangingListenerTestCase(BaseRelationsTestCase):
     def test_can_sent_adding_event(self):


Reply via email to