Fixed: basePath self→static binding, namespace detection, event wiring,
SQLite cache, file cache driver. All Mod Boot classes converted to
$listens pattern for lifecycle event discovery.
Working endpoints:
- /v1/explorer/info — live chain height, difficulty, aliases
- /v1/explorer/stats — formatted chain statistics
- /v1/names/directory — alias directory grouped by type
- /v1/names/available/{name} — name availability check
- /v1/names/lookup/{name} — name details
Co-Authored-By: Charon <charon@lethean.io>
93 lines
2.6 KiB
PHP
93 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Core\Tests\Unit;
|
|
|
|
use Core\Front\Api\ApiVersionService;
|
|
use Core\Front\Api\Middleware\ApiSunset;
|
|
use Core\Front\Api\Middleware\ApiVersion;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* Tests for API Versioning components.
|
|
*
|
|
* @covers \Core\Front\Api\Middleware\ApiVersion
|
|
* @covers \Core\Front\Api\Middleware\ApiSunset
|
|
* @covers \Core\Front\Api\ApiVersionService
|
|
*/
|
|
class ApiVersionTest extends TestCase
|
|
{
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
// Mock config helper
|
|
if (! function_exists('config')) {
|
|
// This will be overridden when running in Laravel context
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Helper to create middleware with mocked config.
|
|
*/
|
|
protected function createMiddleware(array $config = []): ApiVersion
|
|
{
|
|
$defaults = [
|
|
'default' => 1,
|
|
'current' => 2,
|
|
'supported' => [1, 2],
|
|
'deprecated' => [1],
|
|
'sunset' => [1 => '2025-12-31'],
|
|
];
|
|
|
|
$merged = array_merge($defaults, $config);
|
|
|
|
// We need to run these tests in Laravel context
|
|
// This file documents the expected behavior
|
|
return new ApiVersion;
|
|
}
|
|
}
|
|
|
|
/*
|
|
* API Version Test Documentation
|
|
*
|
|
* These tests require a Laravel application context to run.
|
|
* Run them using: php artisan test --filter=ApiVersion
|
|
*
|
|
* Expected behaviors to test:
|
|
*
|
|
* ApiVersion Middleware:
|
|
* - extracts version from URL path /api/v1/
|
|
* - extracts version from URL path /v2/ without api prefix
|
|
* - extracts version from Accept-Version header
|
|
* - extracts version from Accept-Version header without v prefix
|
|
* - extracts version from Accept header vendor type
|
|
* - uses default version when none specified
|
|
* - prefers URL path over headers
|
|
* - returns 400 for unsupported version
|
|
* - returns 400 when version is below minimum required
|
|
* - adds X-API-Version header to response
|
|
* - adds deprecation headers for deprecated versions
|
|
* - does not add deprecation headers for current version
|
|
*
|
|
* ApiSunset Middleware:
|
|
* - adds Sunset header with date
|
|
* - adds Link header when replacement provided
|
|
* - formats date to RFC7231 format
|
|
*
|
|
* ApiVersionService:
|
|
* - returns current version from request
|
|
* - returns version string from request
|
|
* - checks specific version
|
|
* - provides version shortcuts (isV1, isV2)
|
|
* - checks minimum version
|
|
* - checks if version is deprecated
|
|
* - returns configuration values
|
|
* - checks if version is supported
|
|
* - negotiates response based on version
|
|
* - falls back to lower version in negotiation
|
|
* - transforms data based on version
|
|
*/
|