2024-02-22 22:20:32 -05:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
RSpec.describe ProblemCheck do
|
2024-03-28 02:00:47 -04:00
|
|
|
around do |example|
|
2024-02-22 22:20:32 -05:00
|
|
|
ScheduledCheck = Class.new(described_class) { self.perform_every = 30.minutes }
|
2024-03-13 22:55:01 -04:00
|
|
|
RealtimeCheck = Class.new(described_class)
|
2024-08-04 23:45:55 -04:00
|
|
|
InlineCheck = Class.new(described_class) { self.inline = true }
|
2024-03-28 02:00:47 -04:00
|
|
|
PluginCheck = Class.new(described_class)
|
2024-08-20 10:42:06 -04:00
|
|
|
DisabledCheck = Class.new(described_class) { self.enabled = false }
|
2024-05-22 21:29:08 -04:00
|
|
|
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",
|
2024-08-20 10:42:06 -04:00
|
|
|
[ScheduledCheck, RealtimeCheck, InlineCheck, DisabledCheck, FailingCheck, PassingCheck],
|
2024-05-22 21:29:08 -04:00
|
|
|
&example
|
|
|
|
)
|
2024-02-22 22:20:32 -05:00
|
|
|
|
|
|
|
Object.send(:remove_const, ScheduledCheck.name)
|
2024-03-13 22:55:01 -04:00
|
|
|
Object.send(:remove_const, RealtimeCheck.name)
|
2024-08-04 23:45:55 -04:00
|
|
|
Object.send(:remove_const, InlineCheck.name)
|
2024-08-20 10:42:06 -04:00
|
|
|
Object.send(:remove_const, DisabledCheck.name)
|
2024-03-28 02:00:47 -04:00
|
|
|
Object.send(:remove_const, PluginCheck.name)
|
2024-05-22 21:29:08 -04:00
|
|
|
Object.send(:remove_const, FailingCheck.name)
|
|
|
|
Object.send(:remove_const, PassingCheck.name)
|
2024-02-22 22:20:32 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
let(:scheduled_check) { ScheduledCheck }
|
2024-03-13 22:55:01 -04:00
|
|
|
let(:realtime_check) { RealtimeCheck }
|
2024-08-04 23:45:55 -04:00
|
|
|
let(:inline_check) { InlineCheck }
|
2024-08-20 10:42:06 -04:00
|
|
|
let(:enabled_check) { RealtimeCheck }
|
|
|
|
let(:disabled_check) { DisabledCheck }
|
2024-05-22 21:29:08 -04:00
|
|
|
let(:plugin_check) { PluginCheck }
|
|
|
|
let(:failing_check) { FailingCheck }
|
|
|
|
let(:passing_check) { PassingCheck }
|
2024-02-22 22:20:32 -05:00
|
|
|
|
|
|
|
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
|
2024-08-04 23:45:55 -04:00
|
|
|
it { expect(described_class.checks).to include(scheduled_check, realtime_check, inline_check) }
|
2024-02-22 22:20:32 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
describe ".scheduled" do
|
2024-02-25 23:08:12 -05:00
|
|
|
it { expect(described_class.scheduled).to include(scheduled_check) }
|
2024-03-13 22:55:01 -04:00
|
|
|
it { expect(described_class.scheduled).not_to include(realtime_check) }
|
2024-08-04 23:45:55 -04:00
|
|
|
it { expect(described_class.scheduled).not_to include(inline_check) }
|
2024-03-13 22:55:01 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
describe ".realtime" do
|
|
|
|
it { expect(described_class.realtime).to include(realtime_check) }
|
|
|
|
it { expect(described_class.realtime).not_to include(scheduled_check) }
|
2024-08-04 23:45:55 -04:00
|
|
|
it { expect(described_class.realtime).not_to include(inline_check) }
|
2024-02-22 22:20:32 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
describe ".scheduled?" do
|
|
|
|
it { expect(scheduled_check).to be_scheduled }
|
2024-03-13 22:55:01 -04:00
|
|
|
it { expect(realtime_check).to_not be_scheduled }
|
2024-08-04 23:45:55 -04:00
|
|
|
it { expect(inline_check).to_not be_scheduled }
|
2024-03-13 22:55:01 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
describe ".realtime?" do
|
|
|
|
it { expect(realtime_check).to be_realtime }
|
|
|
|
it { expect(scheduled_check).to_not be_realtime }
|
2024-08-04 23:45:55 -04:00
|
|
|
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 }
|
2024-02-22 22:20:32 -05:00
|
|
|
end
|
2024-03-28 02:00:47 -04:00
|
|
|
|
2024-08-20 10:42:06 -04:00
|
|
|
describe ".enabled?" do
|
|
|
|
it { expect(enabled_check).to be_enabled }
|
|
|
|
it { expect(disabled_check).not_to be_enabled }
|
|
|
|
end
|
|
|
|
|
2024-03-28 02:00:47 -04:00
|
|
|
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 }
|
|
|
|
|
2024-05-22 21:29:08 -04:00
|
|
|
it { expect(described_class.checks).to include(plugin_check) }
|
2024-03-28 02:00:47 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
context "when the plugin is disabled" do
|
|
|
|
let(:enabled) { false }
|
|
|
|
|
2024-05-22 21:29:08 -04:00
|
|
|
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) }
|
2024-03-28 02:00:47 -04:00
|
|
|
end
|
|
|
|
end
|
2024-02-22 22:20:32 -05:00
|
|
|
end
|