Skip to content

Commit 5ce96da

Browse files
Merge pull request #18880 from MauricioFauth/database-controller-test
Add unit test for DatabaseController
2 parents aa9d2f5 + f78781d commit 5ce96da

4 files changed

Lines changed: 53 additions & 5 deletions

File tree

app/services_controllers.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@
398398
],
399399
DatabaseController::class => [
400400
'class' => DatabaseController::class,
401-
'arguments' => ['$response' => '@response', '$template' => '@template'],
401+
'arguments' => ['$response' => '@response', '$template' => '@template', '$dbi' => '@dbi'],
402402
],
403403
ErrorReportController::class => [
404404
'class' => ErrorReportController::class,

psalm-baseline.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,9 +1684,6 @@
16841684
</PossiblyUnusedMethod>
16851685
</file>
16861686
<file src="src/Controllers/DatabaseController.php">
1687-
<DeprecatedMethod>
1688-
<code>DatabaseInterface::getInstance()</code>
1689-
</DeprecatedMethod>
16901687
<UnusedParam>
16911688
<code>$request</code>
16921689
</UnusedParam>

src/Controllers/DatabaseController.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,18 @@
66

77
use PhpMyAdmin\DatabaseInterface;
88
use PhpMyAdmin\Http\ServerRequest;
9+
use PhpMyAdmin\ResponseRenderer;
10+
use PhpMyAdmin\Template;
911

1012
final class DatabaseController extends AbstractController
1113
{
14+
public function __construct(ResponseRenderer $response, Template $template, private readonly DatabaseInterface $dbi)
15+
{
16+
parent::__construct($response, $template);
17+
}
18+
1219
public function __invoke(ServerRequest $request): void
1320
{
14-
$this->response->addJSON(['databases' => DatabaseInterface::getInstance()->getDatabaseList()]);
21+
$this->response->addJSON(['databases' => $this->dbi->getDatabaseList()]);
1522
}
1623
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpMyAdmin\Tests\Controllers;
6+
7+
use PhpMyAdmin\Config;
8+
use PhpMyAdmin\Controllers\DatabaseController;
9+
use PhpMyAdmin\DatabaseInterface;
10+
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
11+
use PhpMyAdmin\ListDatabase;
12+
use PhpMyAdmin\Template;
13+
use PhpMyAdmin\Tests\AbstractTestCase;
14+
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
15+
use PHPUnit\Framework\Attributes\CoversClass;
16+
17+
#[CoversClass(DatabaseController::class)]
18+
class DatabaseControllerTest extends AbstractTestCase
19+
{
20+
public function testDatabaseController(): void
21+
{
22+
$request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/');
23+
24+
$dbiDummy = $this->createDbiDummy();
25+
$dbi = $this->createDatabaseInterface($dbiDummy);
26+
DatabaseInterface::$instance = $dbi;
27+
$dbiDummy->addResult(
28+
'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`',
29+
[['test_db_1'], ['test_db_2']],
30+
['SCHEMA_NAME'],
31+
);
32+
33+
$responseRenderer = new ResponseRenderer();
34+
$controller = new DatabaseController($responseRenderer, new Template(new Config()), $dbi);
35+
$controller($request);
36+
37+
$output = $responseRenderer->getJSONResult();
38+
self::assertArrayHasKey('databases', $output);
39+
self::assertInstanceOf(ListDatabase::class, $output['databases']);
40+
self::assertSame(['test_db_1', 'test_db_2'], $output['databases']->getArrayCopy());
41+
42+
$dbiDummy->assertAllQueriesConsumed();
43+
}
44+
}

0 commit comments

Comments
 (0)