diff --git a/app/services_controllers.php b/app/services_controllers.php index fc4651bd9f..70f903a333 100644 --- a/app/services_controllers.php +++ b/app/services_controllers.php @@ -398,7 +398,7 @@ return [ ], DatabaseController::class => [ 'class' => DatabaseController::class, - 'arguments' => ['$response' => '@response', '$template' => '@template'], + 'arguments' => ['$response' => '@response', '$template' => '@template', '$dbi' => '@dbi'], ], ErrorReportController::class => [ 'class' => ErrorReportController::class, diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 62e4c06988..9581a2b9f4 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1684,9 +1684,6 @@ - - DatabaseInterface::getInstance() - $request diff --git a/src/Controllers/DatabaseController.php b/src/Controllers/DatabaseController.php index f28ab5a78e..ee62d4297b 100644 --- a/src/Controllers/DatabaseController.php +++ b/src/Controllers/DatabaseController.php @@ -6,11 +6,18 @@ namespace PhpMyAdmin\Controllers; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\ResponseRenderer; +use PhpMyAdmin\Template; final class DatabaseController extends AbstractController { + public function __construct(ResponseRenderer $response, Template $template, private readonly DatabaseInterface $dbi) + { + parent::__construct($response, $template); + } + public function __invoke(ServerRequest $request): void { - $this->response->addJSON(['databases' => DatabaseInterface::getInstance()->getDatabaseList()]); + $this->response->addJSON(['databases' => $this->dbi->getDatabaseList()]); } } diff --git a/tests/classes/Controllers/DatabaseControllerTest.php b/tests/classes/Controllers/DatabaseControllerTest.php new file mode 100644 index 0000000000..d78eb6acde --- /dev/null +++ b/tests/classes/Controllers/DatabaseControllerTest.php @@ -0,0 +1,44 @@ +createServerRequest('GET', 'http://example.com/'); + + $dbiDummy = $this->createDbiDummy(); + $dbi = $this->createDatabaseInterface($dbiDummy); + DatabaseInterface::$instance = $dbi; + $dbiDummy->addResult( + 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', + [['test_db_1'], ['test_db_2']], + ['SCHEMA_NAME'], + ); + + $responseRenderer = new ResponseRenderer(); + $controller = new DatabaseController($responseRenderer, new Template(new Config()), $dbi); + $controller($request); + + $output = $responseRenderer->getJSONResult(); + self::assertArrayHasKey('databases', $output); + self::assertInstanceOf(ListDatabase::class, $output['databases']); + self::assertSame(['test_db_1', 'test_db_2'], $output['databases']->getArrayCopy()); + + $dbiDummy->assertAllQueriesConsumed(); + } +}