Commit fa90a41d1e3ada3e18cf2622a37690f1143ea0af
Exists in
staging
and in
31 other branches
Merge branch 'api_article_comments' into 'master'
API - Comments within articles Adds comments field to articles API entity when the http request includes show_comments parameter. See merge request !858
Showing
3 changed files
with
31 additions
and
14 deletions
Show diff stats
lib/noosfero/api/entities.rb
@@ -150,6 +150,18 @@ module Noosfero | @@ -150,6 +150,18 @@ module Noosfero | ||
150 | expose :members, :using => Person | 150 | expose :members, :using => Person |
151 | end | 151 | end |
152 | 152 | ||
153 | + class CommentBase < Entity | ||
154 | + expose :body, :title, :id | ||
155 | + expose :created_at, :format_with => :timestamp | ||
156 | + expose :author, :using => Profile | ||
157 | + expose :reply_of, :using => CommentBase | ||
158 | + end | ||
159 | + | ||
160 | + class Comment < CommentBase | ||
161 | + root 'comments', 'comment' | ||
162 | + expose :children, as: :replies, :using => Comment | ||
163 | + end | ||
164 | + | ||
153 | class ArticleBase < Entity | 165 | class ArticleBase < Entity |
154 | root 'articles', 'article' | 166 | root 'articles', 'article' |
155 | expose :id | 167 | expose :id |
@@ -177,6 +189,7 @@ module Noosfero | @@ -177,6 +189,7 @@ module Noosfero | ||
177 | expose :votes_count | 189 | expose :votes_count |
178 | expose :comments_count | 190 | expose :comments_count |
179 | expose :type | 191 | expose :type |
192 | + expose :comments, using: CommentBase, :if => lambda{|obj,opt| opt[:params] && ['1','true',true].include?(opt[:params][:show_comments])} | ||
180 | end | 193 | end |
181 | 194 | ||
182 | class Article < ArticleBase | 195 | class Article < ArticleBase |
@@ -185,18 +198,6 @@ module Noosfero | @@ -185,18 +198,6 @@ module Noosfero | ||
185 | expose :children, :using => ArticleBase | 198 | expose :children, :using => ArticleBase |
186 | end | 199 | end |
187 | 200 | ||
188 | - class CommentBase < Entity | ||
189 | - expose :body, :title, :id | ||
190 | - expose :created_at, :format_with => :timestamp | ||
191 | - expose :author, :using => Profile | ||
192 | - expose :reply_of, :using => CommentBase | ||
193 | - end | ||
194 | - | ||
195 | - class Comment < CommentBase | ||
196 | - root 'comments', 'comment' | ||
197 | - expose :children, as: :replies, :using => Comment | ||
198 | - end | ||
199 | - | ||
200 | class User < Entity | 201 | class User < Entity |
201 | root 'users', 'user' | 202 | root 'users', 'user' |
202 | 203 |
lib/noosfero/api/helpers.rb
@@ -124,7 +124,7 @@ require_relative '../../find_by_contents' | @@ -124,7 +124,7 @@ require_relative '../../find_by_contents' | ||
124 | 124 | ||
125 | def present_article(asset) | 125 | def present_article(asset) |
126 | article = find_article(asset.articles, params[:id]) | 126 | article = find_article(asset.articles, params[:id]) |
127 | - present_partial article, :with => Entities::Article | 127 | + present_partial article, :with => Entities::Article, :params => params |
128 | end | 128 | end |
129 | 129 | ||
130 | def present_articles_for_asset(asset, method = 'articles') | 130 | def present_articles_for_asset(asset, method = 'articles') |
@@ -133,7 +133,7 @@ require_relative '../../find_by_contents' | @@ -133,7 +133,7 @@ require_relative '../../find_by_contents' | ||
133 | end | 133 | end |
134 | 134 | ||
135 | def present_articles(articles) | 135 | def present_articles(articles) |
136 | - present_partial paginate(articles), :with => Entities::Article | 136 | + present_partial paginate(articles), :with => Entities::Article, :params => params |
137 | end | 137 | end |
138 | 138 | ||
139 | def find_articles(asset, method = 'articles') | 139 | def find_articles(asset, method = 'articles') |
test/api/articles_test.rb
@@ -664,4 +664,20 @@ class ArticlesTest < ActiveSupport::TestCase | @@ -664,4 +664,20 @@ class ArticlesTest < ActiveSupport::TestCase | ||
664 | assert_not_nil json['article'][attribute] | 664 | assert_not_nil json['article'][attribute] |
665 | end | 665 | end |
666 | end | 666 | end |
667 | + | ||
668 | + should 'only show article comments when show_comments is present' do | ||
669 | + person = fast_create(Person) | ||
670 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing") | ||
671 | + article.comments.create!(:body => "another comment", :author => person) | ||
672 | + | ||
673 | + get "/api/v1/articles/#{article.id}/?#{params.merge(:show_comments => '1').to_query}" | ||
674 | + json = JSON.parse(last_response.body) | ||
675 | + assert_includes json["article"].keys, "comments" | ||
676 | + assert_equal json["article"]["comments"].first["body"], "another comment" | ||
677 | + | ||
678 | + get "/api/v1/articles/#{article.id}/?#{params.to_query}" | ||
679 | + json = JSON.parse(last_response.body) | ||
680 | + assert_not_includes json["article"].keys, "comments" | ||
681 | + end | ||
682 | + | ||
667 | end | 683 | end |