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