DEV: Add PluginRegistry modifiers to #review and #recalculate (#29128)
* DEV: Add PluginRegistry modifiers to #review and #recalculate * added tests * changed added registry logic
This commit is contained in:
parent
6078fb73ea
commit
789aa2d9de
|
@ -11,6 +11,9 @@ class Promotion
|
||||||
# Review a user for a promotion. Delegates work to a review_#{trust_level} method.
|
# Review a user for a promotion. Delegates work to a review_#{trust_level} method.
|
||||||
# Returns true if the user was promoted, false otherwise.
|
# Returns true if the user was promoted, false otherwise.
|
||||||
def review
|
def review
|
||||||
|
override = DiscoursePluginRegistry.apply_modifier(:review_trust_level, false, @user)
|
||||||
|
return override if override
|
||||||
|
|
||||||
# nil users are never promoted
|
# nil users are never promoted
|
||||||
return false if @user.blank? || !@user.manual_locked_trust_level.nil?
|
return false if @user.blank? || !@user.manual_locked_trust_level.nil?
|
||||||
|
|
||||||
|
@ -148,6 +151,10 @@ class Promotion
|
||||||
|
|
||||||
promotion = Promotion.new(user)
|
promotion = Promotion.new(user)
|
||||||
|
|
||||||
|
override =
|
||||||
|
DiscoursePluginRegistry.apply_modifier(:recalculate_trust_level, false, user, promotion)
|
||||||
|
return override if override
|
||||||
|
|
||||||
promotion.review_tl0 if granted_trust_level < TrustLevel[1]
|
promotion.review_tl0 if granted_trust_level < TrustLevel[1]
|
||||||
promotion.review_tl1 if granted_trust_level < TrustLevel[2]
|
promotion.review_tl1 if granted_trust_level < TrustLevel[2]
|
||||||
promotion.review_tl2 if granted_trust_level < TrustLevel[3]
|
promotion.review_tl2 if granted_trust_level < TrustLevel[3]
|
||||||
|
|
|
@ -16,6 +16,11 @@ RSpec.describe Promotion do
|
||||||
describe "newuser" do
|
describe "newuser" do
|
||||||
fab!(:user) { Fabricate(:user, trust_level: TrustLevel[0], created_at: 2.days.ago) }
|
fab!(:user) { Fabricate(:user, trust_level: TrustLevel[0], created_at: 2.days.ago) }
|
||||||
let(:promotion) { Promotion.new(user) }
|
let(:promotion) { Promotion.new(user) }
|
||||||
|
let!(:plugin) { Plugin::Instance.new }
|
||||||
|
let!(:review_modifier) { :review_trust_level }
|
||||||
|
let!(:recalculate_modifier) { :recalculate_trust_level }
|
||||||
|
let!(:deny_block) { Proc.new { false } }
|
||||||
|
let!(:allow_block) { Proc.new { true } }
|
||||||
|
|
||||||
it "doesn't raise an error with a nil user" do
|
it "doesn't raise an error with a nil user" do
|
||||||
expect { Promotion.new(nil).review }.not_to raise_error
|
expect { Promotion.new(nil).review }.not_to raise_error
|
||||||
|
@ -49,6 +54,33 @@ RSpec.describe Promotion do
|
||||||
it "has upgraded the user to basic" do
|
it "has upgraded the user to basic" do
|
||||||
expect(user.trust_level).to eq(TrustLevel[1])
|
expect(user.trust_level).to eq(TrustLevel[1])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "allows plugins to control promotion #review" do
|
||||||
|
DiscoursePluginRegistry.register_modifier(plugin, :review_trust_level, &deny_block)
|
||||||
|
action = Promotion.new(user).review
|
||||||
|
expect(action).to eq(false)
|
||||||
|
|
||||||
|
DiscoursePluginRegistry.register_modifier(plugin, review_modifier, &allow_block)
|
||||||
|
action = Promotion.new(user).review
|
||||||
|
expect(action).to eq(true)
|
||||||
|
ensure
|
||||||
|
DiscoursePluginRegistry.unregister_modifier(plugin, review_modifier, &deny_block)
|
||||||
|
DiscoursePluginRegistry.unregister_modifier(plugin, review_modifier, &allow_block)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "allows plugins to control promotion #recalculate" do
|
||||||
|
DiscoursePluginRegistry.register_modifier(plugin, recalculate_modifier, &deny_block)
|
||||||
|
action = Promotion.recalculate(user)
|
||||||
|
expect(action).to eq(nil)
|
||||||
|
|
||||||
|
DiscoursePluginRegistry.register_modifier(plugin, recalculate_modifier, &allow_block)
|
||||||
|
action = Promotion.recalculate(user)
|
||||||
|
|
||||||
|
expect(action).to eq(true)
|
||||||
|
ensure
|
||||||
|
DiscoursePluginRegistry.unregister_modifier(plugin, recalculate_modifier, &deny_block)
|
||||||
|
DiscoursePluginRegistry.unregister_modifier(plugin, recalculate_modifier, &allow_block)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when user has not done the requisite things" do
|
context "when user has not done the requisite things" do
|
||||||
|
|
Loading…
Reference in New Issue