From 0d4d2a4935c8c5e22bb17cb98a62a2609c31e8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Sat, 19 Mar 2022 16:34:57 -0300 Subject: [PATCH] Add exceptions for invalid identifier names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adds the PhpMyAdmin\Dbal\InvalidIdentifierName exception - Adds the PhpMyAdmin\Dbal\InvalidDatabaseName exception - Adds the PhpMyAdmin\Dbal\InvalidTableName exception Signed-off-by: MaurĂ­cio Meneghini Fauth --- libraries/classes/Common.php | 9 ++- .../ConfigStorage/RelationParameters.php | 11 ++-- .../DropColumnConfirmationController.php | 12 ++-- .../Table/Maintenance/AnalyzeController.php | 3 +- .../Table/Maintenance/CheckController.php | 3 +- .../Table/Maintenance/ChecksumController.php | 3 +- .../Table/Maintenance/OptimizeController.php | 3 +- .../Table/Maintenance/RepairController.php | 3 +- .../Table/Partition/AnalyzeController.php | 3 +- .../Table/Partition/CheckController.php | 3 +- .../Table/Partition/DropController.php | 3 +- .../Table/Partition/OptimizeController.php | 3 +- .../Table/Partition/RebuildController.php | 3 +- .../Table/Partition/RepairController.php | 3 +- .../Table/Partition/TruncateController.php | 3 +- .../Transformation/WrapperController.php | 4 +- libraries/classes/Dbal/DatabaseName.php | 25 +++++-- .../classes/Dbal/InvalidDatabaseName.php | 29 +++++++++ .../classes/Dbal/InvalidIdentifierName.php | 11 ++++ libraries/classes/Dbal/InvalidTableName.php | 29 +++++++++ libraries/classes/Dbal/TableName.php | 25 +++++-- .../DropColumnConfirmationControllerTest.php | 2 +- test/classes/Dbal/DatabaseNameTest.php | 65 ++++++++----------- test/classes/Dbal/TableNameTest.php | 65 ++++++++----------- 24 files changed, 206 insertions(+), 117 deletions(-) create mode 100644 libraries/classes/Dbal/InvalidDatabaseName.php create mode 100644 libraries/classes/Dbal/InvalidIdentifierName.php create mode 100644 libraries/classes/Dbal/InvalidTableName.php diff --git a/libraries/classes/Common.php b/libraries/classes/Common.php index 940655de8f..a5a4cb4fce 100644 --- a/libraries/classes/Common.php +++ b/libraries/classes/Common.php @@ -6,14 +6,14 @@ namespace PhpMyAdmin; use PhpMyAdmin\ConfigStorage\Relation; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidDatabaseName; +use PhpMyAdmin\Dbal\InvalidTableName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Http\Factory\ServerRequestFactory; use PhpMyAdmin\Http\ServerRequest; use PhpMyAdmin\Plugins\AuthenticationPlugin; use PhpMyAdmin\SqlParser\Lexer; use Symfony\Component\DependencyInjection\ContainerInterface; -use Webmozart\Assert\Assert; -use Webmozart\Assert\InvalidArgumentException; use function __; use function array_pop; @@ -517,14 +517,13 @@ final class Common try { $GLOBALS['db'] = DatabaseName::fromValue($request->getParam('db'))->getName(); - } catch (InvalidArgumentException $exception) { + } catch (InvalidDatabaseName $exception) { $GLOBALS['db'] = ''; } try { - Assert::stringNotEmpty($GLOBALS['db']); $GLOBALS['table'] = TableName::fromValue($request->getParam('table'))->getName(); - } catch (InvalidArgumentException $exception) { + } catch (InvalidTableName $exception) { $GLOBALS['table'] = ''; } diff --git a/libraries/classes/ConfigStorage/RelationParameters.php b/libraries/classes/ConfigStorage/RelationParameters.php index 4c4bb4c162..780cb65bd0 100644 --- a/libraries/classes/ConfigStorage/RelationParameters.php +++ b/libraries/classes/ConfigStorage/RelationParameters.php @@ -23,10 +23,10 @@ use PhpMyAdmin\ConfigStorage\Features\TrackingFeature; use PhpMyAdmin\ConfigStorage\Features\UiPreferencesFeature; use PhpMyAdmin\ConfigStorage\Features\UserPreferencesFeature; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidDatabaseName; +use PhpMyAdmin\Dbal\InvalidTableName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Version; -use Webmozart\Assert\Assert; -use Webmozart\Assert\InvalidArgumentException; use function is_string; @@ -138,9 +138,8 @@ final class RelationParameters } try { - Assert::keyExists($params, 'db'); - $db = DatabaseName::fromValue($params['db']); - } catch (InvalidArgumentException $exception) { + $db = DatabaseName::fromValue($params['db'] ?? null); + } catch (InvalidDatabaseName $exception) { return new self($user, null); } @@ -465,7 +464,7 @@ final class RelationParameters { try { return TableName::fromValue($tableName); - } catch (InvalidArgumentException $exception) { + } catch (InvalidTableName $exception) { return null; } } diff --git a/libraries/classes/Controllers/Table/DropColumnConfirmationController.php b/libraries/classes/Controllers/Table/DropColumnConfirmationController.php index a068166516..d402d4b980 100644 --- a/libraries/classes/Controllers/Table/DropColumnConfirmationController.php +++ b/libraries/classes/Controllers/Table/DropColumnConfirmationController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\DbTableExists; use PhpMyAdmin\Http\ServerRequest; @@ -18,20 +19,17 @@ final class DropColumnConfirmationController extends AbstractController { public function __invoke(ServerRequest $request): void { + $fields = $request->getParsedBodyParam('selected_fld'); try { $db = DatabaseName::fromValue($request->getParsedBodyParam('db')); $table = TableName::fromValue($request->getParsedBodyParam('table')); - } catch (InvalidArgumentException $exception) { + Assert::allStringNotEmpty($fields); + } catch (InvalidIdentifierName $exception) { $this->response->setHttpResponseCode(400); $this->response->setRequestStatus(false); - $this->response->addJSON('message', __('Table not found.')); + $this->response->addJSON('message', $exception->getMessage()); return; - } - - $fields = $request->getParsedBodyParam('selected_fld'); - try { - Assert::allStringNotEmpty($fields); } catch (InvalidArgumentException $exception) { $this->response->setHttpResponseCode(400); $this->response->setRequestStatus(false); diff --git a/libraries/classes/Controllers/Table/Maintenance/AnalyzeController.php b/libraries/classes/Controllers/Table/Maintenance/AnalyzeController.php index 67d88225a8..11b3519d4b 100644 --- a/libraries/classes/Controllers/Table/Maintenance/AnalyzeController.php +++ b/libraries/classes/Controllers/Table/Maintenance/AnalyzeController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Maintenance; use PhpMyAdmin\Config; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -60,7 +61,7 @@ final class AnalyzeController extends AbstractController foreach ($selectedTablesParam as $table) { $selectedTables[] = TableName::fromValue($table); } - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName $exception) { $message = Message::error($exception->getMessage()); $this->response->setRequestStatus(false); $this->response->addJSON('message', $message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Maintenance/CheckController.php b/libraries/classes/Controllers/Table/Maintenance/CheckController.php index bb466ee059..f5bd549304 100644 --- a/libraries/classes/Controllers/Table/Maintenance/CheckController.php +++ b/libraries/classes/Controllers/Table/Maintenance/CheckController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Maintenance; use PhpMyAdmin\Config; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -60,7 +61,7 @@ final class CheckController extends AbstractController foreach ($selectedTablesParam as $table) { $selectedTables[] = TableName::fromValue($table); } - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName $exception) { $message = Message::error($exception->getMessage()); $this->response->setRequestStatus(false); $this->response->addJSON('message', $message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Maintenance/ChecksumController.php b/libraries/classes/Controllers/Table/Maintenance/ChecksumController.php index c3311366a4..d0d34b9a2c 100644 --- a/libraries/classes/Controllers/Table/Maintenance/ChecksumController.php +++ b/libraries/classes/Controllers/Table/Maintenance/ChecksumController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Maintenance; use PhpMyAdmin\Config; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -60,7 +61,7 @@ final class ChecksumController extends AbstractController foreach ($selectedTablesParam as $table) { $selectedTables[] = TableName::fromValue($table); } - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName $exception) { $message = Message::error($exception->getMessage()); $this->response->setRequestStatus(false); $this->response->addJSON('message', $message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Maintenance/OptimizeController.php b/libraries/classes/Controllers/Table/Maintenance/OptimizeController.php index e96520bedb..85af0f2e67 100644 --- a/libraries/classes/Controllers/Table/Maintenance/OptimizeController.php +++ b/libraries/classes/Controllers/Table/Maintenance/OptimizeController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Maintenance; use PhpMyAdmin\Config; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -60,7 +61,7 @@ final class OptimizeController extends AbstractController foreach ($selectedTablesParam as $table) { $selectedTables[] = TableName::fromValue($table); } - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName $exception) { $message = Message::error($exception->getMessage()); $this->response->setRequestStatus(false); $this->response->addJSON('message', $message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Maintenance/RepairController.php b/libraries/classes/Controllers/Table/Maintenance/RepairController.php index b341d91adc..c3754e9639 100644 --- a/libraries/classes/Controllers/Table/Maintenance/RepairController.php +++ b/libraries/classes/Controllers/Table/Maintenance/RepairController.php @@ -7,6 +7,7 @@ namespace PhpMyAdmin\Controllers\Table\Maintenance; use PhpMyAdmin\Config; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -60,7 +61,7 @@ final class RepairController extends AbstractController foreach ($selectedTablesParam as $table) { $selectedTables[] = TableName::fromValue($table); } - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName $exception) { $message = Message::error($exception->getMessage()); $this->response->setRequestStatus(false); $this->response->addJSON('message', $message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/AnalyzeController.php b/libraries/classes/Controllers/Table/Partition/AnalyzeController.php index 383f4a47f6..5f1ff7a2a0 100644 --- a/libraries/classes/Controllers/Table/Partition/AnalyzeController.php +++ b/libraries/classes/Controllers/Table/Partition/AnalyzeController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class AnalyzeController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/CheckController.php b/libraries/classes/Controllers/Table/Partition/CheckController.php index 34e162956c..8e9e1f005f 100644 --- a/libraries/classes/Controllers/Table/Partition/CheckController.php +++ b/libraries/classes/Controllers/Table/Partition/CheckController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class CheckController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/DropController.php b/libraries/classes/Controllers/Table/Partition/DropController.php index 1d437ff146..6b4872b0c1 100644 --- a/libraries/classes/Controllers/Table/Partition/DropController.php +++ b/libraries/classes/Controllers/Table/Partition/DropController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class DropController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/OptimizeController.php b/libraries/classes/Controllers/Table/Partition/OptimizeController.php index a23449c293..c57204e015 100644 --- a/libraries/classes/Controllers/Table/Partition/OptimizeController.php +++ b/libraries/classes/Controllers/Table/Partition/OptimizeController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class OptimizeController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/RebuildController.php b/libraries/classes/Controllers/Table/Partition/RebuildController.php index 11a65f70b1..c629a0d2b1 100644 --- a/libraries/classes/Controllers/Table/Partition/RebuildController.php +++ b/libraries/classes/Controllers/Table/Partition/RebuildController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class RebuildController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/RepairController.php b/libraries/classes/Controllers/Table/Partition/RepairController.php index f14f54a1b9..20ec3f2394 100644 --- a/libraries/classes/Controllers/Table/Partition/RepairController.php +++ b/libraries/classes/Controllers/Table/Partition/RepairController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class RepairController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Table/Partition/TruncateController.php b/libraries/classes/Controllers/Table/Partition/TruncateController.php index da15bd762f..b3c1d85b56 100644 --- a/libraries/classes/Controllers/Table/Partition/TruncateController.php +++ b/libraries/classes/Controllers/Table/Partition/TruncateController.php @@ -6,6 +6,7 @@ namespace PhpMyAdmin\Controllers\Table\Partition; use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Http\ServerRequest; @@ -40,7 +41,7 @@ final class TruncateController extends AbstractController Assert::stringNotEmpty($partitionName); $database = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName | InvalidArgumentException $exception) { $message = Message::error($exception->getMessage()); $this->response->addHTML($message->getDisplay()); diff --git a/libraries/classes/Controllers/Transformation/WrapperController.php b/libraries/classes/Controllers/Transformation/WrapperController.php index 548e842a6a..653dd2cee3 100644 --- a/libraries/classes/Controllers/Transformation/WrapperController.php +++ b/libraries/classes/Controllers/Transformation/WrapperController.php @@ -9,6 +9,7 @@ use PhpMyAdmin\Controllers\AbstractController; use PhpMyAdmin\Core; use PhpMyAdmin\DatabaseInterface; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidIdentifierName; use PhpMyAdmin\Dbal\TableName; use PhpMyAdmin\DbTableExists; use PhpMyAdmin\Http\ServerRequest; @@ -17,7 +18,6 @@ use PhpMyAdmin\ResponseRenderer; use PhpMyAdmin\Template; use PhpMyAdmin\Transformations; use PhpMyAdmin\Util; -use Webmozart\Assert\InvalidArgumentException; use function __; use function htmlspecialchars; @@ -65,7 +65,7 @@ class WrapperController extends AbstractController try { $db = DatabaseName::fromValue($request->getParam('db')); $table = TableName::fromValue($request->getParam('table')); - } catch (InvalidArgumentException $exception) { + } catch (InvalidIdentifierName $exception) { return; } diff --git a/libraries/classes/Dbal/DatabaseName.php b/libraries/classes/Dbal/DatabaseName.php index 773dca909b..039b06bbfe 100644 --- a/libraries/classes/Dbal/DatabaseName.php +++ b/libraries/classes/Dbal/DatabaseName.php @@ -28,20 +28,35 @@ final class DatabaseName implements Stringable /** * @param mixed $name * - * @throws InvalidArgumentException + * @throws InvalidDatabaseName */ private function __construct($name) { - Assert::stringNotEmpty($name); - Assert::maxLength($name, self::MAX_LENGTH); - Assert::notEndsWith($name, ' '); + try { + Assert::stringNotEmpty($name); + } catch (InvalidArgumentException $exception) { + throw InvalidDatabaseName::fromEmptyName(); + } + + try { + Assert::maxLength($name, self::MAX_LENGTH); + } catch (InvalidArgumentException $exception) { + throw InvalidDatabaseName::fromLongName(self::MAX_LENGTH); + } + + try { + Assert::notEndsWith($name, ' '); + } catch (InvalidArgumentException $exception) { + throw InvalidDatabaseName::fromNameWithTrailingSpace(); + } + $this->name = $name; } /** * @param mixed $name * - * @throws InvalidArgumentException + * @throws InvalidDatabaseName */ public static function fromValue($name): self { diff --git a/libraries/classes/Dbal/InvalidDatabaseName.php b/libraries/classes/Dbal/InvalidDatabaseName.php new file mode 100644 index 0000000000..339acca92d --- /dev/null +++ b/libraries/classes/Dbal/InvalidDatabaseName.php @@ -0,0 +1,29 @@ +name = $name; } /** * @param mixed $name * - * @throws InvalidArgumentException + * @throws InvalidTableName */ public static function fromValue($name): self { diff --git a/test/classes/Controllers/Table/DropColumnConfirmationControllerTest.php b/test/classes/Controllers/Table/DropColumnConfirmationControllerTest.php index 3312b41e71..b9358433ea 100644 --- a/test/classes/Controllers/Table/DropColumnConfirmationControllerTest.php +++ b/test/classes/Controllers/Table/DropColumnConfirmationControllerTest.php @@ -75,7 +75,7 @@ class DropColumnConfirmationControllerTest extends AbstractTestCase $this->assertSame(400, $response->getHttpResponseCode()); $this->assertFalse($response->hasSuccessState()); - $this->assertSame(['message' => 'Table not found.'], $response->getJSONResult()); + $this->assertSame(['message' => 'The database name must be a non-empty string.'], $response->getJSONResult()); $this->assertSame('', $response->getHTMLResult()); } } diff --git a/test/classes/Dbal/DatabaseNameTest.php b/test/classes/Dbal/DatabaseNameTest.php index 65e5202d1d..da029a6fd7 100644 --- a/test/classes/Dbal/DatabaseNameTest.php +++ b/test/classes/Dbal/DatabaseNameTest.php @@ -5,69 +5,60 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Dbal; use PhpMyAdmin\Dbal\DatabaseName; +use PhpMyAdmin\Dbal\InvalidDatabaseName; use PHPUnit\Framework\TestCase; -use Webmozart\Assert\InvalidArgumentException; use function str_repeat; /** * @covers \PhpMyAdmin\Dbal\DatabaseName + * @covers \PhpMyAdmin\Dbal\InvalidDatabaseName */ class DatabaseNameTest extends TestCase { - public function testEmptyName(): void + /** + * @dataProvider providerForTestValidNames + */ + public function testValidName(string $validName): void { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Expected a different value than "".'); - DatabaseName::fromValue(''); + $name = DatabaseName::fromValue($validName); + $this->assertEquals($validName, $name->getName()); + $this->assertEquals($validName, (string) $name); } - public function testNameWithTrailingWhitespace(): void + /** + * @return iterable + */ + public function providerForTestValidNames(): iterable { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Expected a value not to end with " ". Got: "a "'); - DatabaseName::fromValue('a '); - } - - public function testLongName(): void - { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage( - 'Expected a value to contain at most 64 characters. Got: ' - . '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"' - ); - DatabaseName::fromValue(str_repeat('a', 65)); - } - - public function testValidName(): void - { - $name = DatabaseName::fromValue('name'); - $this->assertEquals('name', $name->getName()); - $this->assertEquals('name', (string) $name); + yield ['name']; + yield ['0']; + yield [str_repeat('a', 64)]; } /** * @param mixed $name * - * @dataProvider providerForTestInvalidMixedNames + * @dataProvider providerForTestInvalidNames */ - public function testInvalidMixedNames($name, string $exceptionMessage): void + public function testInvalidNames($name, string $exceptionMessage): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(InvalidDatabaseName::class); $this->expectExceptionMessage($exceptionMessage); DatabaseName::fromValue($name); } /** - * @return mixed[][] - * @psalm-return non-empty-list + * @return iterable + * @psalm-return iterable */ - public function providerForTestInvalidMixedNames(): array + public function providerForTestInvalidNames(): iterable { - return [ - [null, 'Expected a string. Got: NULL'], - [1, 'Expected a string. Got: integer'], - [['db'], 'Expected a string. Got: array'], - ]; + yield 'null' => [null, 'The database name must be a non-empty string.']; + yield 'integer' => [1, 'The database name must be a non-empty string.']; + yield 'array' => [['database'], 'The database name must be a non-empty string.']; + yield 'empty string' => ['', 'The database name must be a non-empty string.']; + yield 'too long name' => [str_repeat('a', 65), 'The database name cannot be longer than 64 characters.']; + yield 'trailing space' => ['a ', 'The database name cannot end with a space character.']; } } diff --git a/test/classes/Dbal/TableNameTest.php b/test/classes/Dbal/TableNameTest.php index 7d195030f2..0ea928dc38 100644 --- a/test/classes/Dbal/TableNameTest.php +++ b/test/classes/Dbal/TableNameTest.php @@ -4,70 +4,61 @@ declare(strict_types=1); namespace PhpMyAdmin\Tests\Dbal; +use PhpMyAdmin\Dbal\InvalidTableName; use PhpMyAdmin\Dbal\TableName; use PHPUnit\Framework\TestCase; -use Webmozart\Assert\InvalidArgumentException; use function str_repeat; /** * @covers \PhpMyAdmin\Dbal\TableName + * @covers \PhpMyAdmin\Dbal\InvalidTableName */ class TableNameTest extends TestCase { - public function testEmptyName(): void + /** + * @dataProvider providerForTestValidNames + */ + public function testValidName(string $validName): void { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Expected a different value than "".'); - TableName::fromValue(''); + $name = TableName::fromValue($validName); + $this->assertEquals($validName, $name->getName()); + $this->assertEquals($validName, (string) $name); } - public function testNameWithTrailingWhitespace(): void + /** + * @return iterable + */ + public function providerForTestValidNames(): iterable { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage('Expected a value not to end with " ". Got: "a "'); - TableName::fromValue('a '); - } - - public function testLongName(): void - { - $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage( - 'Expected a value to contain at most 64 characters. Got: ' - . '"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"' - ); - TableName::fromValue(str_repeat('a', 65)); - } - - public function testValidName(): void - { - $name = TableName::fromValue('name'); - $this->assertEquals('name', $name->getName()); - $this->assertEquals('name', (string) $name); + yield ['name']; + yield ['0']; + yield [str_repeat('a', 64)]; } /** * @param mixed $name * - * @dataProvider providerForTestInvalidMixedNames + * @dataProvider providerForTestInvalidNames */ - public function testInvalidMixedNames($name, string $exceptionMessage): void + public function testInvalidNames($name, string $exceptionMessage): void { - $this->expectException(InvalidArgumentException::class); + $this->expectException(InvalidTableName::class); $this->expectExceptionMessage($exceptionMessage); TableName::fromValue($name); } /** - * @return mixed[][] - * @psalm-return non-empty-list + * @return iterable + * @psalm-return iterable */ - public function providerForTestInvalidMixedNames(): array + public function providerForTestInvalidNames(): iterable { - return [ - [null, 'Expected a string. Got: NULL'], - [1, 'Expected a string. Got: integer'], - [['table'], 'Expected a string. Got: array'], - ]; + yield 'null' => [null, 'The table name must be a non-empty string.']; + yield 'integer' => [1, 'The table name must be a non-empty string.']; + yield 'array' => [['table'], 'The table name must be a non-empty string.']; + yield 'empty string' => ['', 'The table name must be a non-empty string.']; + yield 'too long name' => [str_repeat('a', 65), 'The table name cannot be longer than 64 characters.']; + yield 'trailing space' => ['a ', 'The table name cannot end with a space character.']; } }