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