Merge pull request #18860 from MauricioFauth/container

Decouple from Symfony's container
This commit is contained in:
Maurício Meneghini Fauth 2023-12-22 21:18:27 -03:00 committed by GitHub
commit 0634b67c09
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 328 additions and 251 deletions

View File

@ -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);

View File

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

2
composer.lock generated
View File

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

View File

@ -1144,11 +1144,6 @@
<code><![CDATA[$request->getParsedBodyParam('sql_query')]]></code>
</MixedArgument>
</file>
<file src="src/Controllers/Database/MultiTableQuery/TablesController.php">
<PossiblyUnusedMethod>
<code>__construct</code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Database/MultiTableQueryController.php">
<PossiblyUnusedMethod>
<code>__construct</code>
@ -2149,9 +2144,6 @@
<PossiblyInvalidArgument>
<code><![CDATA[min($skip, $GLOBALS['read_limit'])]]></code>
</PossiblyInvalidArgument>
<PossiblyUnusedMethod>
<code>__construct</code>
</PossiblyUnusedMethod>
<RedundantCondition>
<code><![CDATA[! $GLOBALS['finished']]]></code>
<code><![CDATA[$GLOBALS['offset'] == 0]]></code>
@ -2234,9 +2226,6 @@
<code>$itemName</code>
<code>$itemType</code>
</MixedAssignment>
<PossiblyUnusedMethod>
<code>__construct</code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Normalization/AddNewPrimaryController.php">
<UnusedParam>
@ -2428,9 +2417,6 @@
<code>$showTable</code>
<code>$showTable</code>
</MixedAssignment>
<PossiblyUnusedMethod>
<code>__construct</code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Operations/ViewController.php">
<DeprecatedMethod>
@ -3176,9 +3162,6 @@
<code>$column</code>
<code>$currValue</code>
</MixedAssignment>
<PossiblyUnusedMethod>
<code>__construct</code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Sql/RelationalValuesController.php">
<MixedArgument>
@ -3209,9 +3192,6 @@
<code>$currentValue</code>
<code>$whereClause</code>
</MixedAssignment>
<PossiblyUnusedMethod>
<code>__construct</code>
</PossiblyUnusedMethod>
</file>
<file src="src/Controllers/Sql/SqlController.php">
<DeprecatedMethod>
@ -12242,11 +12222,6 @@
<code><![CDATA[$values['token']]]></code>
</MixedAssignment>
</file>
<file src="src/UrlRedirector.php">
<DeprecatedMethod>
<code>DatabaseInterface::getInstance()</code>
</DeprecatedMethod>
</file>
<file src="src/UserPassword.php">
<DeprecatedMethod>
<code>DatabaseInterface::getInstance()</code>
@ -12580,7 +12555,6 @@
<file src="tests/classes/AbstractTestCase.php">
<DeprecatedMethod>
<code>Config::getInstance()</code>
<code>DatabaseInterface::getInstance()</code>
</DeprecatedMethod>
<PossiblyUndefinedArrayOffset>
<code><![CDATA[$_SERVER['PHP_SELF']]]></code>
@ -13196,6 +13170,7 @@
<code>DatabaseInterface::getInstance()</code>
<code>DatabaseInterface::getInstance()</code>
<code>DatabaseInterface::getInstance()</code>
<code>DatabaseInterface::getInstance()</code>
</DeprecatedMethod>
<MixedArgument>
<code>$currentTable</code>

View File

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

View File

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Container;
use Psr\Container\ContainerInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder as SymfonyContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use const ROOT_PATH;
final class ContainerBuilder
{
public static ContainerInterface|null $container = null;
public static function getContainer(): ContainerInterface
{
if (self::$container !== null) {
return self::$container;
}
self::$container = self::getSymfonyContainer();
return self::$container;
}
private static function getSymfonyContainer(): ContainerInterface
{
$container = new SymfonyContainerBuilder();
$loader = new PhpFileLoader($container, new FileLocator(ROOT_PATH . 'app'));
$loader->load('services_loader.php');
return $container;
}
}

View File

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

View File

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

View File

