Commit 09952f2a15015e0ce79dd8c53c8fa1949fef44e9

Authored by Victor Costa
1 parent fc09b34b

Return ranking position of a proposan in api

lib/ext/entities.rb 0 → 100644
@@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
  1 +module Noosfero
  2 + module API
  3 + module Entities
  4 +
  5 + class ArticleBase < Entity
  6 + expose :ranking_position do |article, options|
  7 + article.kind_of?(ProposalsDiscussionPlugin::Proposal) && article.ranking_item.present? ? article.ranking_item.position : nil
  8 + end
  9 + end
  10 +
  11 + end
  12 + end
  13 +end
lib/proposals_discussion_plugin/proposals_holder.rb
@@ -55,6 +55,7 @@ class ProposalsDiscussionPlugin::ProposalsHolder &lt; Folder @@ -55,6 +55,7 @@ class ProposalsDiscussionPlugin::ProposalsHolder &lt; Folder
55 ProposalsDiscussionPlugin::RankingItem.new(:proposal => proposal, :abstract => proposal.abstract, :votes_for => proposal.votes_for, :votes_against => proposal.votes_against, :hits => proposal.hits, :effective_support => effective_support) 55 ProposalsDiscussionPlugin::RankingItem.new(:proposal => proposal, :abstract => proposal.abstract, :votes_for => proposal.votes_for, :votes_against => proposal.votes_against, :hits => proposal.hits, :effective_support => effective_support)
56 end 56 end
57 ranking.sort_by { |p| p.effective_support }.reverse 57 ranking.sort_by { |p| p.effective_support }.reverse
  58 + ranking.each_with_index { |p, i| p.position = i+1 }
58 end 59 end
59 60
60 def update_ranking 61 def update_ranking
test/unit/api_test.rb
@@ -65,4 +65,16 @@ class APITest &lt; ActiveSupport::TestCase @@ -65,4 +65,16 @@ class APITest &lt; ActiveSupport::TestCase
65 assert_equal "This is a malicious body SearchParam", task.article.body 65 assert_equal "This is a malicious body SearchParam", task.article.body
66 end 66 end
67 67
  68 + should 'return article position when list proposals' do
  69 + discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id)
  70 + topic = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => user.person.id, :parent_id => discussion.id)
  71 + proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :profile_id => user.person.id, :parent_id => topic.id)
  72 + params[:content_type] = 'ProposalsDiscussionPlugin::Proposal'
  73 + topic.update_ranking
  74 +
  75 + get "/api/v1/articles/?#{params.to_query}"
  76 + json = JSON.parse(last_response.body)
  77 + assert_includes json["articles"].map { |a| a["ranking_position"] }, 1
  78 + end
  79 +
68 end 80 end