Extract ResponseRenderer dependency from LogoutController

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
Maurício Meneghini Fauth 2026-02-14 15:30:59 -03:00
parent 396d5f7b99
commit 43f54d4578
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
3 changed files with 11 additions and 17 deletions

View File

@ -451,7 +451,7 @@ return [
], ],
LogoutController::class => [ LogoutController::class => [
'class' => LogoutController::class, 'class' => LogoutController::class,
'arguments' => [AuthenticationPluginFactory::class], 'arguments' => [AuthenticationPluginFactory::class, ResponseRenderer::class],
], ],
NavigationController::class => [ NavigationController::class => [
'class' => NavigationController::class, 'class' => NavigationController::class,

View File

@ -11,19 +11,20 @@ use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Routing\Route; use PhpMyAdmin\Routing\Route;
#[Route('/logout', ['GET', 'POST'])] #[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 public function __invoke(ServerRequest $request): Response
{ {
$responseRenderer = ResponseRenderer::getInstance();
if (! $request->isPost()) { 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(); $authPlugin = $this->authPluginFactory->create();

View File

@ -9,20 +9,15 @@ use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Plugins\AuthenticationPlugin; use PhpMyAdmin\Plugins\AuthenticationPlugin;
use PhpMyAdmin\Plugins\AuthenticationPluginFactory; use PhpMyAdmin\Plugins\AuthenticationPluginFactory;
use PhpMyAdmin\ResponseRenderer;
use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer as ResponseRendererStub; use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use ReflectionProperty;
#[CoversClass(LogoutController::class)] #[CoversClass(LogoutController::class)]
class LogoutControllerTest extends AbstractTestCase final class LogoutControllerTest extends AbstractTestCase
{ {
public function testValidLogout(): void public function testValidLogout(): void
{ {
$responseStub = new ResponseRendererStub();
(new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, $responseStub);
$request = self::createStub(ServerRequest::class); $request = self::createStub(ServerRequest::class);
$request->method('isPost')->willReturn(true); $request->method('isPost')->willReturn(true);
@ -34,10 +29,8 @@ class LogoutControllerTest extends AbstractTestCase
$factory = self::createStub(AuthenticationPluginFactory::class); $factory = self::createStub(AuthenticationPluginFactory::class);
$factory->method('create')->willReturn($authPlugin); $factory->method('create')->willReturn($authPlugin);
$response = (new LogoutController($factory))($request); $response = (new LogoutController($factory, new ResponseRenderer()))($request);
self::assertSame($expectedResponse, $response); self::assertSame($expectedResponse, $response);
(new ReflectionProperty(ResponseRenderer::class, 'instance'))->setValue(null, null);
} }
} }