@ -6,9 +6,6 @@ namespace PhpMyAdmin;
use PhpMyAdmin\Exceptions\MissingExtensionException;
use PhpMyAdmin\Http\ServerRequest;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use function __;
use function array_keys;
@ -57,8 +54,6 @@ use const FILTER_VALIDATE_IP;
*/
class Core
{
public static ContainerBuilder|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
@ -746,19 +741,6 @@ class Core
return hash_equals($hmac, $signature);
}
public static function getContainerBuilder(): ContainerBuilder
{
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();

View File

@ -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 = '<img class="fulltext" src="'
. $themeManager->theme->getImgPath($tmpImageFile)

View File

@ -8,6 +8,7 @@ declare(strict_types=1);
namespace PhpMyAdmin;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Favorites\RecentFavoriteTable;
use PhpMyAdmin\Favorites\RecentFavoriteTables;
use PhpMyAdmin\Favorites\TableType;
@ -278,7 +279,7 @@ class Header
$baseDir = defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : '';
/** @var ThemeManager $themeManager */
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
$theme = $themeManager->theme;
$version = self::getVersionParameter();

View File

@ -7,7 +7,7 @@ namespace PhpMyAdmin\Http\Middleware;
use Fig\Http\Message\StatusCodeInterface;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\Settings\Server;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Dbal\Connection;
use PhpMyAdmin\Exceptions\AuthenticationPluginException;
@ -43,7 +43,7 @@ final class Authentication implements MiddlewareInterface
}
/** @var AuthenticationPluginFactory $authPluginFactory */
$authPluginFactory = Core::getContainerBuilder()->get(AuthenticationPluginFactory::class);
$authPluginFactory = ContainerBuilder::getContainer()->get(AuthenticationPluginFactory::class);
try {
$authPlugin = $authPluginFactory->create();
} catch (AuthenticationPluginException $exception) {

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Theme\ThemeManager;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
@ -22,7 +22,7 @@ final class LanguageAndThemeCookieSaving implements MiddlewareInterface
{
$this->config->setCookie('pma_lang', (string) $GLOBALS['lang']);
/** @var ThemeManager $themeManager */
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
$themeManager->setThemeCookie();
return $handler->handle($request);

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Exceptions\ExitException;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\ServerRequest;
@ -32,7 +32,7 @@ final class MinimumCommonRedirection implements MiddlewareInterface
return $handler->handle($request);
}
$container = Core::getContainerBuilder();
$container = ContainerBuilder::getContainer();
/** @var ThemeManager $themeManager */
$themeManager = $container->get(ThemeManager::class);
$this->config->loadUserPreferences($themeManager, true);

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\ConfigFile;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Exceptions\ExitException;
use PhpMyAdmin\Http\Factory\ResponseFactory;
use PhpMyAdmin\Http\ServerRequest;
@ -35,7 +35,7 @@ final class SetupPageRedirection implements MiddlewareInterface
return $handler->handle($request);
}
$container = Core::getContainerBuilder();
$container = ContainerBuilder::getContainer();
/** @var ThemeManager $themeManager */
$themeManager = $container->get(ThemeManager::class);
$this->config->loadUserPreferences($themeManager, true);

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Theme\ThemeManager;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
@ -16,7 +16,7 @@ final class ThemeInitialization implements MiddlewareInterface
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
/** @var ThemeManager $themeManager */
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
$themeManager->initializeTheme();
return $handler->handle($request);

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Theme\ThemeManager;
use PhpMyAdmin\Tracking\Tracker;
use PhpMyAdmin\UrlRedirector;
@ -28,7 +28,7 @@ final class UrlRedirection implements MiddlewareInterface
return $handler->handle($request);
}
$container = Core::getContainerBuilder();
$container = ContainerBuilder::getContainer();
/** @var ThemeManager $themeManager */
$themeManager = $container->get(ThemeManager::class);
$this->config->loadUserPreferences($themeManager, true);

View File

