diff --git a/app/logical/approver_pruner.rb b/app/logical/approver_pruner.rb index a7d102bca..4177178e0 100644 --- a/app/logical/approver_pruner.rb +++ b/app/logical/approver_pruner.rb @@ -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, diff --git a/app/models/ban.rb b/app/models/ban.rb index f87a6f0f3..6b952c41c 100644 --- a/app/models/ban.rb +++ b/app/models/ban.rb @@ -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 diff --git a/test/unit/approver_pruner_test.rb b/test/unit/approver_pruner_test.rb index bde540b4b..52139db58 100644 --- a/test/unit/approver_pruner_test.rb +++ b/test/unit/approver_pruner_test.rb @@ -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 diff --git a/test/unit/ban_test.rb b/test/unit/ban_test.rb index 668cf8e2a..abd9c1bd7 100644 --- a/test/unit/ban_test.rb +++ b/test/unit/ban_test.rb @@ -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) - end - assert(!user.feedback.empty?) - assert_equal("negative", user.feedback.last.category) + 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 + + 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