approver prune: don't prune recently promoted approvers.

Don't prune people who were just promoted in the last 45 days. Also fix
bug where approvers with zero approvals weren't pruned.
This commit is contained in:
evazion
2020-01-07 20:24:17 -06:00
parent e28a955535
commit c32f9fbdb8
2 changed files with 38 additions and 3 deletions

View File

@@ -5,9 +5,15 @@ module ApproverPruner
MINIMUM_APPROVALS = 30
def inactive_approvers
approvals = PostApproval.where("created_at >= ?", APPROVAL_PERIOD.ago)
approvers = User.where("bit_prefs & ? > 0", User.flag_value_for("can_approve_posts")).where("level < ?", User::Levels::MODERATOR)
approvers.where(id: approvals.group(:user_id).having("count(*) < ?", MINIMUM_APPROVALS).select(:user_id))
approvers = User.where("bit_prefs & ? > 0", User.flag_value_for("can_approve_posts"))
approvers = approvers.where("level < ?", User::Levels::MODERATOR)
recently_promoted_approvers = UserFeedback.where("created_at >= ?", APPROVAL_PERIOD.ago).where_like(:body, "*You gained the ability to approve posts*").select(:user_id)
approvers = approvers.where.not(id: recently_promoted_approvers)
approvers.select do |approver|
approver.post_approvals.where("created_at >= ?", APPROVAL_PERIOD.ago).count < MINIMUM_APPROVALS
end
end
def prune!

View File

@@ -0,0 +1,29 @@
require 'test_helper'
class ApproverPrunerTest < ActiveSupport::TestCase
context "ApproverPruner" do
setup do
@approver = create(:user, can_approve_posts: true)
end
should "demote inactive approvers" do
assert_equal([@approver.id], ApproverPruner.inactive_approvers.map(&:id))
end
should "not demote active approvers" do
posts = create_list(:post, ApproverPruner::MINIMUM_APPROVALS + 1, is_pending: true)
posts.each { |post| post.approve!(@approver) }
assert_equal([], ApproverPruner.inactive_approvers.map(&:id))
end
should "not demote recently promoted approvers" do
as(create(:admin_user)) do
@user = create(:user)
@user.promote_to!(User::Levels::BUILDER, can_approve_posts: true)
end
assert_not_includes(ApproverPruner.inactive_approvers.map(&:id), @user.id)
end
end
end