<?php
use PHPUnit\Framework\TestCase;
use SHServ\Tools\RateLimiter;
class RateLimiterTest extends TestCase {
public function test_allows_requests_within_limit(): void {
$limiter = new RateLimiter(5, 60);
for ($i = 0; $i < 5; $i++) {
$this -> assertTrue($limiter -> check('ip1'));
}
}
public function test_blocks_excess_requests(): void {
$limiter = new RateLimiter(3, 60);
for ($i = 0; $i < 3; $i++) {
$limiter -> check('ip2');
}
$this -> assertFalse($limiter -> check('ip2'));
}
public function test_resets_after_window(): void {
$limiter = new RateLimiter(2, 1);
$this -> assertTrue($limiter -> check('ip3'));
$this -> assertTrue($limiter -> check('ip3'));
$this -> assertFalse($limiter -> check('ip3'));
sleep(2);
$this -> assertTrue($limiter -> check('ip3'));
}
public function test_different_keys_are_independent(): void {
$limiter = new RateLimiter(1, 60);
$this -> assertTrue($limiter -> check('ip_a'));
$this -> assertTrue($limiter -> check('ip_b'));
}
}