[#6661] Fixed mismatch between REST API and bulk export for discussion

Signed-off-by: Cory Johns <cjohns@slashdotmedia.com>
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 6df982f..7f17063 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -159,7 +159,7 @@
     first_post = RelationProperty('Post', via='first_post_id')
     ref = RelationProperty('ArtifactReference')
 
-    def __json__(self):
+    def __json__(self, limit=None, page=None):
         return dict(
             _id=self._id,
             discussion_id=str(self.discussion_id),
@@ -171,9 +171,7 @@
                         timestamp=p.timestamp,
                         attachments=[dict(bytes=attach.length,
                                           url=h.absurl(attach.url())) for attach in p.attachments])
-                   for p in self.post_class().query.find(
-                       dict(discussion_id=self.discussion_id, thread_id=self._id, status='ok')
-                   )
+                   for p in self.query_posts(status='ok', style='chronological', limit=limit, page=page)
                 ]
         )
 
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py
index aa1130e..ff74d63 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -23,7 +23,7 @@
 from collections import OrderedDict
 
 
-from tg import expose, validate, redirect, flash, response
+from tg import expose, validate, redirect, flash, response, jsonify
 from tg.decorators import with_trailing_slash, without_trailing_slash
 from pylons import tmpl_context as c, app_globals as g
 from pylons import request
@@ -416,11 +416,9 @@
     @expose('json:')
     def index(self, limit=100, page=0, **kw):
         limit, page, start = g.handle_paging(int(limit), int(page))
-        posts = self.topic.query_posts(page=page, limit=limit, style='', status='ok')
-        json = {}
-        json['topic'] = self.topic.__json__()
-        json['count'] = posts.count()
-        json['page'] = page
-        json['limit'] = limit
-        json['topic']['posts'] = posts.all()
-        return json
+        json_data = {}
+        json_data['topic'] = self.topic.__json__(limit=limit, page=page)
+        json_data['count'] = self.topic.query_posts(status='ok').count()
+        json_data['page'] = page
+        json_data['limit'] = limit
+        return json_data
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
index d9f0c39..d78a7fb 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
@@ -17,7 +17,7 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-from nose.tools import assert_equal
+from nose.tools import assert_equal, assert_in
 
 from allura.lib import helpers as h
 from allura.tests import decorators as td
@@ -134,6 +134,7 @@
         assert_equal(topic['subject'], 'Hi guys')
         assert_equal(topic['posts'][0]['text'], 'Hi boys and girls')
         assert_equal(topic['posts'][0]['subject'], 'Hi guys')
+        assert_in('timestamp', topic['posts'][0])
 
     def test_forum_list_pagination(self):
         resp = self.app.get('/rest/p/test/discussion/?limit=1')