[#7789] ticket:680 Return more fields in ticket API search results
diff --git a/ForgeTracker/forgetracker/tests/functional/test_rest.py b/ForgeTracker/forgetracker/tests/functional/test_rest.py
index 455cff5..7c650be 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_rest.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_rest.py
@@ -191,23 +191,31 @@
class TestRestSearch(TestTrackerApiBase):
+ @property
+ def ticket(self):
+ return TM.Ticket(
+ ticket_num=5,
+ summary='our test ticket',
+ status='open',
+ labels=['tiny', 'minor'])
+
@patch('forgetracker.model.Ticket.paged_search')
def test_no_criteria(self, paged_search):
- paged_search.return_value = dict(tickets=[
- TM.Ticket(ticket_num=5, summary='our test ticket'),
- ])
+ paged_search.return_value = dict(tickets=[self.ticket])
r = self.api_get('/rest/p/test/bugs/search')
assert_equal(r.status_int, 200)
- assert_equal(r.json, {'tickets': [
- {'summary': 'our test ticket', 'ticket_num': 5},
- ]})
+ assert_equal(r.json['tickets'][0]['summary'], 'our test ticket')
+ assert_equal(r.json['tickets'][0]['ticket_num'], 5)
+ assert_equal(r.json['tickets'][0]['status'], 'open')
+ assert_equal(r.json['tickets'][0]['labels'], ['tiny', 'minor'])
+ assert 'description' not in r.json
+ assert 'discussion_thread' not in r.json
@patch('forgetracker.model.Ticket.paged_search')
def test_some_criteria(self, paged_search):
q = 'labels:testing && status:open'
- paged_search.return_value = dict(tickets=[
- TM.Ticket(ticket_num=5, summary='our test ticket'),
- ],
+ paged_search.return_value = dict(
+ tickets=[self.ticket],
sort='status',
limit=2,
count=1,
@@ -217,9 +225,14 @@
r = self.api_get('/rest/p/test/bugs/search',
q=q, sort='status', limit='2')
assert_equal(r.status_int, 200)
- assert_equal(r.json, {'limit': 2, 'q': q, 'sort': 'status', 'count': 1,
- 'page': 0, 'tickets': [
- {'summary': 'our test ticket',
- 'ticket_num': 5},
- ]
- })
+ assert_equal(r.json['limit'], 2)
+ assert_equal(r.json['q'], q)
+ assert_equal(r.json['sort'], 'status')
+ assert_equal(r.json['count'], 1)
+ assert_equal(r.json['page'], 0)
+ assert_equal(r.json['tickets'][0]['summary'], 'our test ticket')
+ assert_equal(r.json['tickets'][0]['ticket_num'], 5)
+ assert_equal(r.json['tickets'][0]['status'], 'open')
+ assert_equal(r.json['tickets'][0]['labels'], ['tiny', 'minor'])
+ assert 'description' not in r.json
+ assert 'discussion_thread' not in r.json
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index d37b5b1..fd8917e 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1717,10 +1717,16 @@
@expose('json:')
def search(self, q=None, limit=100, page=0, sort=None, **kw):
+ def _convert_ticket(t):
+ t = t.__json__()
+ # just pop out all the heavy stuff
+ for field in ['description', 'discussion_thread']:
+ t.pop(field, None)
+ return t
+
results = TM.Ticket.paged_search(
c.app.config, c.user, q, limit, page, sort, show_deleted=False)
- results['tickets'] = [dict(ticket_num=t.ticket_num, summary=t.summary)
- for t in results['tickets']]
+ results['tickets'] = map(_convert_ticket, results['tickets'])
return results
@expose()