21
1
Fork 0
mirror of https://github.com/Evolix/chexpire.git synced 2024-04-27 06:20:50 +02:00
chexpire/test/services/check_processor_test.rb
2018-08-29 18:27:31 +02:00

150 lines
3.8 KiB
Ruby

# Copyright (C) 2018 Colin Darie <colin@darie.eu>, 2018 Evolix <info@evolix.fr>
# License: GNU AGPL-3+ (see full text in LICENSE file)
require "test_helper"
class CheckDummyProcessor
include CheckProcessor
def scope
base_scope
end
def configuration_key
"checks_dummy"
end
def resolvers
%i[
resolve_expire_short_term
resolve_expire_long_term
]
end
end
class CheckProcessorTest < ActiveSupport::TestCase
setup do
@processor = CheckDummyProcessor.new
end
test "resolve_last_run_failed includes already and never succeeded" do
c1 = create(:check, :last_runs_failed)
c2 = create(:check, :last_run_succeed)
c3 = create(:check, last_run_at: 4.days.ago, last_success_at: nil)
checks = @processor.resolve_last_run_failed
assert_includes checks, c1
assert_not_includes checks, c2
assert_includes checks, c3
end
test "resolve_unknown_expiry" do
c1 = create(:check, :nil_dates)
c2 = create(:check)
checks = @processor.resolve_unknown_expiry
assert_includes checks, c1
assert_not_includes checks, c2
end
test "resolve_expire_short_term" do
c1 = create(:check, :expires_next_week)
c2 = create(:check, :expires_next_year)
checks = @processor.resolve_expire_short_term
assert_includes checks, c1
assert_not_includes checks, c2
end
test "resolve_expire_long_term returns checks with respect of frequency" do
c1 = create(:check, domain_expires_at: 380.days.from_now)
c2 = create(:check, domain_expires_at: 390.days.from_now)
c3 = create(:check, domain_expires_at: 391.days.from_now)
c4 = create(:check, domain_expires_at: 20.days.from_now)
checks = @processor.resolve_expire_long_term
assert_includes checks, c1
assert_includes checks, c2
assert_not_includes checks, c3
assert_not_includes checks, c4
end
test "resolve_all include all eligible checks" do
create(:check, :expires_next_week)
create(:check, :expires_next_week, last_run_at: 4.hours.ago)
create(:check, :last_runs_failed)
assert_equal @processor.send(:scope), @processor.resolve_all
end
test "resolvers does not include checks recently executed" do
c1 = create(:check, :expires_next_week)
c2 = create(:check, :expires_next_week, last_run_at: 4.hours.ago)
checks = @processor.resolve_expire_short_term
assert_includes checks, c1
assert_not_includes checks, c2
end
test "resolvers include checks never executed" do
c1 = create(:check, :expires_next_week, last_run_at: 4.days.ago)
checks = @processor.resolve_expire_short_term
assert_includes checks, c1
end
test "resolvers does not include inactive checks" do
c1 = create(:check, :expires_next_week)
c2 = create(:check, :expires_next_week, :inactive)
checks = @processor.resolve_expire_short_term
assert_includes checks, c1
assert_not_includes checks, c2
end
test "resolvers does not include manual checks" do
c1 = create(:check, :expires_next_week)
c2 = create(:check, :expires_next_week, domain: "fff.wxyz")
checks = @processor.resolve_expire_short_term
assert_includes checks, c1
assert_not_includes checks, c2
end
test "#sync_dates respects the interval configuration between sends" do
create_list(:check, 3, :expires_next_week)
configuration = Minitest::Mock.new
2.times do configuration.expect(:long_term_interval, 300) end
configuration.expect(:long_term_frequency, 4)
3.times do
configuration.expect(:interval, 0.000001)
end
processor = CheckDummyProcessor.new(configuration)
mock = Minitest::Mock.new
assert_stub = lambda { |actual_time|
assert_equal 0.000001, actual_time
mock
}
processor.stub :process, nil do
processor.stub :sleep, assert_stub do
processor.sync_dates
end
end
configuration.verify
mock.verify
end
end