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