Enable Discovery debug logging for production troubleshooting

- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
This commit is contained in:
2025-08-11 20:13:26 +02:00
parent 59fd3dd3b1
commit 55a330b223
3683 changed files with 2956207 additions and 16948 deletions

View File

@@ -0,0 +1,122 @@
<?php
declare(strict_types=1);
use App\Framework\Core\DynamicRoute;
use App\Framework\Core\StaticRoute;
use App\Framework\Http\HttpRequest;
use App\Framework\Http\Method;
use App\Framework\Http\Request;
use App\Framework\Router\CompiledRoutes;
use App\Framework\Router\HttpRouter;
use App\Framework\Router\NoRouteMatch;
use App\Framework\Router\RouteContext;
use App\Framework\Router\RouteMatchSuccess;
beforeEach(function () {
// Create test routes
$this->staticRoutes = [
'/home' => new StaticRoute(
controller: 'HomeController',
action: 'index',
parameters: [],
name: 'home',
path: '/home'
),
'/api/status' => new StaticRoute(
controller: 'StatusController',
action: 'check',
parameters: [],
name: 'status',
path: '/api/status'
),
];
// Create properly structured static routes for CompiledRoutes
$staticRoutes = [
'GET' => [
'/home' => $this->staticRoutes['/home'],
'/api/status' => $this->staticRoutes['/api/status'],
],
];
$this->compiledRoutes = new CompiledRoutes(
staticRoutes: $staticRoutes,
dynamicPatterns: [],
namedRoutes: []
);
$this->router = new HttpRouter($this->compiledRoutes);
// Create test request
$this->request = new HttpRequest(
method: Method::GET,
path: '/home'
);
});
it('matches static route successfully', function () {
$context = $this->router->match($this->request);
expect($context)->toBeInstanceOf(RouteContext::class);
expect($context->match)->toBeInstanceOf(RouteMatchSuccess::class);
expect($context->method)->toBe(Method::GET);
expect($context->path)->toBe('/home');
$matchedRoute = $context->match->route;
expect($matchedRoute)->toBeInstanceOf(StaticRoute::class);
expect($matchedRoute->path)->toBe('/home');
expect($matchedRoute->controller)->toBe('HomeController');
expect($matchedRoute->action)->toBe('index');
});
it('matches different static route', function () {
$request = new HttpRequest(method: Method::GET, path: '/api/status');
$context = $this->router->match($request);
expect($context->match)->toBeInstanceOf(RouteMatchSuccess::class);
$matchedRoute = $context->match->route;
expect($matchedRoute->path)->toBe('/api/status');
expect($matchedRoute->controller)->toBe('StatusController');
expect($matchedRoute->action)->toBe('check');
});
it('returns NoRouteMatch for non-existent route', function () {
$request = new HttpRequest(method: Method::GET, path: '/non-existent');
$context = $this->router->match($request);
expect($context->match)->toBeInstanceOf(NoRouteMatch::class);
expect($context->path)->toBe('/non-existent');
});
it('creates correct route context', function () {
$context = $this->router->match($this->request);
expect($context->method)->toBe(Method::GET);
expect($context->path)->toBe('/home');
expect($context->match)->toBeInstanceOf(RouteMatchSuccess::class);
});
it('handles different HTTP methods', function () {
$request = new HttpRequest(method: Method::POST, path: '/home');
$context = $this->router->match($request);
// POST method should not match GET route
expect($context->match)->toBeInstanceOf(NoRouteMatch::class);
});
it('router has optimized routes', function () {
expect($this->router->optimizedRoutes)->toBe($this->compiledRoutes);
});
it('static routes take precedence over dynamic routes', function () {
// This test verifies that static routes are checked first
$context = $this->router->match($this->request);
expect($context->match)->toBeInstanceOf(RouteMatchSuccess::class);
// If this was a dynamic route match, it would be a DynamicRoute
expect($context->match->route)->toBeInstanceOf(StaticRoute::class);
});

View File

@@ -0,0 +1,86 @@
<?php
declare(strict_types=1);
use App\Framework\DI\DefaultContainer;
use App\Framework\Http\ControllerRequestFactory;
use App\Framework\Logging\DefaultLogger;
use App\Framework\Reflection\ReflectionProvider;
use App\Framework\Router\ParameterProcessor;
describe('ParameterProcessor Debug', function () {
test('debug parameter processing for filename parameter', function () {
// Mock dependencies
$container = $this->createMock(DefaultContainer::class);
$requestFactory = $this->createMock(ControllerRequestFactory::class);
$logger = $this->createMock(DefaultLogger::class);
$reflectionProvider = $this->createMock(ReflectionProvider::class);
$processor = new ParameterProcessor($container, $requestFactory, $logger, $reflectionProvider);
// Simulate the parameter data that would come from UnifiedRouteVisitor
$params = [
[
'name' => 'filename',
'type' => 'string',
'isBuiltin' => true,
'hasDefault' => false,
'default' => null,
'isOptional' => false,
'attributes' => [],
],
];
// Simulate the query params that would come from DynamicRoute->paramValues
$queryParams = [
'filename' => 'test-image.jpg',
];
// Erwartung: filename sollte 'test-image.jpg' sein, nicht null
$result = $processor->prepareParameters($params, $queryParams);
expect($result)->toHaveCount(1);
expect($result[0])->toBe('test-image.jpg');
expect($result[0])->not->toBeNull();
});
test('debug parameter processing when parameter name missing from queryParams', function () {
$container = $this->createMock(DefaultContainer::class);
$requestFactory = $this->createMock(ControllerRequestFactory::class);
$logger = $this->createMock(DefaultLogger::class);
$reflectionProvider = $this->createMock(ReflectionProvider::class);
$processor = new ParameterProcessor($container, $requestFactory, $logger, $reflectionProvider);
$params = [
[
'name' => 'filename',
'type' => 'string',
'isBuiltin' => true,
'hasDefault' => false,
'default' => null,
'isOptional' => false,
'attributes' => [],
],
];
// Empty queryParams - das ist wahrscheinlich unser Problem
$queryParams = [];
// Das wird null zurückgeben - das ist der Bug!
$result = $processor->prepareParameters($params, $queryParams);
expect($result)->toHaveCount(1);
expect($result[0])->toBeNull(); // Das ist der aktuelle Bug
// Debug: Show what's happening
error_log('Parameter processing with empty queryParams - result: ' . json_encode($result));
});
test('debug how DynamicRoute paramValues should be populated', function () {
// Test wie paramValues in DynamicRoute gesetzt werden sollten
// Das sollte von HttpRouter oder RouteDispatcher gemacht werden
expect(true)->toBeTrue(); // Placeholder test
});
});