From adc834f1aeff3aa3fd925371f82d062fc63d33d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sat, 30 Mar 2024 21:36:05 -0300 Subject: [PATCH] Move SetConfigController to Controller\Navigation namespace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes the route to /navigation/update-width. Signed-off-by: MaurĂ­cio Meneghini Fauth --- app/services_controllers.php | 6 +- psalm-baseline.xml | 11 +-- resources/js/src/modules/functions/config.ts | 2 +- .../UpdateNavWidthConfigController.php} | 10 +-- src/Routing/Routes.php | 10 +-- .../UpdateNavWidthConfigControllerTest.php | 89 +++++++++++++++++++ tests/unit/Routing/RoutesTest.php | 4 +- 7 files changed, 111 insertions(+), 21 deletions(-) rename src/Controllers/{Config/SetConfigController.php => Navigation/UpdateNavWidthConfigController.php} (81%) create mode 100644 tests/unit/Controllers/Navigation/UpdateNavWidthConfigControllerTest.php diff --git a/app/services_controllers.php b/app/services_controllers.php index cb57780806..b5a6f44e87 100644 --- a/app/services_controllers.php +++ b/app/services_controllers.php @@ -8,7 +8,6 @@ use PhpMyAdmin\Controllers\ChangeLogController; use PhpMyAdmin\Controllers\CheckRelationsController; use PhpMyAdmin\Controllers\CollationConnectionController; use PhpMyAdmin\Controllers\ColumnController; -use PhpMyAdmin\Controllers\Config; use PhpMyAdmin\Controllers\Console; use PhpMyAdmin\Controllers\Database; use PhpMyAdmin\Controllers\DatabaseController; @@ -22,6 +21,7 @@ use PhpMyAdmin\Controllers\JavaScriptMessagesController; use PhpMyAdmin\Controllers\LicenseController; use PhpMyAdmin\Controllers\LintController; use PhpMyAdmin\Controllers\LogoutController; +use PhpMyAdmin\Controllers\Navigation\UpdateNavWidthConfigController; use PhpMyAdmin\Controllers\NavigationController; use PhpMyAdmin\Controllers\Normalization; use PhpMyAdmin\Controllers\Operations; @@ -73,8 +73,8 @@ return [ 'class' => ColumnController::class, 'arguments' => ['$response' => '@response', '$template' => '@template', '$dbi' => '@dbi'], ], - Config\SetConfigController::class => [ - 'class' => Config\SetConfigController::class, + UpdateNavWidthConfigController::class => [ + 'class' => UpdateNavWidthConfigController::class, 'arguments' => ['$response' => '@response', '$template' => '@template', '$config' => '@config'], ], Console\Bookmark\AddController::class => [ diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 9b0d47fc6f..fa16cf5303 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -854,11 +854,6 @@ - - - - - @@ -12565,6 +12560,12 @@ + + + + + + diff --git a/resources/js/src/modules/functions/config.ts b/resources/js/src/modules/functions/config.ts index 8422a990e6..a2ea8e20f9 100644 --- a/resources/js/src/modules/functions/config.ts +++ b/resources/js/src/modules/functions/config.ts @@ -4,7 +4,7 @@ import { CommonParams } from '../common.ts'; export function setConfigValue (value: number): void { $.ajax({ - url: 'index.php?route=/config/set', + url: 'index.php?route=/navigation/update-width', type: 'POST', dataType: 'json', data: { diff --git a/src/Controllers/Config/SetConfigController.php b/src/Controllers/Navigation/UpdateNavWidthConfigController.php similarity index 81% rename from src/Controllers/Config/SetConfigController.php rename to src/Controllers/Navigation/UpdateNavWidthConfigController.php index fd6b26d786..3a1c0c4afe 100644 --- a/src/Controllers/Config/SetConfigController.php +++ b/src/Controllers/Navigation/UpdateNavWidthConfigController.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace PhpMyAdmin\Controllers\Config; +namespace PhpMyAdmin\Controllers\Navigation; use PhpMyAdmin\Config; use PhpMyAdmin\Controllers\AbstractController; @@ -11,11 +11,12 @@ use PhpMyAdmin\Message; use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; +use function __; use function is_numeric; -final class SetConfigController extends AbstractController +final class UpdateNavWidthConfigController extends AbstractController { - public function __construct(ResponseRenderer $response, Template $template, private Config $config) + public function __construct(ResponseRenderer $response, Template $template, private readonly Config $config) { parent::__construct($response, $template); } @@ -25,13 +26,12 @@ final class SetConfigController extends AbstractController $value = $request->getParsedBodyParam('value'); if (! is_numeric($value) || $value < 0) { $this->response->setRequestStatus(false); - $this->response->addJSON(['message' => Message::error()]); + $this->response->addJSON(['message' => Message::error(__('Unexpected parameter value.'))]); return; } $result = $this->config->setUserValue(null, 'NavigationWidth', (int) $value); - if ($result === true) { return; } diff --git a/src/Routing/Routes.php b/src/Routing/Routes.php index 919b7a740d..fd664e271b 100644 --- a/src/Routing/Routes.php +++ b/src/Routing/Routes.php @@ -10,7 +10,6 @@ use PhpMyAdmin\Controllers\ChangeLogController; use PhpMyAdmin\Controllers\CheckRelationsController; use PhpMyAdmin\Controllers\CollationConnectionController; use PhpMyAdmin\Controllers\ColumnController; -use PhpMyAdmin\Controllers\Config; use PhpMyAdmin\Controllers\Console\Bookmark; use PhpMyAdmin\Controllers\Console\UpdateConfigController; use PhpMyAdmin\Controllers\Database; @@ -25,6 +24,7 @@ use PhpMyAdmin\Controllers\JavaScriptMessagesController; use PhpMyAdmin\Controllers\LicenseController; use PhpMyAdmin\Controllers\LintController; use PhpMyAdmin\Controllers\LogoutController; +use PhpMyAdmin\Controllers\Navigation\UpdateNavWidthConfigController; use PhpMyAdmin\Controllers\NavigationController; use PhpMyAdmin\Controllers\Normalization; use PhpMyAdmin\Controllers\Operations; @@ -54,9 +54,6 @@ final class Routes $routes->addRoute(['GET', 'POST'], '/check-relations', CheckRelationsController::class); $routes->post('/collation-connection', CollationConnectionController::class); $routes->post('/columns', ColumnController::class); - $routes->addGroup('/config', static function (RouteCollector $routes): void { - $routes->post('/set', Config\SetConfigController::class); - }); $routes->addGroup('/console', static function (RouteCollector $routes): void { $routes->addGroup('/bookmark', static function (RouteCollector $routes): void { $routes->post('/add', Bookmark\AddController::class); @@ -142,7 +139,10 @@ final class Routes $routes->addRoute(['GET', 'POST'], '/lint', LintController::class); $routes->addRoute(['GET', 'POST'], '/logout', LogoutController::class); $routes->get('/messages', JavaScriptMessagesController::class); - $routes->addRoute(['GET', 'POST'], '/navigation', NavigationController::class); + $routes->addGroup('/navigation', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', NavigationController::class); + $routes->post('/update-width', UpdateNavWidthConfigController::class); + }); $routes->addGroup('/normalization', static function (RouteCollector $routes): void { $routes->addRoute(['GET', 'POST'], '', Normalization\MainController::class); $routes->post('/1nf/step1', Normalization\FirstNormalForm\FirstStepController::class); diff --git a/tests/unit/Controllers/Navigation/UpdateNavWidthConfigControllerTest.php b/tests/unit/Controllers/Navigation/UpdateNavWidthConfigControllerTest.php new file mode 100644 index 0000000000..00c6eac8c9 --- /dev/null +++ b/tests/unit/Controllers/Navigation/UpdateNavWidthConfigControllerTest.php @@ -0,0 +1,89 @@ +createServerRequest('POST', 'https://example.com/') + ->withParsedBody(['value' => $value]); + + $config = new Config(); + $responseRenderer = new ResponseRenderer(); + $controller = new UpdateNavWidthConfigController($responseRenderer, new Template($config), $config); + $controller($request); + + self::assertSame($expected, $config->settings['NavigationWidth']); + self::assertSame([], $responseRenderer->getJSONResult()); + self::assertTrue($responseRenderer->hasSuccessState(), 'Should be a successful response.'); + } + + /** @return iterable */ + public static function validParamsProvider(): iterable + { + yield ['0', 0]; + yield ['1', 1]; + yield ['240', 240]; + } + + /** @param string|string[] $value */ + #[DataProvider('invalidParamsProvider')] + public function testInvalidParams(array|string $value): void + { + $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') + ->withParsedBody(['value' => $value]); + + $config = new Config(); + $responseRenderer = new ResponseRenderer(); + $controller = new UpdateNavWidthConfigController($responseRenderer, new Template($config), $config); + $controller($request); + + self::assertSame( + ['message' => Message::error('Unexpected parameter value.')->getDisplay()], + $responseRenderer->getJSONResult(), + ); + self::assertFalse($responseRenderer->hasSuccessState(), 'Should be a failed response.'); + } + + /** @return iterable */ + public static function invalidParamsProvider(): iterable + { + yield ['']; + yield ['invalid']; + yield [['invalid']]; + yield ['-1']; + } + + public function testFailedConfigSaving(): void + { + $request = ServerRequestFactory::create()->createServerRequest('POST', 'https://example.com/') + ->withParsedBody(['value' => '240']); + + $config = self::createStub(Config::class); + $config->method('setUserValue')->willReturn(Message::error('Could not save configuration')); + $responseRenderer = new ResponseRenderer(); + $controller = new UpdateNavWidthConfigController($responseRenderer, new Template($config), $config); + $controller($request); + + self::assertSame( + ['message' => Message::error('Could not save configuration')->getDisplay()], + $responseRenderer->getJSONResult(), + ); + self::assertFalse($responseRenderer->hasSuccessState(), 'Should be a failed response.'); + } +} diff --git a/tests/unit/Routing/RoutesTest.php b/tests/unit/Routing/RoutesTest.php index 1c85db204e..fcc7983751 100644 --- a/tests/unit/Routing/RoutesTest.php +++ b/tests/unit/Routing/RoutesTest.php @@ -12,7 +12,6 @@ use PhpMyAdmin\Controllers\ChangeLogController; use PhpMyAdmin\Controllers\CheckRelationsController; use PhpMyAdmin\Controllers\CollationConnectionController; use PhpMyAdmin\Controllers\ColumnController; -use PhpMyAdmin\Controllers\Config; use PhpMyAdmin\Controllers\Console\Bookmark; use PhpMyAdmin\Controllers\Console\UpdateConfigController; use PhpMyAdmin\Controllers\Database; @@ -28,6 +27,7 @@ use PhpMyAdmin\Controllers\JavaScriptMessagesController; use PhpMyAdmin\Controllers\LicenseController; use PhpMyAdmin\Controllers\LintController; use PhpMyAdmin\Controllers\LogoutController; +use PhpMyAdmin\Controllers\Navigation\UpdateNavWidthConfigController; use PhpMyAdmin\Controllers\NavigationController; use PhpMyAdmin\Controllers\Normalization; use PhpMyAdmin\Controllers\Operations; @@ -162,7 +162,6 @@ final class RoutesTest extends TestCase '/check-relations' => CheckRelationsController::class, '/collation-connection' => CollationConnectionController::class, '/columns' => ColumnController::class, - '/config/set' => Config\SetConfigController::class, '/console/bookmark/add' => Bookmark\AddController::class, '/console/update-config' => UpdateConfigController::class, '/database/central-columns' => Database\CentralColumnsController::class, @@ -214,6 +213,7 @@ final class RoutesTest extends TestCase '/lint' => LintController::class, '/logout' => LogoutController::class, '/navigation' => NavigationController::class, + '/navigation/update-width' => UpdateNavWidthConfigController::class, '/normalization' => Normalization\MainController::class, '/normalization/1nf/step1' => Normalization\FirstNormalForm\FirstStepController::class, '/normalization/1nf/step2' => Normalization\FirstNormalForm\SecondStepController::class,