feedbacks: fix mod action when feedback is deleted.
Fix feedbacks logging an "updated user feedback" mod action instead of a "deleted user feedback" mod action when a feedback was deleted.
This commit is contained in:
@@ -33,7 +33,7 @@ class UserFeedbacksController < ApplicationController
|
|||||||
|
|
||||||
def update
|
def update
|
||||||
@user_feedback = authorize UserFeedback.find(params[:id])
|
@user_feedback = authorize UserFeedback.find(params[:id])
|
||||||
@user_feedback.update(permitted_attributes(@user_feedback))
|
@user_feedback.update(updater: CurrentUser.user, **permitted_attributes(@user_feedback))
|
||||||
respond_with(@user_feedback)
|
respond_with(@user_feedback)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,19 +3,14 @@
|
|||||||
class UserFeedback < ApplicationRecord
|
class UserFeedback < ApplicationRecord
|
||||||
self.table_name = "user_feedback"
|
self.table_name = "user_feedback"
|
||||||
|
|
||||||
attr_accessor :disable_dmail_notification
|
attr_accessor :disable_dmail_notification, :updater
|
||||||
|
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :creator, class_name: "User"
|
belongs_to :creator, class_name: "User"
|
||||||
validates :body, presence: true
|
validates :body, presence: true
|
||||||
validates :category, presence: true, inclusion: { in: %w[positive negative neutral] }
|
validates :category, presence: true, inclusion: { in: %w[positive negative neutral] }
|
||||||
after_create :create_dmail, unless: :disable_dmail_notification
|
after_create :create_dmail, unless: :disable_dmail_notification
|
||||||
after_update(:if => ->(rec) { CurrentUser.id != rec.creator_id}) do |rec|
|
after_update :create_mod_action
|
||||||
ModAction.log(%{updated user feedback for "#{rec.user.name}":#{Routes.user_path(rec.user)}}, :user_feedback_update, subject: user, user: CurrentUser.user)
|
|
||||||
end
|
|
||||||
after_destroy(:if => ->(rec) { CurrentUser.id != rec.creator_id}) do |rec|
|
|
||||||
ModAction.log(%{deleted user feedback for "#{rec.user.name}":#{Routes.user_path(rec.user)}}, :user_feedback_delete, subject: user, user: CurrentUser.user)
|
|
||||||
end
|
|
||||||
|
|
||||||
deletable
|
deletable
|
||||||
|
|
||||||
@@ -58,6 +53,16 @@ class UserFeedback < ApplicationRecord
|
|||||||
Dmail.create_automated(:to_id => user_id, :title => "Your user record has been updated", :body => body)
|
Dmail.create_automated(:to_id => user_id, :title => "Your user record has been updated", :body => body)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_mod_action
|
||||||
|
raise "Updater not set" if updater.nil?
|
||||||
|
|
||||||
|
if saved_change_to_is_deleted == [false, true] && creator != updater
|
||||||
|
ModAction.log(%{deleted user feedback for "#{user.name}":#{Routes.user_path(user)}}, :user_feedback_delete, subject: user, user: updater)
|
||||||
|
elsif creator != updater
|
||||||
|
ModAction.log(%{updated user feedback for "#{user.name}":#{Routes.user_path(user)}}, :user_feedback_update, subject: user, user: updater)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def self.available_includes
|
def self.available_includes
|
||||||
[:creator, :user]
|
[:creator, :user]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<%# record, interval %>
|
<%# record, interval %>
|
||||||
|
|
||||||
<% if record.respond_to?(:updater) && record.updater_id != record.creator_id %>
|
<% if record.respond_to?(:updater) && record.respond_to?(:updater_id) && record.updater_id != record.creator_id %>
|
||||||
<p class="fineprint edit-notice">Updated by <%= link_to_user record.updater %> <%= time_ago_in_words_tagged(record.updated_at) %></p>
|
<p class="fineprint edit-notice">Updated by <%= link_to_user record.updater %> <%= time_ago_in_words_tagged(record.updated_at) %></p>
|
||||||
<% elsif record.updated_at - record.created_at > (local_assigns[:interval] || 5.minutes) %>
|
<% elsif record.updated_at - record.created_at > (local_assigns[:interval] || 5.minutes) %>
|
||||||
<p class="fineprint edit-notice">Updated <%= time_ago_in_words_tagged(record.updated_at) %></p>
|
<p class="fineprint edit-notice">Updated <%= time_ago_in_words_tagged(record.updated_at) %></p>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
should "allow moderators to see deleted feedbacks" do
|
should "allow moderators to see deleted feedbacks" do
|
||||||
as(@user) { @user_feedback.update!(is_deleted: true) }
|
@user_feedback = create(:user_feedback, is_deleted: true)
|
||||||
get_auth user_feedback_path(@user_feedback), @mod
|
get_auth user_feedback_path(@user_feedback), @mod
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
@@ -104,7 +104,7 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
should "not allow updating deleted feedbacks" do
|
should "not allow updating deleted feedbacks" do
|
||||||
as(@user) { @user_feedback.update!(is_deleted: true) }
|
@user_feedback = create(:user_feedback, user: @user, creator: @critic, is_deleted: true)
|
||||||
put_auth user_feedback_path(@user_feedback), @critic, params: { user_feedback: { body: "test" }}
|
put_auth user_feedback_path(@user_feedback), @critic, params: { user_feedback: { body: "test" }}
|
||||||
|
|
||||||
assert_response 403
|
assert_response 403
|
||||||
@@ -125,6 +125,7 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest
|
|||||||
assert_redirected_to @user_feedback
|
assert_redirected_to @user_feedback
|
||||||
assert_equal("blah", @user_feedback.reload.body)
|
assert_equal("blah", @user_feedback.reload.body)
|
||||||
assert_match(/updated user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description)
|
assert_match(/updated user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description)
|
||||||
|
assert_equal("user_feedback_update", ModAction.last.category)
|
||||||
assert_equal(@user, ModAction.last.subject)
|
assert_equal(@user, ModAction.last.subject)
|
||||||
assert_equal(@mod, ModAction.last.creator)
|
assert_equal(@mod, ModAction.last.creator)
|
||||||
end
|
end
|
||||||
@@ -134,7 +135,8 @@ class UserFeedbacksControllerTest < ActionDispatch::IntegrationTest
|
|||||||
|
|
||||||
assert_redirected_to @user_feedback
|
assert_redirected_to @user_feedback
|
||||||
assert(@user_feedback.reload.is_deleted?)
|
assert(@user_feedback.reload.is_deleted?)
|
||||||
assert_match(/updated user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description)
|
assert_match(/deleted user feedback for "#{@user.name}":\/users\/#{@user.id}/, ModAction.last.description)
|
||||||
|
assert_equal("user_feedback_delete", ModAction.last.category)
|
||||||
assert_equal(@user, ModAction.last.subject)
|
assert_equal(@user, ModAction.last.subject)
|
||||||
assert_equal(@mod, ModAction.last.creator)
|
assert_equal(@mod, ModAction.last.creator)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user