From 43f54d45787ee54d97cb815fe8cd6316385fbae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sat, 14 Feb 2026 15:30:59 -0300 Subject: [PATCH] Extract ResponseRenderer dependency from LogoutController MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- app/services_controllers.php | 2 +- src/Controllers/LogoutController.php | 13 +++++++------ tests/unit/Controllers/LogoutControllerTest.php | 13 +++---------- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/app/services_controllers.php b/app/services_controllers.php index 6b633eee73..b3c851ba04 100644 --- a/app/services_controllers.php +++ b/app/services_controllers.php @@ -451,7 +451,7 @@ return [ ], LogoutController::class => [ 'class' => LogoutController::class, - 'arguments' => [AuthenticationPluginFactory::class], + 'arguments' => [AuthenticationPluginFactory::class, ResponseRenderer::class], ], NavigationController::class => [ 'class' => NavigationController::class, diff --git a/src/Controllers/LogoutController.php b/src/Controllers/LogoutController.php index 4e65054e0e..72a89c8a59 100644 --- a/src/Controllers/LogoutController.php +++ b/src/Controllers/LogoutController.php @@ -11,19 +11,20 @@ use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Routing\Route; #[Route('/logout', ['GET', 'POST'])] -final class LogoutController implements InvocableController +final readonly class LogoutController implements InvocableController { - public function __construct(private readonly AuthenticationPluginFactory $authPluginFactory) - { + public function __construct( + private AuthenticationPluginFactory $authPluginFactory, + private ResponseRenderer $responseRenderer, + ) { } public function __invoke(ServerRequest $request): Response { - $responseRenderer = ResponseRenderer::getInstance(); if (! $request->isPost()) { - $responseRenderer->redirect('./index.php?route=/'); + $this->responseRenderer->redirect('./index.php?route=/'); - return $responseRenderer->response(); + return $this->responseRenderer->response(); } $authPlugin = $this->authPluginFactory->create(); diff --git a/tests/unit/Controllers/LogoutControllerTest.php b/tests/unit/Controllers/LogoutControllerTest.php index 59a2092a28..1b9c0ed7c2 100644 --- a/tests/unit/Controllers/LogoutControllerTest.php +++ b/tests/unit/Controllers/LogoutControllerTest.php @@ -9,20 +9,15 @@ use PhpMyAdmin\Http\Factory\ResponseFactory; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Plugins\AuthenticationPlugin; use PhpMyAdmin\Plugins\AuthenticationPluginFactory; -use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Tests\AbstractTestCase; -use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseRendererStub; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; use PHPUnit\Framework\Attributes\CoversClass; -use ReflectionProperty; #[CoversClass(LogoutController::class)] -class LogoutControllerTest extends AbstractTestCase +final class LogoutControllerTest extends AbstractTestCase { public function testValidLogout(): void { - $responseStub = new ResponseRendererStub(); - (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, $responseStub); - $request = self::createStub(ServerRequest::class); $request->method('isPost')->willReturn(true); @@ -34,10 +29,8 @@ class LogoutControllerTest extends AbstractTestCase $factory = self::createStub(AuthenticationPluginFactory::class); $factory->method('create')->willReturn($authPlugin); - $response = (new LogoutController($factory))($request); + $response = (new LogoutController($factory, new ResponseRenderer()))($request); self::assertSame($expectedResponse, $response); - - (new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null); } }