You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bloodhound.apache.org by ma...@apache.org on 2013/07/24 11:06:39 UTC
svn commit: r1506450 - in /bloodhound/trunk/bloodhound_multiproduct:
multiproduct/model.py tests/model.py
Author: matevz
Date: Wed Jul 24 09:06:39 2013
New Revision: 1506450
URL: http://svn.apache.org/r1506450
Log:
Ref. #600 - Product.get_tickets() not working properly
Modified:
bloodhound/trunk/bloodhound_multiproduct/multiproduct/model.py
bloodhound/trunk/bloodhound_multiproduct/tests/model.py
Modified: bloodhound/trunk/bloodhound_multiproduct/multiproduct/model.py
URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/multiproduct/model.py?rev=1506450&r1=1506449&r2=1506450&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/multiproduct/model.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/multiproduct/model.py Wed Jul 24 09:06:39 2013
@@ -81,7 +81,11 @@ class Product(ModelBase):
@classmethod
def get_tickets(cls, env, product=''):
"""Retrieve all tickets associated with the product."""
- q = Query.from_string(env, 'product=%s' % product)
+ from multiproduct.ticket.query import ProductQuery
+ from multiproduct.env import ProductEnvironment
+ if not product and isinstance(env, ProductEnvironment):
+ product = env.product.prefix
+ q = ProductQuery.from_string(env, 'product=%s' % product)
return q.execute()
class ProductResourceMap(ModelBase):
Modified: bloodhound/trunk/bloodhound_multiproduct/tests/model.py
URL: http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/tests/model.py?rev=1506450&r1=1506449&r2=1506450&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/tests/model.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/tests/model.py Wed Jul 24 09:06:39 2013
@@ -30,11 +30,16 @@ from sqlite3 import OperationalError
from trac.test import EnvironmentStub
from trac.core import TracError
+from trac.ticket.model import Ticket
+from multiproduct.env import ProductEnvironment
from multiproduct.model import Product
+from bhdashboard.model import ModelBase
+
from multiproduct.api import MultiProductSystem
from trac.tests.resource import TestResourceChangeListener
+
class ProductTestCase(unittest.TestCase):
"""Unit tests covering the Product model"""
INITIAL_PREFIX = 'tp'
@@ -56,7 +61,8 @@ class ProductTestCase(unittest.TestCase)
self.default_data = {'prefix':self.INITIAL_PREFIX,
'name':self.INITIAL_NAME,
'description':self.INITIAL_DESCRIPTION}
-
+
+ self.global_env = self.env
self.product = Product(self.env)
self.product._data.update(self.default_data)
self.product.insert()
@@ -205,7 +211,6 @@ class ProductTestCase(unittest.TestCase)
"""ensure that that insert method works when _meta does not specify
unique fields when inserting more than one ProductResourceMap instances
"""
- from multiproduct.model import ModelBase
class TestModel(ModelBase):
"""A test model with no unique_fields"""
_meta = {'table_name': 'bloodhound_testmodel',
@@ -253,6 +258,33 @@ class ProductTestCase(unittest.TestCase)
self.assertIsInstance(self.listener.resource, Product)
self.assertEqual(self.INITIAL_PREFIX, self.prefix)
+ def test_get_tickets(self):
+ for pdata in (
+ {'prefix': 'p2', 'name':'product, too', 'description': ''},
+ {'prefix': 'p3', 'name':'strike three', 'description': ''},
+ ):
+ num_tickets = 5
+ product = Product(self.global_env)
+ product._data.update(pdata)
+ product.insert()
+ self.env = ProductEnvironment(self.global_env, product)
+ for i in range(num_tickets):
+ ticket = Ticket(self.env)
+ ticket['summary'] = 'hello ticket #%s-%d' % (product.prefix, i)
+ ticket['reporter'] = 'admin'
+ tid = ticket.insert()
+
+ # retrieve tickets using both global and product scope
+ tickets_from_global = [(t['product'], t['id']) for t in
+ Product.get_tickets(self.global_env, product.prefix)]
+ self.assertEqual(len(tickets_from_global), num_tickets)
+ tickets_from_product = [(t['product'], t['id']) for t in
+ Product.get_tickets(self.env)]
+ self.assertEqual(len(tickets_from_product), num_tickets)
+ # both lists should contain same elements
+ intersection = set(tickets_from_global) & set(tickets_from_product)
+ self.assertEqual(len(intersection), num_tickets)
+
def suite():
test_suite = unittest.TestSuite()
test_suite.addTest(unittest.makeSuite(ProductTestCase, 'test'))