<?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'));
	}
}
