From 3d410398a35345b234c05a18cb0191792bd26c72 Mon Sep 17 00:00:00 2001 From: evazion Date: Thu, 27 Feb 2020 00:08:48 -0600 Subject: [PATCH] approver pruner: send weekly warning dmails to inactive approvers. Send weekly warning dmails to approvers in danger of losing their approver permissions. Don't send warnings if we're more than three weeks away from demotion so that approvers aren't warned prematurely. --- app/logical/approver_pruner.rb | 15 +++++++++++++++ app/logical/danbooru_maintenance.rb | 1 + test/unit/approver_pruner_test.rb | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/app/logical/approver_pruner.rb b/app/logical/approver_pruner.rb index 7421eb4c3..67e7933b5 100644 --- a/app/logical/approver_pruner.rb +++ b/app/logical/approver_pruner.rb @@ -30,4 +30,19 @@ module ApproverPruner end end end + + def dmail_inactive_approvers! + days_until_next_month = (Date.current.next_month.beginning_of_month - Date.current).to_i + return unless days_until_next_month <= 21 + + inactive_approvers.each do |user| + Dmail.create_automated(to: user, title: "You will lose approval privileges soon", body: <<~BODY) + You've approved fewer than #{MINIMUM_APPROVALS} posts in the past + #{APPROVAL_PERIOD.inspect}. You will lose your approval privileges in + #{days_until_next_month} #{"day".pluralize(days_until_next_month)} + unless you have approved at least #{MINIMUM_APPROVALS} posts by the end + of the month. + BODY + end + end end diff --git a/app/logical/danbooru_maintenance.rb b/app/logical/danbooru_maintenance.rb index ee9c56949..a76cfc9b1 100644 --- a/app/logical/danbooru_maintenance.rb +++ b/app/logical/danbooru_maintenance.rb @@ -21,6 +21,7 @@ module DanbooruMaintenance def weekly safely { UserPasswordResetNonce.prune! } safely { TagRelationshipRetirementService.find_and_retire! } + safely { ApproverPruner.dmail_inactive_approvers! } end def monthly diff --git a/test/unit/approver_pruner_test.rb b/test/unit/approver_pruner_test.rb index 444ae498e..b1f9b1952 100644 --- a/test/unit/approver_pruner_test.rb +++ b/test/unit/approver_pruner_test.rb @@ -27,5 +27,13 @@ class ApproverPrunerTest < ActiveSupport::TestCase assert_not_includes(ApproverPruner.inactive_approvers.map(&:id), @user.id) end + + should "dmail inactive approvers" do + travel_to(Date.parse("2020-01-20")) do + ApproverPruner.dmail_inactive_approvers! + end + + assert_equal("You will lose approval privileges soon", @approver.dmails.received.last.title) + end end end