require_relative '../test_helper' require_relative '../../../../test/api/test_helper' class APITest < ActiveSupport::TestCase def setup create_and_activate_user login_api environment = Environment.default environment.enable_plugin(ProposalsDiscussionPlugin) end should 'return proposal ranking' do begin Environment.default.enable_plugin(VotePlugin) rescue puts 'VotePlugin not enabled' return end discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id) topic = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => user.person.id, :parent_id => discussion.id) proposal1 = fast_create(ProposalsDiscussionPlugin::Proposal, :profile_id => user.person.id, :parent_id => topic.id) proposal2 = fast_create(ProposalsDiscussionPlugin::Proposal, :profile_id => user.person.id, :parent_id => topic.id) proposal3 = fast_create(ProposalsDiscussionPlugin::Proposal, :profile_id => user.person.id, :parent_id => topic.id) proposal2.update_attribute(:hits, 10) 10.times { Vote.create!(:voteable => proposal2, :voter => nil, :vote => 1) } proposal3.update_attribute(:hits, 10) 2.times { Vote.create!(:voteable => proposal3, :voter => nil, :vote => 1) } proposal1.update_attribute(:hits, 5) process_delayed_job_queue get "/api/v1/proposals_discussion_plugin/#{topic.id}/ranking?#{params.to_query}" json = JSON.parse(last_response.body) assert_equal [proposal2.abstract, proposal3.abstract, proposal1.abstract], json['proposals'].map {|p| p['abstract']} assert json['updated_at'].to_datetime <= Time.now end should 'suggest article children' do discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id) topic = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => user.person.id, :parent_id => discussion.id) params[:article] = {:name => "Proposal name", :abstract => "Proposal abstract", :type => 'ProposalsDiscussionPlugin::Proposal'} assert_difference "ProposalsDiscussionPlugin::ProposalTask.count" do post "/api/v1/proposals_discussion_plugin/#{topic.id}/propose?#{params.to_query}" end json = JSON.parse(last_response.body) assert json['success'] end should 'sanitize proposal' do discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id) topic = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => user.person.id, :parent_id => discussion.id) params[:article] = {:name => "Proposal name", :abstract => "Proposal abstract", :type => 'ProposalsDiscussionPlugin::Proposal', :body => "This is a malicious body SearchParam"} assert_difference "ProposalsDiscussionPlugin::ProposalTask.count" do post "/api/v1/proposals_discussion_plugin/#{topic.id}/propose?#{params.to_query}" end json = JSON.parse(last_response.body) assert json['success'] task = Task.last assert_equal "Proposal Test abstract", task.abstract assert_equal "This is a malicious body SearchParam", task.article[:body] end should 'return article position when list proposals' do discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id) topic = fast_create(ProposalsDiscussionPlugin::Topic, :profile_id => user.person.id, :parent_id => discussion.id) proposal = fast_create(ProposalsDiscussionPlugin::Proposal, :profile_id => user.person.id, :parent_id => topic.id) params[:content_type] = 'ProposalsDiscussionPlugin::Proposal' topic.update_ranking get "/api/v1/articles/?#{params.to_query}" json = JSON.parse(last_response.body) assert_includes json["articles"].map { |a| a["ranking_position"] }, 1 end end