diff --git a/lib/ext/entities.rb b/lib/ext/entities.rb index d29b104..2ccba23 100644 --- a/lib/ext/entities.rb +++ b/lib/ext/entities.rb @@ -13,6 +13,9 @@ module Noosfero expose :amount_of_children do |article, options| article.children.count end + expose :replied do |article, options| + article.setting[:replied] + end end end diff --git a/lib/proposals_discussion_plugin/proposal.rb b/lib/proposals_discussion_plugin/proposal.rb index 0173ef7..3288bd0 100644 --- a/lib/proposals_discussion_plugin/proposal.rb +++ b/lib/proposals_discussion_plugin/proposal.rb @@ -9,6 +9,8 @@ class ProposalsDiscussionPlugin::Proposal < TinyMceArticle has_one :ranking_item + settings_items :replied, :type => :boolean, :default => false + def self.short_description _("Proposal") end diff --git a/lib/proposals_discussion_plugin/response.rb b/lib/proposals_discussion_plugin/response.rb index b6fde32..13ee065 100644 --- a/lib/proposals_discussion_plugin/response.rb +++ b/lib/proposals_discussion_plugin/response.rb @@ -4,6 +4,15 @@ class ProposalsDiscussionPlugin::Response < TinyMceArticle validate :check_parent_type + before_save do |article| + + article.parent.setting[:replied] = true + article.parent.save! + + article.parent.parent.setting[:replied] = true + article.parent.parent.save! + end + def self.short_description _("Proposal Response") end diff --git a/lib/proposals_discussion_plugin/topic.rb b/lib/proposals_discussion_plugin/topic.rb index 5b4f087..4280f12 100644 --- a/lib/proposals_discussion_plugin/topic.rb +++ b/lib/proposals_discussion_plugin/topic.rb @@ -5,6 +5,7 @@ class ProposalsDiscussionPlugin::Topic < ProposalsDiscussionPlugin::ProposalsHo has_many :proposals_comments, :class_name => 'Comment', :through => :children, :source => :comments settings_items :color, :type => :string + settings_items :replied, :type => :boolean, :default => false attr_accessible :color diff --git a/test/unit/api_test.rb b/test/unit/api_test.rb index 6aa0b6c..97e2b68 100644 --- a/test/unit/api_test.rb +++ b/test/unit/api_test.rb @@ -51,11 +51,11 @@ class APITest < ActiveSupport::TestCase should 'sanitize proposal' do discussion = fast_create(ProposalsDiscussionPlugin::Discussion, :profile_id => user.person.id) - topic = fast_create(ProposalsDiscussionPlugin::Topic, - :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', + 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}" @@ -79,4 +79,20 @@ class APITest < ActiveSupport::TestCase assert_includes json["articles"].map { |a| a["ranking_position"] }, 1 end + should 'check if a proposal and their topic was replied' do + discussion = create(ProposalsDiscussionPlugin::Discussion, :name => 'Discussion', :profile_id => user.person.id) + topic = create(ProposalsDiscussionPlugin::Topic, :name => 'Topic', :profile_id => user.person.id, :parent_id => discussion.id) + proposal = create(ProposalsDiscussionPlugin::Proposal, :name => 'Proposal', :abstract => 'This is a proposal', :body => 'test', :profile_id => user.person.id, :parent_id => topic.id) + response = create(ProposalsDiscussionPlugin::Response, :name => 'Response', :body => 'test response', :profile_id => user.person.id, :parent_id => proposal.id) + get "/api/v1/articles/#{topic.id}?#{params.to_query}" + json = JSON.parse(last_response.body) + + assert json["article"]["replied"] + + get "/api/v1/articles/#{topic.id}/children/#{proposal.id}?#{params.to_query}" + json = JSON.parse(last_response.body) + + assert json["article"]["replied"] + end + end -- libgit2 0.21.2