Extract ResponseRenderer dependency from ApplicationHandler

Uses DI instead.

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
Maurício Meneghini Fauth 2026-02-13 11:15:00 -03:00
parent 55d6f9acb4
commit e21bea7650
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
5 changed files with 14 additions and 16 deletions

View File

@ -73,7 +73,10 @@ use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
return [
Advisor::class => ['class' => Advisor::class, 'arguments' => [DatabaseInterface::class, ExpressionLanguage::class]],
Application::class => ['class' => Application::class, 'arguments' => [ResponseFactory::class]],
Application::class => [
'class' => Application::class,
'arguments' => [ResponseFactory::class, ResponseRenderer::class],
],
BrowseForeigners::class => [
'class' => BrowseForeigners::class,
'arguments' => [Template::class, Config::class, ThemeManager::class],

View File

@ -55,7 +55,7 @@ use function sprintf;
readonly class Application
{
public function __construct(private ResponseFactory $responseFactory)
public function __construct(private ResponseFactory $responseFactory, private ResponseRenderer $responseRenderer)
{
}
@ -67,7 +67,7 @@ readonly class Application
public function run(bool $isSetupPage = false): void
{
$container = ContainerBuilder::getContainer();
$requestHandler = new QueueRequestHandler($container, new ApplicationHandler($this));
$requestHandler = new QueueRequestHandler($container, new ApplicationHandler($this, $this->responseRenderer));
$requestHandler->add(ErrorHandling::class);
$requestHandler->add(OutputBuffering::class);
$requestHandler->add(PhpExtensionsChecking::class);

View File

@ -14,9 +14,9 @@ use Psr\Http\Server\RequestHandlerInterface;
use function assert;
final class ApplicationHandler implements RequestHandlerInterface
final readonly class ApplicationHandler implements RequestHandlerInterface
{
public function __construct(private readonly Application $application)
public function __construct(private Application $application, private ResponseRenderer $responseRenderer)
{
}
@ -26,7 +26,7 @@ final class ApplicationHandler implements RequestHandlerInterface
try {
return $this->application->handle($request);
} catch (ExitException) {
return ResponseRenderer::getInstance()->response();
return $this->responseRenderer->response();
}
}
}

View File

@ -9,6 +9,7 @@ use PhpMyAdmin\Config;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Exceptions\ConfigException;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Template;
use PHPUnit\Framework\Attributes\BackupStaticProperties;
use PHPUnit\Framework\Attributes\CoversClass;
@ -18,6 +19,7 @@ final class ApplicationTest extends AbstractTestCase
{
public function testInit(): void
{
ContainerBuilder::$container = null;
$application = ContainerBuilder::getContainer()->get(Application::class);
self::assertSame($application, Application::init());
}
@ -39,7 +41,7 @@ final class ApplicationTest extends AbstractTestCase
'error_message' => 'Failed to load phpMyAdmin configuration.',
]);
$application = new Application(ResponseFactory::create());
$application = new Application(ResponseFactory::create(), self::createStub(ResponseRenderer::class));
$application->run();
$output = $this->getActualOutputForAssertion();

View File

@ -13,7 +13,6 @@ use PhpMyAdmin\ResponseRenderer;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\ResponseInterface;
use ReflectionProperty;
#[CoversClass(ApplicationHandler::class)]
final class ApplicationHandlerTest extends TestCase
@ -22,16 +21,13 @@ final class ApplicationHandlerTest extends TestCase
{
$responseRendererMock = self::createMock(ResponseRenderer::class);
$responseRendererMock->expects(self::never())->method('response');
$reflectionProperty = new ReflectionProperty(ResponseRenderer::class, 'instance');
$reflectionProperty->setValue(null, $responseRendererMock);
$request = self::createStub(ServerRequest::class);
$responseStub = new Response(self::createStub(ResponseInterface::class));
$appMock = self::createMock(Application::class);
$appMock->expects(self::once())->method('handle')->with($request)->willReturn($responseStub);
$handler = new ApplicationHandler($appMock);
$handler = new ApplicationHandler($appMock, $responseRendererMock);
$response = $handler->handle($request);
self::assertSame($response, $responseStub);
$reflectionProperty->setValue(null, null);
}
public function testHandleThrowsExit(): void
@ -39,14 +35,11 @@ final class ApplicationHandlerTest extends TestCase
$responseStub = new Response(self::createStub(ResponseInterface::class));
$responseRendererMock = self::createMock(ResponseRenderer::class);
$responseRendererMock->expects(self::once())->method('response')->willReturn($responseStub);
$reflectionProperty = new ReflectionProperty(ResponseRenderer::class, 'instance');
$reflectionProperty->setValue(null, $responseRendererMock);
$request = self::createStub(ServerRequest::class);
$appMock = self::createMock(Application::class);
$appMock->expects(self::once())->method('handle')->with($request)->willThrowException(new ExitException());
$handler = new ApplicationHandler($appMock);
$handler = new ApplicationHandler($appMock, $responseRendererMock);
$response = $handler->handle($request);
self::assertSame($response, $responseStub);
$reflectionProperty->setValue(null, null);
}
}