feedbacks: don't send redundant dmails when user is banned or loses approver status.
When a user is banned, send them a "You have been banned" dmail instead of a "Your user record has been updated" dmail. When a user loses approver status due to inactivity, don't seen them a "Your user record has been updated" dmail for the "Lost approver privileges" neutral feedback they receive.
This commit is contained in:
@@ -29,7 +29,7 @@ module ApproverPruner
|
||||
inactive_approvers.each do |user|
|
||||
CurrentUser.scoped(User.system) do
|
||||
user.update!(level: User::Levels::CONTRIBUTOR)
|
||||
user.feedback.create(category: "neutral", body: "Lost approval privileges", creator: User.system)
|
||||
user.feedback.create!(category: "neutral", body: "Lost approval privileges", creator: User.system, disable_dmail_notification: true)
|
||||
|
||||
Dmail.create_automated(
|
||||
to_id: user.id,
|
||||
|
||||
@@ -4,6 +4,7 @@ class Ban < ApplicationRecord
|
||||
attribute :duration, :interval
|
||||
|
||||
after_create :create_feedback
|
||||
after_create :create_dmail
|
||||
after_create :update_user_on_create
|
||||
after_create :create_ban_mod_action
|
||||
after_destroy :update_user_on_destroy
|
||||
@@ -77,7 +78,11 @@ class Ban < ApplicationRecord
|
||||
end
|
||||
|
||||
def create_feedback
|
||||
user.feedback.create!(creator: banner, category: "negative", body: "Banned #{humanized_duration}: #{reason}")
|
||||
user.feedback.create!(creator: banner, category: "negative", body: "Banned #{humanized_duration}: #{reason}", disable_dmail_notification: true)
|
||||
end
|
||||
|
||||
def create_dmail
|
||||
Dmail.create_automated(to: user, title: "You have been banned", body: "You have been banned #{forever? ? "forever" : "for #{humanized_duration}"}: #{reason}")
|
||||
end
|
||||
|
||||
def create_ban_mod_action
|
||||
|
||||
@@ -10,6 +10,8 @@ class ApproverPrunerTest < ActiveSupport::TestCase
|
||||
assert_equal([@approver.id], ApproverPruner.inactive_approvers.map(&:id))
|
||||
assert_nothing_raised { ApproverPruner.prune! }
|
||||
assert_equal(User::Levels::CONTRIBUTOR, @approver.reload.level)
|
||||
assert_equal(1, @approver.dmails.received.count)
|
||||
assert_equal("Approver inactivity", @approver.dmails.received.last.title)
|
||||
end
|
||||
|
||||
should "not demote active approvers" do
|
||||
|
||||
@@ -38,14 +38,20 @@ class BanTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
should "update the user's feedback" do
|
||||
user = FactoryBot.create(:user)
|
||||
admin = FactoryBot.create(:admin_user)
|
||||
assert(user.feedback.empty?)
|
||||
CurrentUser.scoped(admin) do
|
||||
FactoryBot.create(:ban, :user => user, :banner => admin)
|
||||
user = create(:user)
|
||||
ban = create(:ban, user: user, duration: 100.years, reason: "lol")
|
||||
|
||||
assert_equal(1, user.feedback.negative.count)
|
||||
assert_equal("Banned forever: lol", user.feedback.last.body)
|
||||
end
|
||||
assert(!user.feedback.empty?)
|
||||
assert_equal("negative", user.feedback.last.category)
|
||||
|
||||
should "send the user a dmail" do
|
||||
user = create(:user)
|
||||
ban = create(:ban, user: user, duration: 100.years, reason: "lol")
|
||||
|
||||
assert_equal(1, user.dmails.count)
|
||||
assert_equal("You have been banned", user.dmails.last.title)
|
||||
assert_equal("You have been banned forever: lol", user.dmails.last.body)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user