From 89eca87f167bd20e670bf3c7dbaa090a52b40eb3 Mon Sep 17 00:00:00 2001 From: Arpit Jalan <arpit@techapj.com> Date: Fri, 1 Jun 2018 19:42:31 +0530 Subject: [PATCH] FEATURE: add staff action log for post rejections --- app/models/queued_post.rb | 1 + app/models/user_history.rb | 2 ++ app/services/staff_action_logger.rb | 22 ++++++++++++++++++++++ config/locales/client.en.yml | 1 + spec/models/queued_post_spec.rb | 3 +++ spec/services/staff_action_logger_spec.rb | 18 ++++++++++++++++++ 6 files changed, 47 insertions(+) diff --git a/app/models/queued_post.rb b/app/models/queued_post.rb index b91d3af3de2..fb4a390f7fc 100644 --- a/app/models/queued_post.rb +++ b/app/models/queued_post.rb @@ -47,6 +47,7 @@ class QueuedPost < ActiveRecord::Base def reject!(rejected_by) change_to!(:rejected, rejected_by) + StaffActionLogger.new(rejected_by).log_post_rejected(self) DiscourseEvent.trigger(:rejected_post, self) end diff --git a/app/models/user_history.rb b/app/models/user_history.rb index f500d831793..c02e73f9aff 100644 --- a/app/models/user_history.rb +++ b/app/models/user_history.rb @@ -80,6 +80,7 @@ class UserHistory < ActiveRecord::Base removed_suspend_user: 61, removed_unsilence_user: 62, removed_unsuspend_user: 63, + post_rejected: 64 ) end @@ -138,6 +139,7 @@ class UserHistory < ActiveRecord::Base :create_badge, :change_badge, :delete_badge, + :post_rejected ] end diff --git a/app/services/staff_action_logger.rb b/app/services/staff_action_logger.rb index 07a47a4c48d..38c1b905987 100644 --- a/app/services/staff_action_logger.rb +++ b/app/services/staff_action_logger.rb @@ -526,6 +526,28 @@ class StaffActionLogger )) end + def log_post_rejected(rejected_post, opts = {}) + raise Discourse::InvalidParameters.new(:rejected_post) unless rejected_post && rejected_post.is_a?(QueuedPost) + + topic = rejected_post.topic || Topic.with_deleted.find_by(id: rejected_post.topic_id) + topic_title = topic&.title || "not found" + username = rejected_post.user&.username || "unknown" + name = rejected_post.user&.name || "unknown" + + details = [ + "created_at: #{rejected_post.created_at}", + "rejected_at: #{rejected_post.rejected_at}", + "user: #{username} (#{name})", + "topic: #{topic_title}", + "raw: #{rejected_post.raw}", + ] + + UserHistory.create!(params(opts).merge( + action: UserHistory.actions[:post_rejected], + details: details.join("\n") + )) + end + private def params(opts = nil) diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index e433e46f120..a1713ce3160 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -3406,6 +3406,7 @@ en: disabled_second_factor: "disable Two Factor Authentication" topic_published: "topic published" post_approved: "post approved" + post_rejected: "post rejected" create_badge: "create badge" change_badge: "change badge" delete_badge: "delete badge" diff --git a/spec/models/queued_post_spec.rb b/spec/models/queued_post_spec.rb index b6e5113efe2..22e7331d833 100644 --- a/spec/models/queued_post_spec.rb +++ b/spec/models/queued_post_spec.rb @@ -86,6 +86,9 @@ describe QueuedPost do # It removes the pending action expect(UserAction.where(queued_post_id: qp.id).count).to eq(0) + # Logs staff action log for rejected post + expect(UserHistory.where(action: UserHistory.actions[:post_rejected]).count).to eq(1) + # We can't reject twice expect(-> { qp.reject!(admin) }).to raise_error(QueuedPost::InvalidStateTransition) end diff --git a/spec/services/staff_action_logger_spec.rb b/spec/services/staff_action_logger_spec.rb index 70132a7a51e..bc72628558d 100644 --- a/spec/services/staff_action_logger_spec.rb +++ b/spec/services/staff_action_logger_spec.rb @@ -488,4 +488,22 @@ describe StaffActionLogger do expect { log_post_approved }.to change { UserHistory.count }.by(1) end end + + describe 'log_post_rejected' do + let(:rejected_post) { Fabricate(:queued_post) } + + subject(:log_post_rejected) { described_class.new(admin).log_post_rejected(rejected_post) } + + it 'raises an error when post is nil' do + expect { logger.log_post_rejected(nil) }.to raise_error(Discourse::InvalidParameters) + end + + it 'raises an error when post is not a QueuedPosts' do + expect { logger.log_post_rejected(1) }.to raise_error(Discourse::InvalidParameters) + end + + it 'creates a new UserHistory record' do + expect { log_post_rejected }.to change { UserHistory.count }.by(1) + end + end end