From 78f9b39e553a114d31f467f2293ffcc1a20827c4 Mon Sep 17 00:00:00 2001 From: Lukas Matt Date: Sat, 3 Oct 2015 16:52:50 +0200 Subject: [PATCH] Use polymorphic association for the report item * Adopt pronto suggestions Signed-off-by: Lukas Matt --- app/assets/templates/comment_tpl.jst.hbs | 2 +- app/assets/templates/photo_tpl.jst.hbs | 2 +- .../single-post-moderation_tpl.jst.hbs | 2 +- .../templates/stream-element_tpl.jst.hbs | 2 +- app/models/comment.rb | 2 ++ app/models/post.rb | 2 ++ app/models/report.rb | 15 ++------- ...20151003142048_update_report_item_types.rb | 7 ++++ db/schema.rb | 2 +- spec/controllers/report_controller_spec.rb | 32 +++++++++---------- spec/helpers/report_helper_spec.rb | 4 +-- spec/models/report_spec.rb | 10 +++--- 12 files changed, 41 insertions(+), 41 deletions(-) create mode 100644 db/migrate/20151003142048_update_report_item_types.rb diff --git a/app/assets/templates/comment_tpl.jst.hbs b/app/assets/templates/comment_tpl.jst.hbs index 5dc240b49..2f8a9ae14 100644 --- a/app/assets/templates/comment_tpl.jst.hbs +++ b/app/assets/templates/comment_tpl.jst.hbs @@ -13,7 +13,7 @@ {{else}} - + {{/if}} diff --git a/app/assets/templates/photo_tpl.jst.hbs b/app/assets/templates/photo_tpl.jst.hbs index a36e05879..9cf51d51b 100644 --- a/app/assets/templates/photo_tpl.jst.hbs +++ b/app/assets/templates/photo_tpl.jst.hbs @@ -7,7 +7,7 @@ {{else}} - + diff --git a/app/assets/templates/single-post-viewer/single-post-moderation_tpl.jst.hbs b/app/assets/templates/single-post-viewer/single-post-moderation_tpl.jst.hbs index 10fc6f0d2..d81f6a14b 100644 --- a/app/assets/templates/single-post-viewer/single-post-moderation_tpl.jst.hbs +++ b/app/assets/templates/single-post-viewer/single-post-moderation_tpl.jst.hbs @@ -5,7 +5,7 @@ {{else}} - + diff --git a/app/assets/templates/stream-element_tpl.jst.hbs b/app/assets/templates/stream-element_tpl.jst.hbs index 92ea4e5ee..bb13c0cfa 100644 --- a/app/assets/templates/stream-element_tpl.jst.hbs +++ b/app/assets/templates/stream-element_tpl.jst.hbs @@ -13,7 +13,7 @@ {{else}} - + diff --git a/app/models/comment.rb b/app/models/comment.rb index 9e0eca2c7..b4194e7c8 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -30,6 +30,8 @@ class Comment < ActiveRecord::Base validates :text, :presence => true, :length => {:maximum => 65535} validates :parent, :presence => true #should be in relayable (pending on fixing Message) + has_many :reports, as: :item + scope :including_author, -> { includes(:author => :profile) } scope :for_a_stream, -> { including_author.merge(order('created_at ASC')) } diff --git a/app/models/post.rb b/app/models/post.rb index e59576085..787924f8e 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -17,6 +17,8 @@ class Post < ActiveRecord::Base xml_attr :provider_display_name + has_many :reports, as: :item + has_many :mentions, :dependent => :destroy has_many :reshares, :class_name => "Reshare", :foreign_key => :root_guid, :primary_key => :guid diff --git a/app/models/report.rb b/app/models/report.rb index 6463bcf59..0ecaea927 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -1,10 +1,8 @@ class Report < ActiveRecord::Base - POST, COMMENT = %w(post comment).map(&:freeze) - validates :user_id, presence: true validates :item_id, presence: true - validates :item_type, presence: true, :inclusion => { :in => %w(post comment), - :message => 'Type should match `post` or `comment`!'} + validates :item_type, presence: true, inclusion: { + in: %w(Post Comment), message: "Type should match `Post` or `Comment`!"} validates :text, presence: true validate :entry_does_not_exist, :on => :create @@ -13,17 +11,10 @@ class Report < ActiveRecord::Base belongs_to :user belongs_to :post belongs_to :comment + belongs_to :item, polymorphic: true after_commit :send_report_notification, :on => :create - def item - if item_type == POST - Post.find_by(id: item_id) - elsif item_type == COMMENT - Comment.find_by(id: item_id) - end - end - def reported_author item.author if item end diff --git a/db/migrate/20151003142048_update_report_item_types.rb b/db/migrate/20151003142048_update_report_item_types.rb new file mode 100644 index 000000000..9a318edff --- /dev/null +++ b/db/migrate/20151003142048_update_report_item_types.rb @@ -0,0 +1,7 @@ +class UpdateReportItemTypes < ActiveRecord::Migration + def change + Report.all.each do |report| + report.update_attribute :item_type, report[:item_type].capitalize + end + end +end diff --git a/db/schema.rb b/db/schema.rb index f2afae365..6a526fe46 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150828132451) do +ActiveRecord::Schema.define(version: 20151003142048) do create_table "account_deletions", force: :cascade do |t| t.string "diaspora_handle", limit: 255 diff --git a/spec/controllers/report_controller_spec.rb b/spec/controllers/report_controller_spec.rb index e5d5a49eb..fc64d36dd 100644 --- a/spec/controllers/report_controller_spec.rb +++ b/spec/controllers/report_controller_spec.rb @@ -49,16 +49,16 @@ describe ReportController, type: :controller do context "report offensive post" do it "succeeds" do - put :create, report: {item_id: @message.id, item_type: "post", text: "offensive content"} + put :create, report: {item_id: @message.id, item_type: "Post", text: "offensive content"} expect(response.status).to eq(200) - expect(Report.exists?(item_id: @message.id, item_type: "post")).to be true + expect(Report.exists?(item_id: @message.id, item_type: "Post")).to be true end end context "report offensive comment" do it "succeeds" do - put :create, report: {item_id: @comment.id, item_type: "comment", text: "offensive content"} + put :create, report: {item_id: @comment.id, item_type: "Comment", text: "offensive content"} expect(response.status).to eq(200) - expect(Report.exists?(item_id: @comment.id, item_type: "comment")).to be true + expect(Report.exists?(item_id: @comment.id, item_type: "Comment")).to be true end end end @@ -68,14 +68,14 @@ describe ReportController, type: :controller do it "is behind redirect_unless_admin_or_moderator" do put :update, id: @message.id, type: "post" expect(response).to redirect_to stream_path - expect(Report.where(reviewed: false, item_id: @message.id, item_type: "post")).to be_truthy + expect(Report.where(reviewed: false, item_id: @message.id, item_type: "Post")).to be_truthy end end context "mark comment report as user" do it "is behind redirect_unless_admin_or_moderator" do put :update, id: @comment.id, type: "comment" expect(response).to redirect_to stream_path - expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "comment")).to be_truthy + expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "Comment")).to be_truthy end end @@ -86,7 +86,7 @@ describe ReportController, type: :controller do it "succeeds" do put :update, id: @message.id, type: "post" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy + expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end end context "mark comment report as admin" do @@ -96,7 +96,7 @@ describe ReportController, type: :controller do it "succeeds" do put :update, id: @comment.id, type: "comment" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy + expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end end @@ -108,7 +108,7 @@ describe ReportController, type: :controller do it "succeeds" do put :update, id: @message.id, type: "post" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy + expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end end @@ -119,7 +119,7 @@ describe ReportController, type: :controller do it "succeeds" do put :update, id: @comment.id, type: "comment" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy + expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end end end @@ -129,14 +129,14 @@ describe ReportController, type: :controller do it "is behind redirect_unless_admin_or_moderator" do delete :destroy, id: @message.id, type: "post" expect(response).to redirect_to stream_path - expect(Report.where(reviewed: false, item_id: @message.id, item_type: "post")).to be_truthy + expect(Report.where(reviewed: false, item_id: @message.id, item_type: "Post")).to be_truthy end end context "destroy comment as user" do it "is behind redirect_unless_admin_or_moderator" do delete :destroy, id: @comment.id, type: "comment" expect(response).to redirect_to stream_path - expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "comment")).to be_truthy + expect(Report.where(reviewed: false, item_id: @comment.id, item_type: "Comment")).to be_truthy end end @@ -147,7 +147,7 @@ describe ReportController, type: :controller do it "succeeds" do delete :destroy, id: @message.id, type: "post" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy + expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end end context "destroy comment as admin" do @@ -157,7 +157,7 @@ describe ReportController, type: :controller do it "succeeds" do delete :destroy, id: @comment.id, type: "comment" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy + expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end end @@ -168,7 +168,7 @@ describe ReportController, type: :controller do it "succeeds" do delete :destroy, id: @message.id, type: "post" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @message.id, item_type: "post")).to be_truthy + expect(Report.where(reviewed: true, item_id: @message.id, item_type: "Post")).to be_truthy end end context "destroy comment as moderator" do @@ -178,7 +178,7 @@ describe ReportController, type: :controller do it "succeeds" do delete :destroy, id: @comment.id, type: "comment" expect(response.status).to eq(302) - expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "comment")).to be_truthy + expect(Report.where(reviewed: true, item_id: @comment.id, item_type: "Comment")).to be_truthy end end end diff --git a/spec/helpers/report_helper_spec.rb b/spec/helpers/report_helper_spec.rb index 1c3fa3b18..f7d6b2510 100644 --- a/spec/helpers/report_helper_spec.rb +++ b/spec/helpers/report_helper_spec.rb @@ -7,11 +7,11 @@ describe ReportHelper, type: :helper do @comment = @user.comment!(@post, "welcome") @post_report = @user.reports.create( - item_id: @post.id, item_type: "post", + item_id: @post.id, item_type: "Post", text: "offensive content" ) @comment_report = @user.reports.create( - item_id: @comment.id, item_type: "comment", + item_id: @comment.id, item_type: "Comment", text: "offensive content" ) end diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index bdfc17d38..04e4bc85a 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -12,14 +12,12 @@ describe Report, :type => :model do @bob_comment = @user.comment!(@bob_post, "welcome") @valid_post_report = { - :item_id => @bob_post.id, - :item_type => 'post', - :text => 'offensive content' + item_id: @bob_post.id, item_type: "Post", + text: "offensive content" } @valid_comment_report = { - :item_id => @bob_comment.id, - :item_type => 'comment', - :text => 'offensive content' + item_id: @bob_comment.id, item_type: "Comment", + text: "offensive content" } end