add initial solution (made with copilot)

This commit is contained in:
2026-07-13 12:05:43 +02:00
commit 250ee892dc
25 changed files with 860 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
<?php
use PHPUnit\Framework\TestCase;
use Core\RateLimiter\FileRateLimiter;
final class RateLimiterTest extends TestCase {
private $dir;
protected function setUp(): void {
$this->dir = sys_get_temp_dir() . '/api_rate_limit_test';
if (is_dir($this->dir)) {
array_map('unlink', glob("$this->dir/*"));
} else {
mkdir($this->dir, 0700, true);
}
}
public function testAllowsRequestsUnderLimit(): void {
$limiter = new FileRateLimiter($this->dir);
$key = 'test-client';
$allowed = 0;
for ($i = 0; $i < 5; $i++) {
if ($limiter->allow($key)) $allowed++;
}
$this->assertGreaterThan(0, $allowed);
}
public function testBlocksWhenExceeded(): void {
$limiter = new FileRateLimiter($this->dir);
$key = 'test-client-2';
$requests = (int) \Core\Config::get('rate_limit_requests', 5);
for ($i = 0; $i < $requests; $i++) {
$this->assertTrue($limiter->allow($key));
}
$this->assertFalse($limiter->allow($key));
}
}
+13
View File
@@ -0,0 +1,13 @@
<?php
use PHPUnit\Framework\TestCase;
use Core\RateLimiter\RateLimiterInterface;
use Core\RateLimiter\InMemoryRateLimiter;
final class SomeControllerTest extends TestCase {
public function testRateLimitedPath() {
$limiter = new InMemoryRateLimiter(2, 60);
$this->assertTrue($limiter->allow('client1'));
$this->assertTrue($limiter->allow('client1'));
$this->assertFalse($limiter->allow('client1'));
}
}