Merge pull request #18880 from MauricioFauth/database-controller-test

Add unit test for DatabaseController
This commit is contained in:
Maurício Meneghini Fauth 2024-01-06 15:49:32 -03:00 committed by GitHub
commit 5ce96dadb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 5 deletions

View File

@ -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,

View File

@ -1684,9 +1684,6 @@
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/DatabaseController.php">
<DeprecatedMethod>
<code>DatabaseInterface::getInstance()</code>
</DeprecatedMethod>
<UnusedParam>
<code>$request</code>
</UnusedParam>

View File

@ -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()]);
}
}

View File

@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Controllers;
use PhpMyAdmin\Config;
use PhpMyAdmin\Controllers\DatabaseController;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
use PhpMyAdmin\ListDatabase;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
use PhpMyAdmin\Tests\Stubs\ResponseRenderer;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(DatabaseController::class)]
class DatabaseControllerTest extends AbstractTestCase
{
public function testDatabaseController(): void
{
$request = ServerRequestFactory::create()->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();
}
}