Update API fields for Comment
This commit is contained in:
@@ -16,6 +16,7 @@ class Comment < ActiveRecord::Base
|
||||
|
||||
belongs_to :commentable, -> { with_hidden }, polymorphic: true, counter_cache: true
|
||||
belongs_to :user, -> { with_hidden }
|
||||
belongs_to :public_author, -> { with_public_activity }, class_name: 'User', foreign_key: 'user_id'
|
||||
|
||||
before_save :calculate_confidence_score
|
||||
|
||||
@@ -24,6 +25,12 @@ class Comment < ActiveRecord::Base
|
||||
scope :not_as_admin_or_moderator, -> { where("administrator_id IS NULL").where("moderator_id IS NULL")}
|
||||
scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) }
|
||||
|
||||
scope :public_for_api, -> do
|
||||
joins("FULL OUTER JOIN debates ON commentable_type = 'Debate' AND commentable_id = debates.id").
|
||||
joins("FULL OUTER JOIN proposals ON commentable_type = 'Proposal' AND commentable_id = proposals.id").
|
||||
where("commentable_type = 'Proposal' AND proposals.hidden_at IS NULL OR commentable_type = 'Debate' AND debates.hidden_at IS NULL")
|
||||
end
|
||||
|
||||
scope :sort_by_most_voted, -> { order(confidence_score: :desc, created_at: :desc) }
|
||||
scope :sort_descendants_by_most_voted, -> { order(confidence_score: :desc, created_at: :asc) }
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ API_TYPE_DEFINITIONS = {
|
||||
User => %I[ id username proposals ],
|
||||
Debate => %I[ id title description created_at cached_votes_total cached_votes_up cached_votes_down comments_count hot_score confidence_score geozone_id geozone comments public_author ],
|
||||
Proposal => %I[ id title description external_url cached_votes_up comments_count hot_score confidence_score created_at summary video_url geozone_id retired_at retired_reason retired_explanation geozone comments public_author ],
|
||||
Comment => %I[ id body user_id user commentable_id ],
|
||||
Comment => %I[ id commentable_id commentable_type body created_at cached_votes_total cached_votes_up cached_votes_down ancestry confidence_score public_author ],
|
||||
Geozone => %I[ id name ]
|
||||
}
|
||||
|
||||
|
||||
@@ -132,4 +132,45 @@ describe Comment do
|
||||
end
|
||||
end
|
||||
|
||||
describe "public_for_api" do
|
||||
it "returns comments" do
|
||||
comment = create(:comment)
|
||||
|
||||
expect(Comment.public_for_api).to include(comment)
|
||||
end
|
||||
|
||||
it "does not return hidden comments" do
|
||||
hidden_comment = create(:comment, :hidden)
|
||||
|
||||
expect(Comment.public_for_api).not_to include(hidden_comment)
|
||||
end
|
||||
|
||||
it "returns comments on debates" do
|
||||
debate = create(:debate)
|
||||
comment = create(:comment, commentable: debate)
|
||||
|
||||
expect(Comment.public_for_api).to include(comment)
|
||||
end
|
||||
|
||||
it "does not return comments on hidden debates" do
|
||||
hidden_debate = create(:debate, :hidden)
|
||||
comment = create(:comment, commentable: hidden_debate)
|
||||
|
||||
expect(Comment.public_for_api).not_to include(comment)
|
||||
end
|
||||
|
||||
it "returns comments on proposals" do
|
||||
proposal = create(:proposal)
|
||||
comment = create(:comment, commentable: proposal)
|
||||
|
||||
expect(Comment.public_for_api).to include(comment)
|
||||
end
|
||||
|
||||
it "does not return comments on hidden proposals" do
|
||||
hidden_proposal = create(:proposal, :hidden)
|
||||
comment = create(:comment, commentable: hidden_proposal)
|
||||
|
||||
expect(Comment.public_for_api).not_to include(comment)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user