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 | ... | ... |