@ -5,7 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Theme\ThemeManager;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
@ -21,7 +21,7 @@ final class UserPreferencesLoading implements MiddlewareInterface
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
/** @var ThemeManager $themeManager */
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
$this->config->loadUserPreferences($themeManager);
return $handler->handle($request);

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Http\Middleware;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\DatabaseInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
@ -24,7 +24,7 @@ final class ZeroConfPostConnection implements MiddlewareInterface
$settings = $this->config->getSettings();
if (! empty($GLOBALS['server']) && $settings->zeroConf) {
/** @var Relation $relation */
$relation = Core::getContainerBuilder()->get('relation');
$relation = ContainerBuilder::getContainer()->get('relation');
DatabaseInterface::getInstance()->postConnectControl($relation);
}

View File

@ -11,7 +11,7 @@ namespace PhpMyAdmin\Navigation;
use PhpMyAdmin\Config;
use PhpMyAdmin\Config\PageSettings;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Dbal\Connection;
use PhpMyAdmin\ResponseRenderer;
@ -256,7 +256,7 @@ class Navigation
private function getLogoSource(): string
{
/** @var ThemeManager $themeManager */
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
$theme = $themeManager->theme;
if (@file_exists($theme->getFsPath() . 'img/logo_left.png')) {

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace PhpMyAdmin;
use FilesystemIterator;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Html\MySQLDocumentation;
use PhpMyAdmin\Plugins\ExportPlugin;
use PhpMyAdmin\Plugins\ImportPlugin;
@ -65,7 +66,7 @@ class Plugins
}
if ($type === 'export') {
$container = Core::getContainerBuilder();
$container = ContainerBuilder::getContainer();
/** @psalm-suppress MixedMethodCall */
return new $class(
@ -154,7 +155,7 @@ class Plugins
}
if ($type === 'Export' && is_subclass_of($class, ExportPlugin::class)) {
$container = Core::getContainerBuilder();
$container = ContainerBuilder::getContainer();
$plugins[] = new $class(
$container->get('relation'),
$container->get('export'),

View File

@ -4,8 +4,8 @@ declare(strict_types=1);
namespace PhpMyAdmin\Table;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Controllers\Table\StructureController;
use PhpMyAdmin\Core;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Html\Generator;
use PhpMyAdmin\Http\ServerRequest;
@ -112,7 +112,7 @@ final class Indexes
}
/** @var StructureController $controller */
$controller = Core::getContainerBuilder()->get(StructureController::class);
$controller = ContainerBuilder::getContainer()->get(StructureController::class);
$controller($request);
}

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Twig\AssetExtension;
use PhpMyAdmin\Twig\CoreExtension;
use PhpMyAdmin\Twig\Extensions\Node\TransNode;
@ -61,7 +62,7 @@ class Template
$loader = new FilesystemLoader(self::TEMPLATES_FOLDER);
$twig = new Environment($loader, ['auto_reload' => true, 'cache' => $cacheDir]);
$twig->addRuntimeLoader(new ContainerRuntimeLoader(Core::getContainerBuilder()));
$twig->addRuntimeLoader(new ContainerRuntimeLoader(ContainerBuilder::getContainer()));
if ($isDevEnv) {
$twig->enableDebug();

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin\Twig;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Theme\ThemeManager;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
@ -22,7 +22,7 @@ final class AssetExtension extends AbstractExtension
public function getImagePath(string|null $filename = null, string|null $fallback = null): string
{
if ($this->themeManager === null) {
$themeManager = Core::getContainerBuilder()->get(ThemeManager::class);
$themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class);
if (! ($themeManager instanceof ThemeManager)) {
return '';
}

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace PhpMyAdmin;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Http\Response;
use function __;
@ -16,9 +17,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());
$container = ContainerBuilder::getContainer();
// Only output the http headers
$response = ResponseRenderer::getInstance();

View File

@ -7,7 +7,7 @@ namespace PhpMyAdmin\Tests;
use PhpMyAdmin\Cache;
use PhpMyAdmin\Config;
use PhpMyAdmin\ConfigStorage\Relation;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\Current;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Dbal\DbiExtension;
@ -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;
@ -84,55 +83,7 @@ abstract class AbstractTestCase extends TestCase
Cache::purge();
(new ReflectionProperty(Relation::class, 'cache'))->setValue(null, null);
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();
$containerBuilder = Core::getContainerBuilder();
$containerBuilder->set(ResponseRenderer::class, $response);
$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
{
/** @var ResponseRenderer $response */
$response = Core::getContainerBuilder()->get(ResponseRenderer::class);
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 */
$response = Core::getContainerBuilder()->get(ResponseRenderer::class);
$this->assertTrue($response->hasSuccessState(), 'expected the request not to fail');
ContainerBuilder::$container = null;
}
protected function createDatabaseInterface(DbiExtension|null $extension = null): DatabaseInterface
@ -185,7 +136,7 @@ abstract class AbstractTestCase extends TestCase
*/
protected function tearDown(): void
{
Core::$containerBuilder = null;
ContainerBuilder::$container = null;
DatabaseInterface::$instance = null;
Config::$instance = null;
(new ReflectionProperty(Template::class, 'twig'))->setValue(null, null);

View File

@ -6,7 +6,7 @@ namespace PhpMyAdmin\Tests;
use PhpMyAdmin\Application;
use PhpMyAdmin\Config;
use PhpMyAdmin\Core;
use PhpMyAdmin\Container\ContainerBuilder;
use PhpMyAdmin\ErrorHandler;
use PhpMyAdmin\Exceptions\ConfigException;
use PhpMyAdmin\Http\Factory\ResponseFactory;
@ -19,7 +19,7 @@ final class ApplicationTest extends AbstractTestCase
{
public function testInit(): void
{
$application = Core::getContainerBuilder()->get(Application::class);
$application = ContainerBuilder::getContainer()->get(Application::class);
self::assertInstanceOf(Application::class, $application);
self::assertSame($application, Application::init());
}

View File

@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Container;
use PhpMyAdmin\Container\ContainerBuilder;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\TestCase;
#[CoversClass(ContainerBuilder::class)]
final class ContainerBuilderTest extends TestCase
{
public function testGetContainer(): void
{
ContainerBuilder::$container = null;
$container = ContainerBuilder::getContainer();
self::assertSame($container, ContainerBuilder::getContainer());
ContainerBuilder::$container = null;
self::assertNotSame($container, ContainerBuilder::getContainer());
ContainerBuilder::$container = null;
}
}

View File

@ -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)]
@ -29,11 +30,7 @@ class TablesControllerTest extends AbstractTestCase
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
DatabaseInterface::$instance = $this->dbi;
parent::loadDbiIntoContainerBuilder();
$GLOBALS['server'] = 1;
parent::loadResponseIntoContainerBuilder();
}
public function testGetForeignKeyConstrainsForTable(): void
@ -41,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);
@ -57,7 +55,7 @@ class TablesControllerTest extends AbstractTestCase
],
],
],
$this->getResponseJsonResult(),
$responseRenderer->getJSONResult(),
);
}
}

