[#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()