originalAppEnv = $_ENV['APP_ENV'] ?? null; $_ENV['APP_ENV'] = 'production'; $this->twig = $this->createMock(Twig::class); $logger = $this->createStub(LoggerInterface::class); $this->container = $this->createMock(ContainerInterface::class); $this->container ->method('get') ->willReturnMap([ [LoggerInterface::class, $logger], [Twig::class, $this->twig], ]); } protected function tearDown(): void { if ($this->originalAppEnv === null) { unset($_ENV['APP_ENV']); } else { $_ENV['APP_ENV'] = $this->originalAppEnv; } } public function testConfigureRegistersHandlerThatRenders404Responses(): void { $app = AppFactory::create(); $this->twig ->expects(self::once()) ->method('render') ->willReturnCallback(function ($response, string $template, array $data) { self::assertSame('@Kernel/error.twig', $template); self::assertSame(404, $data['status']); self::assertSame('La page demandée est introuvable.', $data['message']); $response->getBody()->write('configured 404'); return $response; }); (new ErrorHandlerConfigurator())->configure($app, $this->container); $request = (new ServerRequestFactory())->createServerRequest('GET', '/missing'); $response = $app->handle($request); self::assertSame(404, $response->getStatusCode()); self::assertStringContainsString('configured 404', (string) $response->getBody()); } public function testConfigureRegistersHandlerThatRenders503Responses(): void { $app = AppFactory::create(); $app->get('/db-check', function (): never { throw new DatabaseNotProvisionedException('Provisionnement requis'); }); $this->twig ->expects(self::once()) ->method('render') ->willReturnCallback(function ($response, string $template, array $data) { self::assertSame('@Kernel/error.twig', $template); self::assertSame(503, $data['status']); self::assertSame('Provisionnement requis', $data['message']); $response->getBody()->write('configured 503'); return $response; }); (new ErrorHandlerConfigurator())->configure($app, $this->container); $request = (new ServerRequestFactory())->createServerRequest('GET', '/db-check'); $response = $app->handle($request); self::assertSame(503, $response->getStatusCode()); self::assertStringContainsString('configured 503', (string) $response->getBody()); } }