tests: minitest + rack-test suite, bin/test with ephemeral Postgres

This commit is contained in:
Sergei Poljanski 2026-07-02 17:32:14 +04:00
commit 43bed98329
Signed by: asxpi
GPG key ID: 4F8851660FA4121B
13 changed files with 456 additions and 2 deletions

35
test/rate_limit_test.rb Normal file
View file

@ -0,0 +1,35 @@
require_relative 'test_helper'
class RateLimitTest < Minitest::Test
def test_allows_up_to_limit_then_denies
rl = RateLimit.new(limit: 5, window: 3600)
assert (1..5).all? { rl.allow?('1.2.3.4') }
refute rl.allow?('1.2.3.4')
end
def test_keys_are_independent
rl = RateLimit.new(limit: 1, window: 3600)
assert rl.allow?('a')
refute rl.allow?('a')
assert rl.allow?('b')
end
def test_sweep_removes_stale_keys
rl = RateLimit.new(limit: 5, window: 3600)
hits = rl.instance_variable_get(:@hits)
old = Time.now.to_i - 7200
50.times { |i| hits["stale-#{i}"] << old }
rl.sweep!
assert_empty hits.keys.grep(/\Astale-/)
end
def test_allow_prunes_opportunistically
rl = RateLimit.new(limit: 5, window: 3600)
hits = rl.instance_variable_get(:@hits)
old = Time.now.to_i - 7200
50.times { |i| hits["stale-#{i}"] << old }
RateLimit::SWEEP_EVERY.times { rl.allow?('fresh') }
assert_empty hits.keys.grep(/\Astale-/)
assert hits.key?('fresh')
end
end