View File

@ -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;
@ -312,13 +311,20 @@ class StructureControllerTest extends AbstractTestCase
*/
public function testGetValuesForMroongaTable(): void
{
parent::loadDbiIntoContainerBuilder();
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],

View File

@ -50,8 +50,6 @@ class ExportControllerTest extends AbstractTestCase
public function testExportController(): void
{
parent::loadDbiIntoContainerBuilder();
$GLOBALS['server'] = 1;
$GLOBALS['text_dir'] = 'ltr';
$GLOBALS['lang'] = 'en';

View File

@ -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)]
@ -32,15 +40,11 @@ class ImportControllerTest extends AbstractTestCase
public function testIndexParametrized(): void
{
parent::loadDbiIntoContainerBuilder();
parent::setLanguage();
$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';
@ -79,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();

View File

@ -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;
@ -34,8 +39,6 @@ class NavigationControllerTest extends AbstractTestCase
public function testIndex(): void
{
parent::loadDbiIntoContainerBuilder();
parent::setLanguage();
$GLOBALS['server'] = 1;
@ -44,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=';
@ -122,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('<div id=\'pma_navigation_tree_content\'>', $responseMessage);
@ -182,8 +192,6 @@ class NavigationControllerTest extends AbstractTestCase
public function testIndexWithPosAndValue(): void
{
parent::loadDbiIntoContainerBuilder();
parent::setLanguage();
$GLOBALS['server'] = 1;
@ -192,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
@ -272,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('<div id=\'pma_navigation_tree_content\'>', $responseMessage);

View File

@ -33,12 +33,8 @@ class MainControllerTest extends AbstractTestCase
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
DatabaseInterface::$instance = $this->dbi;
parent::loadDbiIntoContainerBuilder();
$GLOBALS['server'] = 1;
parent::loadResponseIntoContainerBuilder();
Current::$database = 'my_db';
Current::$table = 'test_tbl';
}

View File

@ -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,9 +49,6 @@ class TableControllerTest extends AbstractTestCase
$config->selectServer('1');
$config->settings['MaxDbList'] = 0;
$this->loadDbiIntoContainerBuilder();
$this->loadResponseIntoContainerBuilder();
$this->dummyDbi->addResult(
'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`',
[['test_db']],
@ -121,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());
}
}

