Files
pw-generator/tests/OpenApiGeneratorTest.php
T

37 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
use App\Api\OpenApiGenerator;
use PHPUnit\Framework\TestCase;
final class OpenApiGeneratorTest extends TestCase
{
public function testGenerateIncludesPublicApiRoutes(): void
{
$spec = OpenApiGenerator::generate('http://localhost:8080');
$this->assertSame('3.0.3', $spec['openapi']);
$this->assertArrayHasKey('/api/v1/passwords', $spec['paths']);
$this->assertArrayHasKey('/api/v1/passwords/generate', $spec['paths']);
$this->assertArrayHasKey('/api/v1/health', $spec['paths']);
$this->assertArrayHasKey('/api/v1/locales/{lang}', $spec['paths']);
$this->assertSame('http://localhost:8080', $spec['servers'][0]['url']);
$this->assertSame('boolean', $spec['paths']['/api/v1/passwords']['get']['responses']['200']['content']['application/json']['schema']['properties']['success']['type']);
$this->assertArrayHasKey('types', $spec['paths']['/api/v1/passwords']['get']['responses']['200']['content']['application/json']['schema']['properties']['data']['properties']);
$this->assertSame('#/components/schemas/PasswordGenerationSuccess', $spec['paths']['/api/v1/passwords/generate']['post']['responses']['200']['content']['application/json']['schema']['$ref']);
$passwordResponseData = $spec['components']['schemas']['PasswordGenerationSuccess']['properties']['data']['properties'];
$this->assertArrayHasKey('security_assessment', $passwordResponseData);
$this->assertArrayHasKey('raw_technical_details', $passwordResponseData);
$this->assertArrayHasKey('entropy_breakdown', $passwordResponseData['raw_technical_details']['properties']);
$localeEnum = $spec['paths']['/api/v1/locales/{lang}']['get']['parameters'][0]['schema']['enum'];
$this->assertContains('ja', $localeEnum);
$this->assertContains('de_CH', $localeEnum);
$this->assertNotContains('js', $localeEnum);
$this->assertNotContains('ch', $localeEnum);
}
}