0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-06 13:08:40 +08:00
discourse/spec/jobs/cleanup_problem_check_trackers_spec.rb

53 lines
1.8 KiB
Ruby
Vendored

# frozen_string_literal: true
RSpec.describe Jobs::CleanupProblemCheckTrackers do
around do |example|
ProblemCheck::MultiTargetCheck =
Class.new(ProblemCheck) do
self.perform_every = 30.minutes
self.targets = -> { %w[foo bar] }
end
stub_const(ProblemCheck, "CORE_PROBLEM_CHECKS", [ProblemCheck::MultiTargetCheck], &example)
ProblemCheck.send(:remove_const, "MultiTargetCheck")
end
context "when a tracker has an outdated target" do
before do
ProblemCheckTracker.create!(identifier: "multi_target_check", target: "foo").problem!
ProblemCheckTracker.create!(identifier: "multi_target_check", target: "bar").problem!
ProblemCheckTracker.create!(identifier: "multi_target_check", target: "baz").problem!
end
it "deletes trackers with non-existing targets together with any admin notices" do
expect { described_class.new.execute([]) }.to change {
ProblemCheckTracker.pluck(:target)
}.from(contain_exactly("foo", "bar", "baz")).to(contain_exactly("foo", "bar")).and change {
AdminNotice.count
}.by(-1)
end
end
context "when a tracker belongs to a check that no longer exists" do
before do
ProblemCheckTracker.create!(identifier: "removed_check")
AdminNotice.create!(
identifier: "removed_check",
subject: :problem,
priority: :low,
details: {
target: ProblemCheck::NO_TARGET,
},
)
end
it "deletes the orphaned tracker together with any admin notices" do
expect { described_class.new.execute([]) }.to change {
ProblemCheckTracker.where(identifier: "removed_check").count
}.from(1).to(0).and change {
AdminNotice.problem.where(identifier: "removed_check").count
}.from(1).to(0)
end
end
end