View File

@ -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)]
@ -28,12 +36,8 @@ class EnumValuesControllerTest extends AbstractTestCase
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
DatabaseInterface::$instance = $this->dbi;
parent::loadDbiIntoContainerBuilder();
$GLOBALS['server'] = 1;
$GLOBALS['text_dir'] = 'ltr';
parent::loadResponseIntoContainerBuilder();
}
public function testGetEnumValuesError(): void
@ -52,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
@ -93,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(
[
@ -114,7 +151,7 @@ class EnumValuesControllerTest extends AbstractTestCase
. ' <option value="&quot;\&#039;">&quot;\&#039;</option>' . "\n"
. ' </select>' . "\n",
],
$this->getResponseJsonResult(),
$responseRenderer->getJSONResult(),
);
}
}

View File

@ -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)]
@ -28,12 +36,8 @@ class SetValuesControllerTest extends AbstractTestCase
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
DatabaseInterface::$instance = $this->dbi;
parent::loadDbiIntoContainerBuilder();
$GLOBALS['server'] = 1;
$GLOBALS['text_dir'] = 'ltr';
parent::loadResponseIntoContainerBuilder();
}
public function testError(): void
@ -53,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
@ -95,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(
[
@ -112,7 +149,7 @@ class SetValuesControllerTest extends AbstractTestCase
. ' <option value=""></option>' . "\n"
. ' </select>' . "\n",
],
$this->getResponseJsonResult(),
$responseRenderer->getJSONResult(),
);
}
}

View File

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

View File

@ -125,10 +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');
$this->dummyDbi->addResult(
@ -151,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';
@ -161,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']);
}
}

View File

@ -732,14 +732,4 @@ class CoreTest extends AbstractTestCase
self::assertSame('', Core::getEnv('PHPMYADMIN_GET_ENV_TEST'));
}
public function testGetContainerBuilder(): void
{
Core::$containerBuilder = null;
$containerBuilder = Core::getContainerBuilder();
self::assertSame($containerBuilder, Core::getContainerBuilder());
Core::$containerBuilder = null;
self::assertNotSame($containerBuilder, Core::getContainerBuilder());
Core::$containerBuilder = null;
}
}

View File

@ -32,8 +32,6 @@ class OptionsTest extends AbstractTestCase
$dbi = $this->createDatabaseInterface();
DatabaseInterface::$instance = $dbi;
parent::loadDbiIntoContainerBuilder();
$GLOBALS['server'] = 0;
Current::$table = 'table';

View File

@ -21,8 +21,6 @@ class PluginsTest extends AbstractTestCase
parent::setUp();
DatabaseInterface::$instance = $this->createDatabaseInterface();
parent::loadDbiIntoContainerBuilder();
}
public function testGetExport(): void

View File

@ -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);

View File

@ -33,8 +33,6 @@ class TrackerTest extends AbstractTestCase
DatabaseInterface::$instance = $this->createDatabaseInterface();
parent::loadDbiIntoContainerBuilder();
/**
* SET these to avoid undefined index error
*/