DEV: Allow disabling problem checks programatically (#28440)
We need a way to disable certain checks programatically, e.g. on Discourse hosting. This PR adds a configuration option for this, and makes it so that disabled checks aren't run as part of #run_all.
This commit is contained in:
parent
0636855706
commit
948e7bd55e
|
@ -13,7 +13,7 @@ class ProblemCheck
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_all
|
def run_all
|
||||||
each(&:run)
|
select(&:enabled?).each(&:run)
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -23,6 +23,7 @@ class ProblemCheck
|
||||||
|
|
||||||
include ActiveSupport::Configurable
|
include ActiveSupport::Configurable
|
||||||
|
|
||||||
|
config_accessor :enabled, default: true, instance_writer: false
|
||||||
config_accessor :priority, default: "low", instance_writer: false
|
config_accessor :priority, default: "low", instance_writer: false
|
||||||
|
|
||||||
# Determines if the check should be performed at a regular interval, and if
|
# Determines if the check should be performed at a regular interval, and if
|
||||||
|
@ -112,6 +113,11 @@ class ProblemCheck
|
||||||
end
|
end
|
||||||
delegate :identifier, to: :class
|
delegate :identifier, to: :class
|
||||||
|
|
||||||
|
def self.enabled?
|
||||||
|
enabled
|
||||||
|
end
|
||||||
|
delegate :enabled?, to: :class
|
||||||
|
|
||||||
def self.scheduled?
|
def self.scheduled?
|
||||||
perform_every.present?
|
perform_every.present?
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,6 +6,7 @@ RSpec.describe ProblemCheck do
|
||||||
RealtimeCheck = Class.new(described_class)
|
RealtimeCheck = Class.new(described_class)
|
||||||
InlineCheck = Class.new(described_class) { self.inline = true }
|
InlineCheck = Class.new(described_class) { self.inline = true }
|
||||||
PluginCheck = Class.new(described_class)
|
PluginCheck = Class.new(described_class)
|
||||||
|
DisabledCheck = Class.new(described_class) { self.enabled = false }
|
||||||
FailingCheck =
|
FailingCheck =
|
||||||
Class.new(described_class) do
|
Class.new(described_class) do
|
||||||
def call
|
def call
|
||||||
|
@ -30,13 +31,14 @@ RSpec.describe ProblemCheck do
|
||||||
stub_const(
|
stub_const(
|
||||||
described_class,
|
described_class,
|
||||||
"CORE_PROBLEM_CHECKS",
|
"CORE_PROBLEM_CHECKS",
|
||||||
[ScheduledCheck, RealtimeCheck, InlineCheck, FailingCheck, PassingCheck],
|
[ScheduledCheck, RealtimeCheck, InlineCheck, DisabledCheck, FailingCheck, PassingCheck],
|
||||||
&example
|
&example
|
||||||
)
|
)
|
||||||
|
|
||||||
Object.send(:remove_const, ScheduledCheck.name)
|
Object.send(:remove_const, ScheduledCheck.name)
|
||||||
Object.send(:remove_const, RealtimeCheck.name)
|
Object.send(:remove_const, RealtimeCheck.name)
|
||||||
Object.send(:remove_const, InlineCheck.name)
|
Object.send(:remove_const, InlineCheck.name)
|
||||||
|
Object.send(:remove_const, DisabledCheck.name)
|
||||||
Object.send(:remove_const, PluginCheck.name)
|
Object.send(:remove_const, PluginCheck.name)
|
||||||
Object.send(:remove_const, FailingCheck.name)
|
Object.send(:remove_const, FailingCheck.name)
|
||||||
Object.send(:remove_const, PassingCheck.name)
|
Object.send(:remove_const, PassingCheck.name)
|
||||||
|
@ -45,6 +47,8 @@ RSpec.describe ProblemCheck do
|
||||||
let(:scheduled_check) { ScheduledCheck }
|
let(:scheduled_check) { ScheduledCheck }
|
||||||
let(:realtime_check) { RealtimeCheck }
|
let(:realtime_check) { RealtimeCheck }
|
||||||
let(:inline_check) { InlineCheck }
|
let(:inline_check) { InlineCheck }
|
||||||
|
let(:enabled_check) { RealtimeCheck }
|
||||||
|
let(:disabled_check) { DisabledCheck }
|
||||||
let(:plugin_check) { PluginCheck }
|
let(:plugin_check) { PluginCheck }
|
||||||
let(:failing_check) { FailingCheck }
|
let(:failing_check) { FailingCheck }
|
||||||
let(:passing_check) { PassingCheck }
|
let(:passing_check) { PassingCheck }
|
||||||
|
@ -92,6 +96,11 @@ RSpec.describe ProblemCheck do
|
||||||
it { expect(scheduled_check).to_not be_inline }
|
it { expect(scheduled_check).to_not be_inline }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe ".enabled?" do
|
||||||
|
it { expect(enabled_check).to be_enabled }
|
||||||
|
it { expect(disabled_check).not_to be_enabled }
|
||||||
|
end
|
||||||
|
|
||||||
describe "plugin problem check registration" do
|
describe "plugin problem check registration" do
|
||||||
before { DiscoursePluginRegistry.register_problem_check(PluginCheck, stub(enabled?: enabled)) }
|
before { DiscoursePluginRegistry.register_problem_check(PluginCheck, stub(enabled?: enabled)) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue