mirror of
https://github.com/discourse/discourse.git
synced 2024-12-04 11:43:43 +08:00
6d1c2a3d5a
We support a low-level construct called "inline checks", which you can use to register a problem ad-hoc from within application code. Problems registered by inline checks never show up in the admin dashboard, this is because when loading the dashboard, we run all realtime checks and look for problems. Because of an oversight, we considered inline checks to be "realtime", causing them to be run and clear their problem status. To fix this, we don't consider inline checks to be realtime, to prevent them from running when loading the admin dashboard.
123 lines
3.6 KiB
Ruby
123 lines
3.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe ProblemCheck do
|
|
around do |example|
|
|
ScheduledCheck = Class.new(described_class) { self.perform_every = 30.minutes }
|
|
RealtimeCheck = Class.new(described_class)
|
|
InlineCheck = Class.new(described_class) { self.inline = true }
|
|
PluginCheck = Class.new(described_class)
|
|
FailingCheck =
|
|
Class.new(described_class) do
|
|
def call
|
|
problem
|
|
end
|
|
|
|
def translation_key
|
|
"failing_check"
|
|
end
|
|
end
|
|
PassingCheck =
|
|
Class.new(described_class) do
|
|
def call
|
|
no_problem
|
|
end
|
|
|
|
def translation_key
|
|
"passing_check"
|
|
end
|
|
end
|
|
|
|
stub_const(
|
|
described_class,
|
|
"CORE_PROBLEM_CHECKS",
|
|
[ScheduledCheck, RealtimeCheck, InlineCheck, FailingCheck, PassingCheck],
|
|
&example
|
|
)
|
|
|
|
Object.send(:remove_const, ScheduledCheck.name)
|
|
Object.send(:remove_const, RealtimeCheck.name)
|
|
Object.send(:remove_const, InlineCheck.name)
|
|
Object.send(:remove_const, PluginCheck.name)
|
|
Object.send(:remove_const, FailingCheck.name)
|
|
Object.send(:remove_const, PassingCheck.name)
|
|
end
|
|
|
|
let(:scheduled_check) { ScheduledCheck }
|
|
let(:realtime_check) { RealtimeCheck }
|
|
let(:inline_check) { InlineCheck }
|
|
let(:plugin_check) { PluginCheck }
|
|
let(:failing_check) { FailingCheck }
|
|
let(:passing_check) { PassingCheck }
|
|
|
|
describe ".[]" do
|
|
it { expect(described_class[:scheduled_check]).to eq(scheduled_check) }
|
|
it { expect(described_class[:foo]).to eq(nil) }
|
|
end
|
|
|
|
describe ".identifier" do
|
|
it { expect(scheduled_check.identifier).to eq(:scheduled_check) }
|
|
end
|
|
|
|
describe ".checks" do
|
|
it { expect(described_class.checks).to include(scheduled_check, realtime_check, inline_check) }
|
|
end
|
|
|
|
describe ".scheduled" do
|
|
it { expect(described_class.scheduled).to include(scheduled_check) }
|
|
it { expect(described_class.scheduled).not_to include(realtime_check) }
|
|
it { expect(described_class.scheduled).not_to include(inline_check) }
|
|
end
|
|
|
|
describe ".realtime" do
|
|
it { expect(described_class.realtime).to include(realtime_check) }
|
|
it { expect(described_class.realtime).not_to include(scheduled_check) }
|
|
it { expect(described_class.realtime).not_to include(inline_check) }
|
|
end
|
|
|
|
describe ".scheduled?" do
|
|
it { expect(scheduled_check).to be_scheduled }
|
|
it { expect(realtime_check).to_not be_scheduled }
|
|
it { expect(inline_check).to_not be_scheduled }
|
|
end
|
|
|
|
describe ".realtime?" do
|
|
it { expect(realtime_check).to be_realtime }
|
|
it { expect(scheduled_check).to_not be_realtime }
|
|
it { expect(inline_check).to_not be_realtime }
|
|
end
|
|
|
|
describe ".inline?" do
|
|
it { expect(inline_check).to be_inline }
|
|
it { expect(realtime_check).to_not be_inline }
|
|
it { expect(scheduled_check).to_not be_inline }
|
|
end
|
|
|
|
describe "plugin problem check registration" do
|
|
before { DiscoursePluginRegistry.register_problem_check(PluginCheck, stub(enabled?: enabled)) }
|
|
|
|
after { DiscoursePluginRegistry.reset! }
|
|
|
|
context "when the plugin is enabled" do
|
|
let(:enabled) { true }
|
|
|
|
it { expect(described_class.checks).to include(plugin_check) }
|
|
end
|
|
|
|
context "when the plugin is disabled" do
|
|
let(:enabled) { false }
|
|
|
|
it { expect(described_class.checks).not_to include(plugin_check) }
|
|
end
|
|
end
|
|
|
|
describe "#run" do
|
|
context "when check is failing" do
|
|
it { expect { failing_check.run }.to change { ProblemCheckTracker.failing.count }.by(1) }
|
|
end
|
|
|
|
context "when check is passing" do
|
|
it { expect { passing_check.run }.to change { ProblemCheckTracker.passing.count }.by(1) }
|
|
end
|
|
end
|
|
end
|