Commit a339de44eaaf3d61a28e78f0a5816344c7abe5cb
1 parent
99422d53
Exists in
staging
and in
32 other branches
comment_paragraph: add endpoint to list comments by paragraph uuid
Showing
4 changed files
with
69 additions
and
0 deletions
Show diff stats
plugins/comment_paragraph/lib/comment_paragraph_plugin.rb
plugins/comment_paragraph/lib/comment_paragraph_plugin/api.rb
0 → 100644
... | ... | @@ -0,0 +1,14 @@ |
1 | +class CommentParagraphPlugin::API < Grape::API | |
2 | + MAX_PER_PAGE = 20 | |
3 | + | |
4 | + resource :articles do | |
5 | + paginate max_per_page: MAX_PER_PAGE | |
6 | + get ':id/comment_paragraph_plugin/comments' do | |
7 | + article = find_article(environment.articles, params[:id]) | |
8 | + comments = select_filtered_collection_of(article, :comments, params) | |
9 | + comments = comments.in_paragraph(params[:paragraph_uuid]) | |
10 | + comments = comments.without_reply if(params[:without_reply].present?) | |
11 | + present paginate(comments), :with => Noosfero::API::Entities::Comment, :current_person => current_person | |
12 | + end | |
13 | + end | |
14 | +end | ... | ... |
... | ... | @@ -0,0 +1,12 @@ |
1 | +require File.join(Rails.root,'lib','noosfero','api','entities') | |
2 | +module Noosfero | |
3 | + module API | |
4 | + module Entities | |
5 | + class Comment < CommentBase | |
6 | + expose :paragraph_uuid | |
7 | + expose :comment_paragraph_selected_area | |
8 | + expose :comment_paragraph_selected_content | |
9 | + end | |
10 | + end | |
11 | + end | |
12 | +end | ... | ... |
... | ... | @@ -0,0 +1,39 @@ |
1 | +require_relative '../test_helper' | |
2 | +require_relative '../../../../test/api/test_helper' | |
3 | + | |
4 | +class APITest < ActiveSupport::TestCase | |
5 | + | |
6 | + def setup | |
7 | + login_api | |
8 | + environment = Environment.default | |
9 | + environment.enable_plugin(CommentParagraphPlugin) | |
10 | + end | |
11 | + | |
12 | + should 'return custom parameters for each comment' do | |
13 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
14 | + comment = fast_create(Comment, paragraph_uuid: '1', source_id: article.id, author_id: fast_create(Person).id) | |
15 | + comment.comment_paragraph_selected_area = 'area' | |
16 | + comment.comment_paragraph_selected_content = 'content' | |
17 | + comment.save! | |
18 | + params[:paragraph_uuid] = '1' | |
19 | + get "/api/v1/articles/#{article.id}/comment_paragraph_plugin/comments?#{params.to_query}" | |
20 | + | |
21 | + json = JSON.parse(last_response.body) | |
22 | + assert_equivalent ['1'], json['comments'].map {|c| c['paragraph_uuid']} | |
23 | + assert_equivalent ['area'], json['comments'].map {|c| c['comment_paragraph_selected_area']} | |
24 | + assert_equivalent ['content'], json['comments'].map {|c| c['comment_paragraph_selected_content']} | |
25 | + end | |
26 | + | |
27 | + should 'return comments that belongs to a paragraph' do | |
28 | + article = fast_create(Article, :profile_id => person.id, :name => "Some thing", :published => false) | |
29 | + comment1 = fast_create(Comment, :paragraph_uuid => '1', :source_id => article.id) | |
30 | + comment2 = fast_create(Comment, :paragraph_uuid => nil, :source_id => article.id) | |
31 | + comment3 = fast_create(Comment, :paragraph_uuid => '2', :source_id => article.id) | |
32 | + params[:paragraph_uuid] = '1' | |
33 | + get "/api/v1/articles/#{article.id}/comment_paragraph_plugin/comments?#{params.to_query}" | |
34 | + | |
35 | + json = JSON.parse(last_response.body) | |
36 | + assert_equivalent [comment1.id], json['comments'].map {|c| c['id']} | |
37 | + end | |
38 | + | |
39 | +end | ... | ... |