You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2013/06/27 00:57:06 UTC

[11/11] git commit: [#5650] ticket:323 Pagination for topic's posts

[#5650] ticket:323 Pagination for topic's posts


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/44ad385c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/44ad385c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/44ad385c

Branch: refs/heads/master
Commit: 44ad385c3eb62b2ec6723e16d06d47eaed691a92
Parents: f1b854c
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue May 7 09:50:04 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Wed Jun 26 22:56:12 2013 +0000

----------------------------------------------------------------------
 .../forgediscussion/controllers/root.py          | 14 ++++++++++++--
 ForgeDiscussion/forgediscussion/model/forum.py   |  6 ++++++
 .../tests/functional/test_rest.py                | 19 +++++++++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/44ad385c/ForgeDiscussion/forgediscussion/controllers/root.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py
index 7ff7fcb..1f577f2 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -332,5 +332,15 @@ class ForumTopicRestController(BaseController):
         require_access(self.forum, 'read')
 
     @expose('json:')
-    def index(self, **kw):
-        return dict(topic=self.topic)
+    def index(self, limit=100, page=0, **kw):
+        limit, page, start = g.handle_paging(int(limit), int(page))
+        posts = model.ForumPost.query.find(dict(thread_id=self.topic._id))
+        posts = posts.skip(start).limit(limit)
+        count = posts.count()
+        json = {}
+        json['topic'] = self.topic.__json__()
+        json['topic']['posts'] = posts.all()
+        json['count'] = count
+        json['page'] = page
+        json['limit'] = limit
+        return json

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/44ad385c/ForgeDiscussion/forgediscussion/model/forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/model/forum.py b/ForgeDiscussion/forgediscussion/model/forum.py
index e8f920a..1a4a734 100644
--- a/ForgeDiscussion/forgediscussion/model/forum.py
+++ b/ForgeDiscussion/forgediscussion/model/forum.py
@@ -200,6 +200,12 @@ class ForumThread(M.Thread):
             {'$set':dict(discussion_id=new_forum._id)})
         self.discussion_id = new_forum._id
 
+    def __json__(self):
+        return dict(
+            _id=self._id,
+            discussion_id=str(self.discussion_id),
+            subject=self.subject)
+
 
 class ForumPostHistory(M.PostHistory):
     class __mongometa__:

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/44ad385c/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
index 87c2fda..45ef742 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_rest.py
@@ -131,6 +131,25 @@ class TestRootRestController(TestDiscussionApiBase):
         assert_equal(resp.json['page'], 1)
         assert_equal(resp.json['limit'], 1)
 
+    def test_topic_pagination(self):
+        thread = ForumThread.query.find({'subject': 'Hi guys'}).first()
+        thread.post('Hi guy', 'I am second post')
+        url = '/rest/p/test/discussion/general/thread/%s/' % thread._id
+        resp = self.app.get(url + '?limit=1')
+        posts = resp.json['topic']['posts']
+        assert_equal(len(posts), 1)
+        assert_equal(posts[0]['text'], 'Hi boys and girls')
+        assert_equal(resp.json['count'], 2)
+        assert_equal(resp.json['page'], 0)
+        assert_equal(resp.json['limit'], 1)
+        resp = self.app.get(url + '?limit=1&page=1')
+        posts = resp.json['topic']['posts']
+        assert_equal(len(posts), 1)
+        assert_equal(posts[0]['text'], 'I am second post')
+        assert_equal(resp.json['count'], 2)
+        assert_equal(resp.json['page'], 1)
+        assert_equal(resp.json['limit'], 1)
+
     def test_security(self):
         p = M.Project.query.get(shortname='test')
         acl = p.app_instance('discussion').config.acl