From 98520d90fccf6f92d373bcd5bf751cc22e3b4073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 16:09:17 -0300 Subject: [PATCH 01/13] Remove AbstractTestCase::loadDbiIntoContainerBuilder() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 1 - tests/classes/AbstractTestCase.php | 7 ------- .../Database/MultiTableQuery/TablesControllerTest.php | 2 -- .../Controllers/Database/StructureControllerTest.php | 2 -- tests/classes/Controllers/Export/ExportControllerTest.php | 2 -- tests/classes/Controllers/Import/ImportControllerTest.php | 2 -- tests/classes/Controllers/NavigationControllerTest.php | 4 ---- .../Controllers/Normalization/MainControllerTest.php | 2 -- .../classes/Controllers/Operations/TableControllerTest.php | 1 - tests/classes/Controllers/Sql/EnumValuesControllerTest.php | 2 -- tests/classes/Controllers/Sql/SetValuesControllerTest.php | 2 -- tests/classes/Controllers/Table/ExportControllerTest.php | 2 -- tests/classes/Controllers/Table/SearchControllerTest.php | 2 -- tests/classes/Export/OptionsTest.php | 2 -- tests/classes/PluginsTest.php | 2 -- tests/classes/Table/TableTest.php | 2 -- tests/classes/Tracking/TrackerTest.php | 2 -- 17 files changed, 39 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index a5597c765a..20b2f54884 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -12580,7 +12580,6 @@ Config::getInstance() - DatabaseInterface::getInstance() diff --git a/tests/classes/AbstractTestCase.php b/tests/classes/AbstractTestCase.php index 14e888edd2..369a5c65b4 100644 --- a/tests/classes/AbstractTestCase.php +++ b/tests/classes/AbstractTestCase.php @@ -87,13 +87,6 @@ abstract class AbstractTestCase extends TestCase Core::$containerBuilder = null; } - protected function loadDbiIntoContainerBuilder(): void - { - $containerBuilder = Core::getContainerBuilder(); - $containerBuilder->set(DatabaseInterface::class, DatabaseInterface::getInstance()); - $containerBuilder->setAlias('dbi', DatabaseInterface::class); - } - protected function loadResponseIntoContainerBuilder(): void { $response = new ResponseRenderer(); diff --git a/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php b/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php index b411e4898c..b1f8d40388 100644 --- a/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php +++ b/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php @@ -29,8 +29,6 @@ class TablesControllerTest extends AbstractTestCase $this->dbi = $this->createDatabaseInterface($this->dummyDbi); DatabaseInterface::$instance = $this->dbi; - parent::loadDbiIntoContainerBuilder(); - $GLOBALS['server'] = 1; parent::loadResponseIntoContainerBuilder(); diff --git a/tests/classes/Controllers/Database/StructureControllerTest.php b/tests/classes/Controllers/Database/StructureControllerTest.php index ff8e9841db..88e7822fe4 100644 --- a/tests/classes/Controllers/Database/StructureControllerTest.php +++ b/tests/classes/Controllers/Database/StructureControllerTest.php @@ -312,8 +312,6 @@ class StructureControllerTest extends AbstractTestCase */ public function testGetValuesForMroongaTable(): void { - parent::loadDbiIntoContainerBuilder(); - Current::$database = 'testdb'; Current::$table = 'mytable'; diff --git a/tests/classes/Controllers/Export/ExportControllerTest.php b/tests/classes/Controllers/Export/ExportControllerTest.php index 7fdb6efaa4..3f5aa23ed3 100644 --- a/tests/classes/Controllers/Export/ExportControllerTest.php +++ b/tests/classes/Controllers/Export/ExportControllerTest.php @@ -50,8 +50,6 @@ class ExportControllerTest extends AbstractTestCase public function testExportController(): void { - parent::loadDbiIntoContainerBuilder(); - $GLOBALS['server'] = 1; $GLOBALS['text_dir'] = 'ltr'; $GLOBALS['lang'] = 'en'; diff --git a/tests/classes/Controllers/Import/ImportControllerTest.php b/tests/classes/Controllers/Import/ImportControllerTest.php index 9ff995570b..78c17f3b53 100644 --- a/tests/classes/Controllers/Import/ImportControllerTest.php +++ b/tests/classes/Controllers/Import/ImportControllerTest.php @@ -32,8 +32,6 @@ class ImportControllerTest extends AbstractTestCase public function testIndexParametrized(): void { - parent::loadDbiIntoContainerBuilder(); - parent::setLanguage(); $GLOBALS['server'] = 1; diff --git a/tests/classes/Controllers/NavigationControllerTest.php b/tests/classes/Controllers/NavigationControllerTest.php index a67698c5dd..4ffe72a944 100644 --- a/tests/classes/Controllers/NavigationControllerTest.php +++ b/tests/classes/Controllers/NavigationControllerTest.php @@ -34,8 +34,6 @@ class NavigationControllerTest extends AbstractTestCase public function testIndex(): void { - parent::loadDbiIntoContainerBuilder(); - parent::setLanguage(); $GLOBALS['server'] = 1; @@ -182,8 +180,6 @@ class NavigationControllerTest extends AbstractTestCase public function testIndexWithPosAndValue(): void { - parent::loadDbiIntoContainerBuilder(); - parent::setLanguage(); $GLOBALS['server'] = 1; diff --git a/tests/classes/Controllers/Normalization/MainControllerTest.php b/tests/classes/Controllers/Normalization/MainControllerTest.php index 28c60f2cc4..ad0fb2ac43 100644 --- a/tests/classes/Controllers/Normalization/MainControllerTest.php +++ b/tests/classes/Controllers/Normalization/MainControllerTest.php @@ -33,8 +33,6 @@ class MainControllerTest extends AbstractTestCase $this->dbi = $this->createDatabaseInterface($this->dummyDbi); DatabaseInterface::$instance = $this->dbi; - parent::loadDbiIntoContainerBuilder(); - $GLOBALS['server'] = 1; parent::loadResponseIntoContainerBuilder(); diff --git a/tests/classes/Controllers/Operations/TableControllerTest.php b/tests/classes/Controllers/Operations/TableControllerTest.php index 68ac0eb80a..9b12160fea 100644 --- a/tests/classes/Controllers/Operations/TableControllerTest.php +++ b/tests/classes/Controllers/Operations/TableControllerTest.php @@ -45,7 +45,6 @@ class TableControllerTest extends AbstractTestCase $config->selectServer('1'); $config->settings['MaxDbList'] = 0; - $this->loadDbiIntoContainerBuilder(); $this->loadResponseIntoContainerBuilder(); $this->dummyDbi->addResult( diff --git a/tests/classes/Controllers/Sql/EnumValuesControllerTest.php b/tests/classes/Controllers/Sql/EnumValuesControllerTest.php index 817c033270..ec46aeeef6 100644 --- a/tests/classes/Controllers/Sql/EnumValuesControllerTest.php +++ b/tests/classes/Controllers/Sql/EnumValuesControllerTest.php @@ -28,8 +28,6 @@ class EnumValuesControllerTest extends AbstractTestCase $this->dbi = $this->createDatabaseInterface($this->dummyDbi); DatabaseInterface::$instance = $this->dbi; - parent::loadDbiIntoContainerBuilder(); - $GLOBALS['server'] = 1; $GLOBALS['text_dir'] = 'ltr'; diff --git a/tests/classes/Controllers/Sql/SetValuesControllerTest.php b/tests/classes/Controllers/Sql/SetValuesControllerTest.php index 690cabf61a..259408c685 100644 --- a/tests/classes/Controllers/Sql/SetValuesControllerTest.php +++ b/tests/classes/Controllers/Sql/SetValuesControllerTest.php @@ -28,8 +28,6 @@ class SetValuesControllerTest extends AbstractTestCase $this->dbi = $this->createDatabaseInterface($this->dummyDbi); DatabaseInterface::$instance = $this->dbi; - parent::loadDbiIntoContainerBuilder(); - $GLOBALS['server'] = 1; $GLOBALS['text_dir'] = 'ltr'; diff --git a/tests/classes/Controllers/Table/ExportControllerTest.php b/tests/classes/Controllers/Table/ExportControllerTest.php index 8609325abd..8daf38db1b 100644 --- a/tests/classes/Controllers/Table/ExportControllerTest.php +++ b/tests/classes/Controllers/Table/ExportControllerTest.php @@ -40,8 +40,6 @@ class ExportControllerTest extends AbstractTestCase public function testExportController(): void { - parent::loadDbiIntoContainerBuilder(); - Current::$database = 'test_db'; Current::$table = 'test_table'; $config = Config::getInstance(); diff --git a/tests/classes/Controllers/Table/SearchControllerTest.php b/tests/classes/Controllers/Table/SearchControllerTest.php index c057488b62..b0a88ed663 100644 --- a/tests/classes/Controllers/Table/SearchControllerTest.php +++ b/tests/classes/Controllers/Table/SearchControllerTest.php @@ -125,8 +125,6 @@ class SearchControllerTest extends AbstractTestCase $this->dbi = $this->createDatabaseInterface($this->dummyDbi); DatabaseInterface::$instance = $this->dbi; - parent::loadDbiIntoContainerBuilder(); - parent::loadResponseIntoContainerBuilder(); $_SESSION[' HMAC_secret '] = hash('sha1', 'test'); diff --git a/tests/classes/Export/OptionsTest.php b/tests/classes/Export/OptionsTest.php index 007a57c277..f6be9bd064 100644 --- a/tests/classes/Export/OptionsTest.php +++ b/tests/classes/Export/OptionsTest.php @@ -32,8 +32,6 @@ class OptionsTest extends AbstractTestCase $dbi = $this->createDatabaseInterface(); DatabaseInterface::$instance = $dbi; - parent::loadDbiIntoContainerBuilder(); - $GLOBALS['server'] = 0; Current::$table = 'table'; diff --git a/tests/classes/PluginsTest.php b/tests/classes/PluginsTest.php index 9c18c013bb..aaf0effafa 100644 --- a/tests/classes/PluginsTest.php +++ b/tests/classes/PluginsTest.php @@ -21,8 +21,6 @@ class PluginsTest extends AbstractTestCase parent::setUp(); DatabaseInterface::$instance = $this->createDatabaseInterface(); - - parent::loadDbiIntoContainerBuilder(); } public function testGetExport(): void diff --git a/tests/classes/Table/TableTest.php b/tests/classes/Table/TableTest.php index 2eb56d20fa..07b3953167 100644 --- a/tests/classes/Table/TableTest.php +++ b/tests/classes/Table/TableTest.php @@ -1436,8 +1436,6 @@ class TableTest extends AbstractTestCase 'utf8mb4_unicode_ci', ]); - $this->loadDbiIntoContainerBuilder(); - $GLOBALS['sql_query'] = ''; $return = Table::moveCopy('aa', 'ad', 'bb', 'ad', 'structure', true, 'db_copy', true); $this->assertTrue($return); diff --git a/tests/classes/Tracking/TrackerTest.php b/tests/classes/Tracking/TrackerTest.php index bf57cd6bda..0b66232951 100644 --- a/tests/classes/Tracking/TrackerTest.php +++ b/tests/classes/Tracking/TrackerTest.php @@ -33,8 +33,6 @@ class TrackerTest extends AbstractTestCase DatabaseInterface::$instance = $this->createDatabaseInterface(); - parent::loadDbiIntoContainerBuilder(); - /** * SET these to avoid undefined index error */ From e852380e7e255a4932dadfd6e74b25ef6a31a176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 17:16:22 -0300 Subject: [PATCH 02/13] Remove container from Import\ImportControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 3 -- .../Import/ImportControllerTest.php | 48 ++++++++++++++----- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 20b2f54884..ce876f2e0f 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -2149,9 +2149,6 @@ - - __construct - diff --git a/tests/classes/Controllers/Import/ImportControllerTest.php b/tests/classes/Controllers/Import/ImportControllerTest.php index 78c17f3b53..b3d98acd36 100644 --- a/tests/classes/Controllers/Import/ImportControllerTest.php +++ b/tests/classes/Controllers/Import/ImportControllerTest.php @@ -4,14 +4,22 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Controllers\Import; +use PhpMyAdmin\Bookmarks\BookmarkRepository; use PhpMyAdmin\Config; +use PhpMyAdmin\ConfigStorage\Relation; +use PhpMyAdmin\ConfigStorage\RelationCleanup; use PhpMyAdmin\Controllers\Import\ImportController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\Import\Import; +use PhpMyAdmin\Operations; +use PhpMyAdmin\Sql; +use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; +use PhpMyAdmin\Transformations; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(ImportController::class)] @@ -37,8 +45,6 @@ class ImportControllerTest extends AbstractTestCase $GLOBALS['server'] = 1; Config::getInstance()->selectedServer['user'] = 'user'; - parent::loadResponseIntoContainerBuilder(); - // Some params were not added as they are not required for this test Current::$database = 'pma_test'; Current::$table = 'table1'; @@ -77,23 +83,43 @@ class ImportControllerTest extends AbstractTestCase [], ); - /** @var ImportController $importController */ - $importController = Core::getContainerBuilder()->get(ImportController::class); + $responseRenderer = new ResponseRenderer(); + $relation = new Relation($this->dbi); + $bookmarkRepository = new BookmarkRepository($this->dbi, $relation); + $template = new Template(); + $sql = new Sql( + $this->dbi, + $relation, + self::createStub(RelationCleanup::class), + self::createStub(Operations::class), + self::createStub(Transformations::class), + $template, + $bookmarkRepository, + ); + + $importController = new ImportController( + $responseRenderer, + $template, + new Import(), + $sql, + $this->dbi, + $bookmarkRepository, + ); + $this->dummyDbi->addSelectDb('pma_test'); $this->dummyDbi->addSelectDb('pma_test'); $importController($request); $this->dummyDbi->assertAllSelectsConsumed(); - $this->assertResponseWasSuccessfull(); + self::assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail'); - $this->assertStringContainsString( - 'MySQL returned an empty result set (i.e. zero rows).', - $this->getResponseHtmlResult(), - ); + $output = $responseRenderer->getHTMLResult(); + + $this->assertStringContainsString('MySQL returned an empty result set (i.e. zero rows).', $output); $this->assertStringContainsString( 'SELECT A.*' . "\n" . 'FROM table1 A' . "\n" . 'WHERE A.nomEtablissement = \'Saint-Louis - Châteaulin\' AND foo = 4 AND `:a` IS NULL', - $this->getResponseHtmlResult(), + $output, ); $this->dummyDbi->assertAllQueriesConsumed(); From bbebcbf970ece67f67899da0558e2d76f988b6a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 20:16:14 -0300 Subject: [PATCH 03/13] Remove container from Operations\TableControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 3 --- tests/classes/AbstractTestCase.php | 8 ------- .../Operations/TableControllerTest.php | 23 ++++++++++++++----- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index ce876f2e0f..6e5da827a3 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -2425,9 +2425,6 @@ $showTable $showTable - - __construct - diff --git a/tests/classes/AbstractTestCase.php b/tests/classes/AbstractTestCase.php index 369a5c65b4..913d18e122 100644 --- a/tests/classes/AbstractTestCase.php +++ b/tests/classes/AbstractTestCase.php @@ -95,14 +95,6 @@ abstract class AbstractTestCase extends TestCase $containerBuilder->setAlias('response', ResponseRenderer::class); } - protected function getResponseHtmlResult(): string - { - /** @var ResponseRenderer $response */ - $response = Core::getContainerBuilder()->get(ResponseRenderer::class); - - return $response->getHTMLResult(); - } - /** @return mixed[] */ protected function getResponseJsonResult(): array { diff --git a/tests/classes/Controllers/Operations/TableControllerTest.php b/tests/classes/Controllers/Operations/TableControllerTest.php index 9b12160fea..518821ea6e 100644 --- a/tests/classes/Controllers/Operations/TableControllerTest.php +++ b/tests/classes/Controllers/Operations/TableControllerTest.php @@ -5,16 +5,20 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Controllers\Operations; use PhpMyAdmin\Charsets; +use PhpMyAdmin\CheckUserPrivileges; use PhpMyAdmin\Config; +use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\Operations\TableController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; +use PhpMyAdmin\DbTableExists; use PhpMyAdmin\Http\Factory\ServerRequestFactory; +use PhpMyAdmin\Operations; use PhpMyAdmin\StorageEngine; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(TableController::class)] @@ -45,8 +49,6 @@ class TableControllerTest extends AbstractTestCase $config->selectServer('1'); $config->settings['MaxDbList'] = 0; - $this->loadResponseIntoContainerBuilder(); - $this->dummyDbi->addResult( 'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`', [['test_db']], @@ -120,10 +122,19 @@ class TableControllerTest extends AbstractTestCase $request = ServerRequestFactory::create()->createServerRequest('GET', 'http://example.com/') ->withQueryParams(['db' => 'test_db', 'table' => 'test_table']); - /** @var TableController $controller */ - $controller = Core::getContainerBuilder()->get(TableController::class); + $responseRenderer = new ResponseRenderer(); + $relation = new Relation($this->dbi); + $controller = new TableController( + $responseRenderer, + new Template($config), + new Operations($this->dbi, $relation), + new CheckUserPrivileges($this->dbi), + $relation, + $this->dbi, + new DbTableExists($this->dbi), + ); $controller($request); - $this->assertEquals($expectedOutput, $this->getResponseHtmlResult()); + $this->assertEquals($expectedOutput, $responseRenderer->getHTMLResult()); } } From 1245c976eec3b19a7bceb4a0831f55de5489e7a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 20:45:13 -0300 Subject: [PATCH 04/13] Remove container from Sql\SetValuesControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 3 - .../Sql/SetValuesControllerTest.php | 67 +++++++++++++++---- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 6e5da827a3..7ce3a086f6 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -3203,9 +3203,6 @@ $currentValue $whereClause - - __construct - diff --git a/tests/classes/Controllers/Sql/SetValuesControllerTest.php b/tests/classes/Controllers/Sql/SetValuesControllerTest.php index 259408c685..d02908bcba 100644 --- a/tests/classes/Controllers/Sql/SetValuesControllerTest.php +++ b/tests/classes/Controllers/Sql/SetValuesControllerTest.php @@ -4,13 +4,21 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Controllers\Sql; +use PhpMyAdmin\Bookmarks\BookmarkRepository; +use PhpMyAdmin\CheckUserPrivileges; +use PhpMyAdmin\ConfigStorage\Relation; +use PhpMyAdmin\ConfigStorage\RelationCleanup; use PhpMyAdmin\Controllers\Sql\SetValuesController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\Operations; +use PhpMyAdmin\Sql; +use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; +use PhpMyAdmin\Transformations; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(SetValuesController::class)] @@ -30,8 +38,6 @@ class SetValuesControllerTest extends AbstractTestCase $GLOBALS['server'] = 1; $GLOBALS['text_dir'] = 'ltr'; - - parent::loadResponseIntoContainerBuilder(); } public function testError(): void @@ -51,16 +57,31 @@ class SetValuesControllerTest extends AbstractTestCase Current::$database = 'cvv'; Current::$table = 'enums'; - /** @var SetValuesController $sqlController */ - $sqlController = Core::getContainerBuilder()->get(SetValuesController::class); + $responseRenderer = new ResponseRenderer(); + $template = new Template(); + $relation = new Relation($this->dbi); + $bookmarkRepository = new BookmarkRepository($this->dbi, $relation); + $sql = new Sql( + $this->dbi, + $relation, + self::createStub(RelationCleanup::class), + self::createStub(Operations::class), + self::createStub(Transformations::class), + $template, + $bookmarkRepository, + ); + + $sqlController = new SetValuesController( + $responseRenderer, + $template, + $sql, + new CheckUserPrivileges($this->dbi), + ); $sqlController($request); - $this->assertResponseWasNotSuccessfull(); + $this->assertFalse($responseRenderer->hasSuccessState(), 'expected the request to fail'); - $this->assertSame( - ['message' => 'Error in processing request'], - $this->getResponseJsonResult(), - ); + $this->assertSame(['message' => 'Error in processing request'], $responseRenderer->getJSONResult()); } public function testSuccess(): void @@ -93,11 +114,29 @@ class SetValuesControllerTest extends AbstractTestCase Current::$database = 'cvv'; Current::$table = 'enums'; - /** @var SetValuesController $sqlController */ - $sqlController = Core::getContainerBuilder()->get(SetValuesController::class); + $responseRenderer = new ResponseRenderer(); + $template = new Template(); + $relation = new Relation($this->dbi); + $bookmarkRepository = new BookmarkRepository($this->dbi, $relation); + $sql = new Sql( + $this->dbi, + $relation, + self::createStub(RelationCleanup::class), + self::createStub(Operations::class), + self::createStub(Transformations::class), + $template, + $bookmarkRepository, + ); + + $sqlController = new SetValuesController( + $responseRenderer, + $template, + $sql, + new CheckUserPrivileges($this->dbi), + ); $sqlController($request); - $this->assertResponseWasSuccessfull(); + $this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail'); $this->assertSame( [ @@ -110,7 +149,7 @@ class SetValuesControllerTest extends AbstractTestCase . ' ' . "\n" . ' ' . "\n", ], - $this->getResponseJsonResult(), + $responseRenderer->getJSONResult(), ); } } From c229b98f76ba4e6314afe1cd86677d601b8fbf2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 21:13:54 -0300 Subject: [PATCH 05/13] Remove container from Sql\EnumValuesControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 3 - tests/classes/AbstractTestCase.php | 8 --- .../Sql/EnumValuesControllerTest.php | 67 +++++++++++++++---- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 7ce3a086f6..a42110cefc 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -3170,9 +3170,6 @@ $column $currValue - - __construct - diff --git a/tests/classes/AbstractTestCase.php b/tests/classes/AbstractTestCase.php index 913d18e122..3ff2633bdb 100644 --- a/tests/classes/AbstractTestCase.php +++ b/tests/classes/AbstractTestCase.php @@ -104,14 +104,6 @@ abstract class AbstractTestCase extends TestCase return $response->getJSONResult(); } - protected function assertResponseWasNotSuccessfull(): void - { - /** @var ResponseRenderer $response */ - $response = Core::getContainerBuilder()->get(ResponseRenderer::class); - - $this->assertFalse($response->hasSuccessState(), 'expected the request to fail'); - } - protected function assertResponseWasSuccessfull(): void { /** @var ResponseRenderer $response */ diff --git a/tests/classes/Controllers/Sql/EnumValuesControllerTest.php b/tests/classes/Controllers/Sql/EnumValuesControllerTest.php index ec46aeeef6..070dc02c43 100644 --- a/tests/classes/Controllers/Sql/EnumValuesControllerTest.php +++ b/tests/classes/Controllers/Sql/EnumValuesControllerTest.php @@ -4,13 +4,21 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Controllers\Sql; +use PhpMyAdmin\Bookmarks\BookmarkRepository; +use PhpMyAdmin\CheckUserPrivileges; +use PhpMyAdmin\ConfigStorage\Relation; +use PhpMyAdmin\ConfigStorage\RelationCleanup; use PhpMyAdmin\Controllers\Sql\EnumValuesController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\Operations; +use PhpMyAdmin\Sql; +use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; +use PhpMyAdmin\Transformations; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(EnumValuesController::class)] @@ -30,8 +38,6 @@ class EnumValuesControllerTest extends AbstractTestCase $GLOBALS['server'] = 1; $GLOBALS['text_dir'] = 'ltr'; - - parent::loadResponseIntoContainerBuilder(); } public function testGetEnumValuesError(): void @@ -50,16 +56,31 @@ class EnumValuesControllerTest extends AbstractTestCase ['curr_value', null, 'b&c'], ]); - /** @var EnumValuesController $sqlController */ - $sqlController = Core::getContainerBuilder()->get(EnumValuesController::class); + $responseRenderer = new ResponseRenderer(); + $template = new Template(); + $relation = new Relation($this->dbi); + $bookmarkRepository = new BookmarkRepository($this->dbi, $relation); + $sql = new Sql( + $this->dbi, + $relation, + self::createStub(RelationCleanup::class), + self::createStub(Operations::class), + self::createStub(Transformations::class), + $template, + $bookmarkRepository, + ); + + $sqlController = new EnumValuesController( + $responseRenderer, + $template, + $sql, + new CheckUserPrivileges($this->dbi), + ); $sqlController($request); - $this->assertResponseWasNotSuccessfull(); + $this->assertFalse($responseRenderer->hasSuccessState(), 'expected the request to fail'); - $this->assertSame( - ['message' => 'Error in processing request'], - $this->getResponseJsonResult(), - ); + $this->assertSame(['message' => 'Error in processing request'], $responseRenderer->getJSONResult()); } public function testGetEnumValuesSuccess(): void @@ -91,11 +112,29 @@ class EnumValuesControllerTest extends AbstractTestCase ['curr_value', null, 'b&c'], ]); - /** @var EnumValuesController $sqlController */ - $sqlController = Core::getContainerBuilder()->get(EnumValuesController::class); + $responseRenderer = new ResponseRenderer(); + $template = new Template(); + $relation = new Relation($this->dbi); + $bookmarkRepository = new BookmarkRepository($this->dbi, $relation); + $sql = new Sql( + $this->dbi, + $relation, + self::createStub(RelationCleanup::class), + self::createStub(Operations::class), + self::createStub(Transformations::class), + $template, + $bookmarkRepository, + ); + + $sqlController = new EnumValuesController( + $responseRenderer, + $template, + $sql, + new CheckUserPrivileges($this->dbi), + ); $sqlController($request); - $this->assertResponseWasSuccessfull(); + $this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail'); $this->assertSame( [ @@ -112,7 +151,7 @@ class EnumValuesControllerTest extends AbstractTestCase . ' ' . "\n" . ' ' . "\n", ], - $this->getResponseJsonResult(), + $responseRenderer->getJSONResult(), ); } } From f5ebc2355b3250c7d9eb553ea4c72df7fcbd9668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 21:35:49 -0300 Subject: [PATCH 06/13] Remove container from NavigationControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 3 -- tests/classes/AbstractTestCase.php | 8 ---- .../Controllers/NavigationControllerTest.php | 45 +++++++++++++------ 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index a42110cefc..cf8d3a20a8 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -2231,9 +2231,6 @@ $itemName $itemType - - __construct - diff --git a/tests/classes/AbstractTestCase.php b/tests/classes/AbstractTestCase.php index 3ff2633bdb..136453b194 100644 --- a/tests/classes/AbstractTestCase.php +++ b/tests/classes/AbstractTestCase.php @@ -104,14 +104,6 @@ abstract class AbstractTestCase extends TestCase return $response->getJSONResult(); } - protected function assertResponseWasSuccessfull(): void - { - /** @var ResponseRenderer $response */ - $response = Core::getContainerBuilder()->get(ResponseRenderer::class); - - $this->assertTrue($response->hasSuccessState(), 'expected the request not to fail'); - } - protected function createDatabaseInterface(DbiExtension|null $extension = null): DatabaseInterface { return new DatabaseInterface($extension ?? $this->createDbiDummy()); diff --git a/tests/classes/Controllers/NavigationControllerTest.php b/tests/classes/Controllers/NavigationControllerTest.php index 4ffe72a944..ca59489ec0 100644 --- a/tests/classes/Controllers/NavigationControllerTest.php +++ b/tests/classes/Controllers/NavigationControllerTest.php @@ -5,13 +5,18 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Controllers; use PhpMyAdmin\Config; +use PhpMyAdmin\Config\PageSettings; +use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\NavigationController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\Navigation\Navigation; +use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; +use PhpMyAdmin\UserPreferences; use PHPUnit\Framework\Attributes\CoversClass; use function sprintf; @@ -42,8 +47,6 @@ class NavigationControllerTest extends AbstractTestCase $config->selectedServer['DisableIS'] = false; $config->selectedServer['auth_type'] = 'cookie'; - parent::loadResponseIntoContainerBuilder(); - // This example path data has nothing to do with the actual test // root.air-balloon_burner_dev2 $_POST['n0_aPath'] = 'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI='; @@ -120,17 +123,26 @@ class NavigationControllerTest extends AbstractTestCase [[0]], ); - /** @var NavigationController $navigationController */ - $navigationController = Core::getContainerBuilder()->get(NavigationController::class); + $responseRenderer = new ResponseRenderer(); + $template = new Template(); + $relation = new Relation($this->dbi); + $navigationController = new NavigationController( + $responseRenderer, + $template, + new Navigation($template, $relation, $this->dbi), + $relation, + new PageSettings(new UserPreferences($this->dbi, $relation, $template)), + ); + $_POST['full'] = '1'; $request = $this->createStub(ServerRequest::class); $request->method('isAjax')->willReturn(true); $navigationController($request); - $this->assertResponseWasSuccessfull(); + $this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail'); - $responseMessage = $this->getResponseJsonResult()['message']; + $responseMessage = $responseRenderer->getJSONResult()['message']; $this->assertStringContainsString('
', $responseMessage); @@ -188,8 +200,6 @@ class NavigationControllerTest extends AbstractTestCase $config->selectedServer['DisableIS'] = false; $config->selectedServer['auth_type'] = 'cookie'; - parent::loadResponseIntoContainerBuilder(); - // root.air-balloon_burner_dev2 $_POST['n0_aPath'] = 'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI='; // root.air-balloon.burner_dev2 @@ -268,17 +278,26 @@ class NavigationControllerTest extends AbstractTestCase [[0]], ); - /** @var NavigationController $navigationController */ - $navigationController = Core::getContainerBuilder()->get(NavigationController::class); + $responseRenderer = new ResponseRenderer(); + $template = new Template(); + $relation = new Relation($this->dbi); + $navigationController = new NavigationController( + $responseRenderer, + $template, + new Navigation($template, $relation, $this->dbi), + $relation, + new PageSettings(new UserPreferences($this->dbi, $relation, $template)), + ); + $_POST['full'] = '1'; $request = $this->createStub(ServerRequest::class); $request->method('isAjax')->willReturn(true); $navigationController($request); - $this->assertResponseWasSuccessfull(); + $this->assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail'); - $responseMessage = $this->getResponseJsonResult()['message']; + $responseMessage = $responseRenderer->getJSONResult()['message']; $this->assertStringContainsString('
', $responseMessage); From a9db70263910a377ac6c12b9217a921e6a92877f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 21:42:50 -0300 Subject: [PATCH 07/13] Remove container from Table\SearchControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- .../Controllers/Table/SearchControllerTest.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/classes/Controllers/Table/SearchControllerTest.php b/tests/classes/Controllers/Table/SearchControllerTest.php index b0a88ed663..e24b876842 100644 --- a/tests/classes/Controllers/Table/SearchControllerTest.php +++ b/tests/classes/Controllers/Table/SearchControllerTest.php @@ -125,8 +125,6 @@ class SearchControllerTest extends AbstractTestCase $this->dbi = $this->createDatabaseInterface($this->dummyDbi); DatabaseInterface::$instance = $this->dbi; - parent::loadResponseIntoContainerBuilder(); - $_SESSION[' HMAC_secret '] = hash('sha1', 'test'); $this->dummyDbi->addResult( @@ -149,8 +147,14 @@ class SearchControllerTest extends AbstractTestCase ], ); - /** @var SearchController $ctrl */ - $ctrl = Core::getContainerBuilder()->get(SearchController::class); + $ctrl = new SearchController( + $this->response, + $this->template, + new Search($this->dbi), + new Relation($this->dbi), + $this->dbi, + new DbTableExists($this->dbi), + ); $_POST['db'] = 'PMA'; $_POST['table'] = 'PMA_BookMark'; @@ -159,7 +163,7 @@ class SearchControllerTest extends AbstractTestCase $expected = ['col1' => 1, 'col2' => 2]; $ctrl->getDataRowAction(); - $json = $this->getResponseJsonResult(); + $json = $this->response->getJSONResult(); $this->assertEquals($expected, $json['row_info']); } } From 0ef906be5dc66ccb84de2ab455920e4a9521a917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 21:51:41 -0300 Subject: [PATCH 08/13] Remove container from MultiTableQuery\TablesControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 5 ----- tests/classes/AbstractTestCase.php | 9 --------- .../MultiTableQuery/TablesControllerTest.php | 12 ++++++------ 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index cf8d3a20a8..f8d2fe99de 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1144,11 +1144,6 @@ getParsedBodyParam('sql_query')]]> - - - __construct - - __construct diff --git a/tests/classes/AbstractTestCase.php b/tests/classes/AbstractTestCase.php index 136453b194..71e78ba457 100644 --- a/tests/classes/AbstractTestCase.php +++ b/tests/classes/AbstractTestCase.php @@ -95,15 +95,6 @@ abstract class AbstractTestCase extends TestCase $containerBuilder->setAlias('response', ResponseRenderer::class); } - /** @return mixed[] */ - protected function getResponseJsonResult(): array - { - /** @var ResponseRenderer $response */ - $response = Core::getContainerBuilder()->get(ResponseRenderer::class); - - return $response->getJSONResult(); - } - protected function createDatabaseInterface(DbiExtension|null $extension = null): DatabaseInterface { return new DatabaseInterface($extension ?? $this->createDbiDummy()); diff --git a/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php b/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php index b1f8d40388..65c1f6314b 100644 --- a/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php +++ b/tests/classes/Controllers/Database/MultiTableQuery/TablesControllerTest.php @@ -5,11 +5,12 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Controllers\Database\MultiTableQuery; use PhpMyAdmin\Controllers\Database\MultiTableQuery\TablesController; -use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Http\ServerRequest; +use PhpMyAdmin\Template; use PhpMyAdmin\Tests\AbstractTestCase; use PhpMyAdmin\Tests\Stubs\DbiDummy; +use PhpMyAdmin\Tests\Stubs\ResponseRenderer; use PHPUnit\Framework\Attributes\CoversClass; #[CoversClass(TablesController::class)] @@ -30,8 +31,6 @@ class TablesControllerTest extends AbstractTestCase DatabaseInterface::$instance = $this->dbi; $GLOBALS['server'] = 1; - - parent::loadResponseIntoContainerBuilder(); } public function testGetForeignKeyConstrainsForTable(): void @@ -39,8 +38,9 @@ class TablesControllerTest extends AbstractTestCase $_GET['tables'] = ['table1', 'table2']; $_GET['db'] = 'test'; - /** @var TablesController $multiTableQueryController */ - $multiTableQueryController = Core::getContainerBuilder()->get(TablesController::class); + $responseRenderer = new ResponseRenderer(); + $multiTableQueryController = new TablesController($responseRenderer, new Template(), $this->dbi); + $request = $this->createStub(ServerRequest::class); $request->method('getQueryParam')->willReturn($_GET['tables'], $_GET['db']); $multiTableQueryController($request); @@ -55,7 +55,7 @@ class TablesControllerTest extends AbstractTestCase ], ], ], - $this->getResponseJsonResult(), + $responseRenderer->getJSONResult(), ); } } From 3d83c62fa37be2283b44cc8220dfbc604016b311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 22:06:39 -0300 Subject: [PATCH 09/13] Remove AbstractTestCase::loadResponseIntoContainerBuilder() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- tests/classes/AbstractTestCase.php | 9 --------- .../Controllers/Normalization/MainControllerTest.php | 2 -- 2 files changed, 11 deletions(-) diff --git a/tests/classes/AbstractTestCase.php b/tests/classes/AbstractTestCase.php index 71e78ba457..a7061e09d9 100644 --- a/tests/classes/AbstractTestCase.php +++ b/tests/classes/AbstractTestCase.php @@ -15,7 +15,6 @@ use PhpMyAdmin\LanguageManager; use PhpMyAdmin\SqlParser\Translator; use PhpMyAdmin\Template; use PhpMyAdmin\Tests\Stubs\DbiDummy; -use PhpMyAdmin\Tests\Stubs\ResponseRenderer; use PhpMyAdmin\Utils\HttpRequest; use PHPUnit\Framework\TestCase; use ReflectionClass; @@ -87,14 +86,6 @@ abstract class AbstractTestCase extends TestCase Core::$containerBuilder = null; } - protected function loadResponseIntoContainerBuilder(): void - { - $response = new ResponseRenderer(); - $containerBuilder = Core::getContainerBuilder(); - $containerBuilder->set(ResponseRenderer::class, $response); - $containerBuilder->setAlias('response', ResponseRenderer::class); - } - protected function createDatabaseInterface(DbiExtension|null $extension = null): DatabaseInterface { return new DatabaseInterface($extension ?? $this->createDbiDummy()); diff --git a/tests/classes/Controllers/Normalization/MainControllerTest.php b/tests/classes/Controllers/Normalization/MainControllerTest.php index ad0fb2ac43..077c23abc9 100644 --- a/tests/classes/Controllers/Normalization/MainControllerTest.php +++ b/tests/classes/Controllers/Normalization/MainControllerTest.php @@ -35,8 +35,6 @@ class MainControllerTest extends AbstractTestCase $GLOBALS['server'] = 1; - parent::loadResponseIntoContainerBuilder(); - Current::$database = 'my_db'; Current::$table = 'test_tbl'; } From d2d347fbb27d7ea808da45327c0c42e0c8ac0209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Wed, 20 Dec 2023 22:24:43 -0300 Subject: [PATCH 10/13] Remove container from Database\StructureControllerTest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 1 + .../Database/StructureControllerTest.php | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index f8d2fe99de..e50a8634a9 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -13175,6 +13175,7 @@ DatabaseInterface::getInstance() DatabaseInterface::getInstance() DatabaseInterface::getInstance() + DatabaseInterface::getInstance() $currentTable diff --git a/tests/classes/Controllers/Database/StructureControllerTest.php b/tests/classes/Controllers/Database/StructureControllerTest.php index 88e7822fe4..cb3c1fa92b 100644 --- a/tests/classes/Controllers/Database/StructureControllerTest.php +++ b/tests/classes/Controllers/Database/StructureControllerTest.php @@ -8,7 +8,6 @@ use PhpMyAdmin\Config; use PhpMyAdmin\Config\PageSettings; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Controllers\Database\StructureController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\DbTableExists; @@ -315,8 +314,17 @@ class StructureControllerTest extends AbstractTestCase Current::$database = 'testdb'; Current::$table = 'mytable'; - /** @var StructureController $structureController */ - $structureController = Core::getContainerBuilder()->get(StructureController::class); + $dbi = DatabaseInterface::getInstance(); + $structureController = new StructureController( + $this->response, + $this->template, + $this->relation, + $this->replication, + $dbi, + $this->createStub(TrackingChecker::class), + $this->createStub(PageSettings::class), + new DbTableExists($dbi), + ); $this->assertSame( [[], '', '', 0], From 81f32fe16e8dcd051abadb907aef7f34304755a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Thu, 21 Dec 2023 15:11:34 -0300 Subject: [PATCH 11/13] Remove dbi from UrlRedirector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Is not necessary to set the DatabaseInterface instance. The container builder will correctly instanciate it if necessary. Signed-off-by: Maurício Meneghini Fauth --- psalm-baseline.xml | 5 ----- src/UrlRedirector.php | 2 -- 2 files changed, 7 deletions(-) diff --git a/psalm-baseline.xml b/psalm-baseline.xml index e50a8634a9..909594aca3 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -12222,11 +12222,6 @@ - - - DatabaseInterface::getInstance() - - DatabaseInterface::getInstance() diff --git a/src/UrlRedirector.php b/src/UrlRedirector.php index 37b96362de..acc3aa8bc8 100644 --- a/src/UrlRedirector.php +++ b/src/UrlRedirector.php @@ -16,9 +16,7 @@ final class UrlRedirector { public static function redirect(string $url): Response { - // Load database service because services.php is not available here $container = Core::getContainerBuilder(); - $container->set(DatabaseInterface::class, DatabaseInterface::getInstance()); // Only output the http headers $response = ResponseRenderer::getInstance(); From 033dcf21e07f154af1b12be8ae9270bf222e40ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Thu, 21 Dec 2023 16:46:11 -0300 Subject: [PATCH 12/13] Change Core::getContainerBuilder return to ContainerInterface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- composer.json | 1 + composer.lock | 2 +- src/Core.php | 5 +++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index b138b3b0b0..32c0047e92 100644 --- a/composer.json +++ b/composer.json @@ -65,6 +65,7 @@ "phpmyadmin/shapefile": "^4.0-dev", "phpmyadmin/sql-parser": "^6.0-dev", "phpmyadmin/twig-i18n-extension": "^5.0-dev", + "psr/container": "^2.0", "psr/http-factory": "^1.0", "psr/http-message": "^1.1", "psr/http-server-handler": "^1.0", diff --git a/composer.lock b/composer.lock index 28d5173e3a..84d1f99fc3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7533829654de25bcf0c6bc1a3b29bfb7", + "content-hash": "aefe28bbea442c1dc86fae2004bd3ff0", "packages": [ { "name": "composer/ca-bundle", diff --git a/src/Core.php b/src/Core.php index 53ad31f51e..e9c8dbcaaf 100644 --- a/src/Core.php +++ b/src/Core.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin; use PhpMyAdmin\Exceptions\MissingExtensionException; use PhpMyAdmin\Http\ServerRequest; +use Psr\Container\ContainerInterface; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; @@ -57,7 +58,7 @@ use const FILTER_VALIDATE_IP; */ class Core { - public static ContainerBuilder|null $containerBuilder = null; + public static ContainerInterface|null $containerBuilder = null; /** * Removes insecure parts in a path; used before include() or @@ -746,7 +747,7 @@ class Core return hash_equals($hmac, $signature); } - public static function getContainerBuilder(): ContainerBuilder + public static function getContainerBuilder(): ContainerInterface { if (self::$containerBuilder !== null) { return self::$containerBuilder; From 74054cb4d37d61a845f298f63464a3c313da779e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Fri, 22 Dec 2023 19:22:18 -0300 Subject: [PATCH 13/13] Extract container builder logic to ContainerBuilder class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maurício Meneghini Fauth --- bin/console | 4 +- src/Application.php | 5 ++- src/Container/ContainerBuilder.php | 37 +++++++++++++++++++ src/Controllers/Export/ExportController.php | 3 +- src/Controllers/View/CreateController.php | 4 +- src/Core.php | 19 ---------- src/Display/Results.php | 3 +- src/Header.php | 3 +- src/Http/Middleware/Authentication.php | 4 +- .../LanguageAndThemeCookieSaving.php | 4 +- .../Middleware/MinimumCommonRedirection.php | 4 +- src/Http/Middleware/SetupPageRedirection.php | 4 +- src/Http/Middleware/ThemeInitialization.php | 4 +- src/Http/Middleware/UrlRedirection.php | 4 +- .../Middleware/UserPreferencesLoading.php | 4 +- .../Middleware/ZeroConfPostConnection.php | 4 +- src/Navigation/Navigation.php | 4 +- src/Plugins.php | 5 ++- src/Table/Indexes.php | 4 +- src/Template.php | 3 +- src/Twig/AssetExtension.php | 4 +- src/UrlRedirector.php | 3 +- tests/classes/AbstractTestCase.php | 6 +-- tests/classes/ApplicationTest.php | 4 +- .../Container/ContainerBuilderTest.php | 23 ++++++++++++ tests/classes/CoreTest.php | 10 ----- 26 files changed, 107 insertions(+), 69 deletions(-) create mode 100644 src/Container/ContainerBuilder.php create mode 100644 tests/classes/Container/ContainerBuilderTest.php diff --git a/bin/console b/bin/console index a31ed99c27..eae5abc1db 100755 --- a/bin/console +++ b/bin/console @@ -7,7 +7,7 @@ use PhpMyAdmin\Command\SetVersionCommand; use PhpMyAdmin\Command\WriteGitRevisionCommand; use PhpMyAdmin\Command\TwigLintCommand; use PhpMyAdmin\Config; -use PhpMyAdmin\Core; +use PhpMyAdmin\Container\ContainerBuilder; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Tests\Stubs\DbiDummy; use Symfony\Component\Console\Application; @@ -26,7 +26,7 @@ if (! class_exists(Application::class)) { exit(1); } -$containerBuilder = Core::getContainerBuilder(); +$containerBuilder = ContainerBuilder::getContainer(); $cfg['environment'] = 'production'; $config = new Config(); $config->loadAndCheck(CONFIG_FILE); diff --git a/src/Application.php b/src/Application.php index 0a8faaa1ed..7e1003005f 100644 --- a/src/Application.php +++ b/src/Application.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin; use Fig\Http\Message\StatusCodeInterface; use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; use Laminas\HttpHandlerRunner\RequestHandlerRunner; +use PhpMyAdmin\Container\ContainerBuilder; use PhpMyAdmin\Http\Factory\ResponseFactory; use PhpMyAdmin\Http\Factory\ServerRequestFactory; use PhpMyAdmin\Http\Handler\ApplicationHandler; @@ -66,7 +67,7 @@ class Application public static function init(): self { /** @var Application $application */ - $application = Core::getContainerBuilder()->get(self::class); + $application = ContainerBuilder::getContainer()->get(self::class); return $application; } @@ -139,7 +140,7 @@ class Application return Routing::callControllerForRoute( $request, Routing::getDispatcher(), - Core::getContainerBuilder(), + ContainerBuilder::getContainer(), $this->responseFactory, ); } diff --git a/src/Container/ContainerBuilder.php b/src/Container/ContainerBuilder.php new file mode 100644 index 0000000000..290bc7a8c4 --- /dev/null +++ b/src/Container/ContainerBuilder.php @@ -0,0 +1,37 @@ +load('services_loader.php'); + + return $container; + } +} diff --git a/src/Controllers/Export/ExportController.php b/src/Controllers/Export/ExportController.php index 232eb5046e..0a363a59e1 100644 --- a/src/Controllers/Export/ExportController.php +++ b/src/Controllers/Export/ExportController.php @@ -5,6 +5,7 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\Export; use PhpMyAdmin\Config; +use PhpMyAdmin\Container\ContainerBuilder; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Database\ExportController as DatabaseExportController; use PhpMyAdmin\Core; @@ -301,7 +302,7 @@ final class ExportController extends AbstractController ); $GLOBALS['active_page'] = Url::getFromRoute('/database/export'); /** @var DatabaseExportController $controller */ - $controller = Core::getContainerBuilder()->get(DatabaseExportController::class); + $controller = ContainerBuilder::getContainer()->get(DatabaseExportController::class); $controller($request); return; diff --git a/src/Controllers/View/CreateController.php b/src/Controllers/View/CreateController.php index 5a56de7113..8e766a15d8 100644 --- a/src/Controllers/View/CreateController.php +++ b/src/Controllers/View/CreateController.php @@ -5,9 +5,9 @@ declare(strict_types=1); namespace PhpMyAdmin\Controllers\View; use PhpMyAdmin\Config; +use PhpMyAdmin\Container\ContainerBuilder; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Controllers\Table\StructureController; -use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\DbTableExists; @@ -232,7 +232,7 @@ class CreateController extends AbstractController if ($ajaxdialog) { $GLOBALS['message'] = Message::success(); /** @var StructureController $controller */ - $controller = Core::getContainerBuilder()->get(StructureController::class); + $controller = ContainerBuilder::getContainer()->get(StructureController::class); $controller($request); } else { $this->response->addJSON( diff --git a/src/Core.php b/src/Core.php index e9c8dbcaaf..9da5233879 100644 --- a/src/Core.php +++ b/src/Core.php @@ -6,10 +6,6 @@ namespace PhpMyAdmin; use PhpMyAdmin\Exceptions\MissingExtensionException; use PhpMyAdmin\Http\ServerRequest; -use Psr\Container\ContainerInterface; -use Symfony\Component\Config\FileLocator; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use function __; use function array_keys; @@ -58,8 +54,6 @@ use const FILTER_VALIDATE_IP; */ class Core { - public static ContainerInterface|null $containerBuilder = null; - /** * Removes insecure parts in a path; used before include() or * require() when a part of the path comes from an insecure source @@ -747,19 +741,6 @@ class Core return hash_equals($hmac, $signature); } - public static function getContainerBuilder(): ContainerInterface - { - if (self::$containerBuilder !== null) { - return self::$containerBuilder; - } - - self::$containerBuilder = new ContainerBuilder(); - $loader = new PhpFileLoader(self::$containerBuilder, new FileLocator(ROOT_PATH . 'app')); - $loader->load('services_loader.php'); - - return self::$containerBuilder; - } - public static function populateRequestWithEncryptedQueryParams(ServerRequest $request): ServerRequest { $queryParams = $request->getQueryParams(); diff --git a/src/Display/Results.php b/src/Display/Results.php index 34c1890ed8..a0cfe41fd4 100644 --- a/src/Display/Results.php +++ b/src/Display/Results.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Display; use PhpMyAdmin\Config; use PhpMyAdmin\Config\SpecialSchemaLinks; use PhpMyAdmin\ConfigStorage\Relation; +use PhpMyAdmin\Container\ContainerBuilder; use PhpMyAdmin\Core; use PhpMyAdmin\Current; use PhpMyAdmin\DatabaseInterface; @@ -1152,7 +1153,7 @@ class Results } /** @var ThemeManager $themeManager */ - $themeManager = Core::getContainerBuilder()->get(ThemeManager::class); + $themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class); $tmpImage = '