From 71facac21376c9a722cdf85be1c8fb67b850f532 Mon Sep 17 00:00:00 2001 From: Martin Georgiev Date: Fri, 11 Apr 2025 02:12:55 +0100 Subject: [PATCH 1/7] chore: add missing unit tests --- .../ORM/Query/AST/Functions/InArrayTest.php | 32 +++++++++++++++++ .../ORM/Query/AST/Functions/RowToJsonTest.php | 34 +++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php create mode 100644 tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php new file mode 100644 index 00000000..084afe7c --- /dev/null +++ b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php @@ -0,0 +1,32 @@ + InArray::class, + ]; + } + + protected function getExpectedSqlStatements(): array + { + return [ + 'checks if value is in array' => 'SELECT ? = ANY(c0_.array1) AS sclr_0 FROM ContainsArrays c0_', + ]; + } + + protected function getDqlStatements(): array + { + return [ + 'checks if value is in array' => \sprintf('SELECT IN_ARRAY(:value, e.array1) FROM %s e', ContainsArrays::class), + ]; + } +} diff --git a/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php new file mode 100644 index 00000000..059ab60f --- /dev/null +++ b/tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowToJsonTest.php @@ -0,0 +1,34 @@ + RowToJson::class, + ]; + } + + protected function getExpectedSqlStatements(): array + { + return [ + 'converts row to json' => 'SELECT row_to_json(c0_.text1) AS sclr_0 FROM ContainsTexts c0_', + 'converts row with expression to json' => 'SELECT row_to_json(UPPER(c0_.text1)) AS sclr_0 FROM ContainsTexts c0_', + ]; + } + + protected function getDqlStatements(): array + { + return [ + 'converts row to json' => \sprintf('SELECT ROW_TO_JSON(e.text1) FROM %s e', ContainsTexts::class), + 'converts row with expression to json' => \sprintf('SELECT ROW_TO_JSON(UPPER(e.text1)) FROM %s e', ContainsTexts::class), + ]; + } +} From 11eadd7dec8b0931e308205f149e9a2f94396ae6 Mon Sep 17 00:00:00 2001 From: Martin Georgiev Date: Fri, 11 Apr 2025 02:20:01 +0100 Subject: [PATCH 2/7] address tests deprecations --- .../Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php | 2 +- tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php | 2 +- tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php | 2 +- tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php | 2 +- tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php | 4 ++-- .../MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php | 2 +- .../Utils/PHPArrayToPostgresValueTransformerTest.php | 3 +-- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php index e9edba99..cd35b2f2 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php @@ -85,5 +85,5 @@ public function throws_domain_exception_when_value_exceeds_range(string $outOfRa /** * @return array */ - abstract protected function provideOutOfRangeValues(): array; + abstract public static function provideOutOfRangeValues(): array; } diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php index ee6b34cd..7c5ae811 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php @@ -81,7 +81,7 @@ public function throws_domain_exception_when_value_exceeds_range(string $outOfRa /** * @return array */ - protected function provideOutOfRangeValues(): array + public static function provideOutOfRangeValues(): array { return [ ['9223372036854775808'], // PHP_INT_MAX + 1 diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php index 79d08698..cde1a5bb 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php @@ -52,7 +52,7 @@ public function can_transform_from_php_value(?array $phpValue, ?string $postgres * * @dataProvider provideValidTransformations */ - public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void + public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue, ?array $platformValue = null): void { $this->platform->method('convertFromBoolean') ->with($this->anything()) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php index e674b228..5335a058 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php @@ -67,7 +67,7 @@ public static function provideValidTransformations(): array /** * @return array */ - protected function provideOutOfRangeValues(): array + public static function provideOutOfRangeValues(): array { return [ ['2147483648'], // MAX_INTEGER + 1 diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php index 368ec42d..85c66f26 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php @@ -62,7 +62,7 @@ public static function provideValidTransformations(): array return [ [ 'phpValue' => null, - 'postgresJsonb' => null, + 'postgresValue' => null, ], [ 'phpValue' => [], @@ -85,7 +85,7 @@ public static function provideValidTransformations(): array 'key5' => [304, 404, 504, 604], ], ], - 'postgresJsonb' => '{{"key1":"value1","key2":false,"key3":"15","key4":15,"key5":[112,242,309,310]},{"key1":"value2","key2":true,"key3":"115","key4":115,"key5":[304,404,504,604]}}', + 'postgresValue' => '{{"key1":"value1","key2":false,"key3":"15","key4":15,"key5":[112,242,309,310]},{"key1":"value2","key2":true,"key3":"115","key4":115,"key5":[304,404,504,604]}}', ], ]; } diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php index cf3b6fd5..1b56eaa6 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php @@ -67,7 +67,7 @@ public static function provideValidTransformations(): array /** * @return array */ - protected function provideOutOfRangeValues(): array + public static function provideOutOfRangeValues(): array { return [ ['32768'], // MAX_SMALLINT + 1 diff --git a/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php b/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php index 3ad91054..bfb61c47 100644 --- a/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php +++ b/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php @@ -121,7 +121,7 @@ public function throws_invalid_argument_exception_when_tries_to_non_single_dimen } /** - * @return array + * @return array */ public static function provideInvalidTransformations(): array { @@ -135,7 +135,6 @@ public static function provideInvalidTransformations(): array 'test', ], ], - 'postgresValue' => '', ], ]; } From 36e640be92d7f8ce934f8068d8c5f6fc837b0de9 Mon Sep 17 00:00:00 2001 From: Martin Georgiev Date: Fri, 11 Apr 2025 02:23:22 +0100 Subject: [PATCH 3/7] improve reporting of phphunit --- ci/phpunit/config.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ci/phpunit/config.xml b/ci/phpunit/config.xml index 988fce74..dac394bf 100644 --- a/ci/phpunit/config.xml +++ b/ci/phpunit/config.xml @@ -9,7 +9,11 @@ failOnRisky="true" failOnWarning="true" beStrictAboutOutputDuringTests="true" - beStrictAboutTodoAnnotatedTests="true"> + displayDetailsOnTestsThatTriggerDeprecations="true" + displayDetailsOnTestsThatTriggerErrors="true" + displayDetailsOnTestsThatTriggerNotices="true" + displayDetailsOnTestsThatTriggerWarnings="true" + displayDetailsOnPhpunitDeprecations="true"> ../../tests From 1d559f3ae127edae8e9c7b1af1cd9a26cbc6b4d0 Mon Sep 17 00:00:00 2001 From: Martin Georgiev Date: Fri, 11 Apr 2025 12:16:27 +0100 Subject: [PATCH 4/7] - run CI on push to main - more descriptive provider method names - add missing exception handling tests --- .github/workflows/ci.yml | 9 ++++- .../DBAL/Types/BaseFloatArrayTestCase.php | 4 +- .../DBAL/Types/BaseIntegerArrayTestCase.php | 4 +- .../Doctrine/DBAL/Types/BigIntArrayTest.php | 4 +- .../Doctrine/DBAL/Types/CidrArrayTest.php | 31 +++++++++++++- .../Doctrine/DBAL/Types/CidrTest.php | 8 ++-- .../DBAL/Types/DoublePrecisionArrayTest.php | 4 +- .../Doctrine/DBAL/Types/InetArrayTest.php | 34 +++++++++++++++- .../Doctrine/DBAL/Types/InetTest.php | 40 ++++++++++++++++++- .../Doctrine/DBAL/Types/IntegerArrayTest.php | 4 +- .../Doctrine/DBAL/Types/JsonbArrayTest.php | 4 +- .../Doctrine/DBAL/Types/MacaddrArrayTest.php | 30 +++++++++++++- .../Doctrine/DBAL/Types/MacaddrTest.php | 8 ++-- .../Doctrine/DBAL/Types/RealArrayTest.php | 4 +- .../Doctrine/DBAL/Types/SmallIntArrayTest.php | 4 +- ...PHPArrayToPostgresValueTransformerTest.php | 4 +- 16 files changed, 160 insertions(+), 36 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index af047e25..4752ea8a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,11 @@ name: CI on: + push: + branches: + - main + paths-ignore: + - '.github/actions/release-please/**' pull_request: branches: - main @@ -19,10 +24,10 @@ jobs: run: | if [ "${{ github.event.pull_request.user.id }}" = "41898282" ]; then echo "run=false" >> $GITHUB_OUTPUT - echo "::notice::Skipping CI checks - release-please PR" + echo "::notice::Skipping CI checks - this a release-please bot's interaction" else echo "run=true" >> $GITHUB_OUTPUT - echo "::notice::CI checks will execute - the PR author is not the release-please bot" + echo "::notice::CI checks will execute - the actor is not the release-please bot" fi tests: diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php index 8061f18b..d825b2a0 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php @@ -15,7 +15,7 @@ abstract class BaseFloatArrayTestCase extends TestCase /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function can_detect_invalid_for_transformation_php_value(mixed $phpValue): void { @@ -25,7 +25,7 @@ public function can_detect_invalid_for_transformation_php_value(mixed $phpValue) /** * @return list */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ [true], diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php index cd35b2f2..68c98b30 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php @@ -15,7 +15,7 @@ abstract class BaseIntegerArrayTestCase extends TestCase /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function can_detect_invalid_for_transformation_php_value(mixed $phpValue): void { @@ -25,7 +25,7 @@ public function can_detect_invalid_for_transformation_php_value(mixed $phpValue) /** * @return list */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ [true], diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php index 7c5ae811..d5fe863d 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php @@ -22,9 +22,9 @@ public function has_name(): void self::assertEquals('bigint[]', $this->fixture->getName()); } - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { - return \array_merge(parent::provideInvalidTransformations(), [ + return \array_merge(parent::provideInvalidPHPValuesForDatabaseTransformation(), [ ['9223372036854775808'], // Greater than PHP_INT_MAX ['-9223372036854775809'], // Less than PHP_INT_MIN ['1.23e10'], // Scientific notation diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php index 0f2206d5..151e86c7 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php @@ -85,7 +85,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void { @@ -96,7 +96,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_databa /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'invalid type' => ['not-an-array'], @@ -111,4 +111,31 @@ public static function provideInvalidTransformations(): array 'malformed CIDR with spaces' => [['192.168.1.0 / 24']], // Space in CIDR notation ]; } + + /** + * @test + * + * @dataProvider provideInvalidDatabaseValuesForPHPTransformationForPHPTransformation + */ + public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void + { + $this->expectException(InvalidCidrArrayItemForPHPException::class); + $this->fixture->convertToPHPValue($postgresValue, $this->platform); + } + + /** + * @return array + */ + public static function provideInvalidDatabaseValuesForPHPTransformationForPHPTransformation(): array + { + return [ + 'invalid format' => ['{"invalid-cidr"}'], + 'invalid CIDR in array' => ['{"256.256.256.0/24"}'], + 'malformed array' => ['not-an-array'], + 'empty item in array' => ['{"192.168.1.0/24",""}'], + 'invalid item in array' => ['{"192.168.1.0/24","invalid-cidr"}'], + 'missing netmask in array' => ['{"192.168.1.0"}'], + 'invalid netmask in array' => ['{"192.168.1.0/33"}'], + ]; + } } diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php index 744b1ec2..d0279e32 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php @@ -102,7 +102,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void { @@ -113,7 +113,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_databa /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'empty string' => [''], @@ -136,7 +136,7 @@ public static function provideInvalidTransformations(): array /** * @test * - * @dataProvider provideInvalidDatabaseValues + * @dataProvider provideInvalidDatabaseValuesForPHPTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(mixed $dbValue): void { @@ -147,7 +147,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_php_va /** * @return array */ - public static function provideInvalidDatabaseValues(): array + public static function provideInvalidDatabaseValuesForPHPTransformation(): array { return [ 'invalid type' => [123], diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php index 1f5a1b11..9d91818c 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php @@ -23,9 +23,9 @@ public function has_name(): void self::assertEquals('double precision[]', $this->fixture->getName()); } - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { - return \array_merge(parent::provideInvalidTransformations(), [ + return \array_merge(parent::provideInvalidPHPValuesForDatabaseTransformation(), [ ['1.7976931348623157E+309'], // Too large ['-1.7976931348623157E+309'], // Too small ['1.123456789012345678'], // Too many decimal places (>15) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php index fabbf1c8..5460e926 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php @@ -105,7 +105,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void { @@ -116,7 +116,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_databa /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'invalid type' => ['not-an-array'], @@ -136,4 +136,34 @@ public static function provideInvalidTransformations(): array 'IPv6 with invalid segment length' => [['2001:db8:xyz:1:1:1:1:1']], ]; } + + /** + * @test + * + * @dataProvider provideInvalidDatabaseValuesForPHPTransformationForDatabaseTransformation + */ + public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void + { + $this->expectException(InvalidInetArrayItemForPHPException::class); + + $this->fixture->convertToPHPValue($postgresValue, $this->platform); + } + + /** + * @return array + */ + public static function provideInvalidDatabaseValuesForPHPTransformationForDatabaseTransformation(): array + { + return [ + 'invalid format' => ['{"invalid-ip"}'], + 'invalid IPv4 in array' => ['{"256.256.256.256"}'], + 'invalid IPv6 in array' => ['{"2001:xyz::1"}'], + 'malformed array' => ['not-an-array'], + 'empty item in array' => ['{"192.168.1.1",""}'], + 'invalid item in array' => ['{"192.168.1.1","invalid-ip"}'], + 'invalid CIDR in array' => ['{"192.168.1.0/33"}'], + 'incomplete IPv4 in array' => ['{"192.168.1"}'], + 'incomplete IPv6 in array' => ['{"2001:db8"}'], + ]; + } } diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php index cbdd6ef7..1d82bcb9 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php @@ -5,6 +5,7 @@ namespace Tests\MartinGeorgiev\Doctrine\DBAL\Types; use Doctrine\DBAL\Platforms\AbstractPlatform; +use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidInetForDatabaseException; use MartinGeorgiev\Doctrine\DBAL\Types\Exceptions\InvalidInetForPHPException; use MartinGeorgiev\Doctrine\DBAL\Types\Inet; use PHPUnit\Framework\MockObject\MockObject; @@ -109,7 +110,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void { @@ -120,9 +121,10 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_databa /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ + 'non-string value' => [123], 'empty string' => [''], 'invalid IPv4' => ['256.256.256.256'], 'invalid IPv6' => ['2001:xyz::1'], @@ -139,4 +141,38 @@ public static function provideInvalidTransformations(): array 'malformed IPv4-mapped IPv6' => ['::ffff:256.256.256.256'], ]; } + + /** + * @test + * + * @dataProvider provideInvalidDatabaseValuesForPHPTransformation + */ + public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(mixed $postgresValue): void + { + $this->expectException(InvalidInetForDatabaseException::class); + $this->fixture->convertToPHPValue($postgresValue, $this->platform); + } + + /** + * @return array + */ + public static function provideInvalidDatabaseValuesForPHPTransformation(): array + { + return [ + 'non-string value' => [123], + 'invalid IPv4' => ['256.256.256.256'], + 'invalid IPv6' => ['2001:xyz::1'], + 'invalid CIDR format' => ['192.168.1.0/xyz'], + 'invalid IPv4 CIDR netmask' => ['192.168.1.0/33'], + 'invalid IPv6 CIDR netmask' => ['2001:db8::/129'], + 'wrong format' => ['not-an-ip-address'], + 'incomplete IPv4' => ['192.168.1'], + 'incomplete IPv6' => ['2001:db8'], + 'IPv6 too many segments' => ['2001:db8:1:2:3:4:5:6:7'], + 'IPv6 invalid segment length' => ['2001:db8:xyz:1:1:1:1:1'], + 'IPv4 with invalid octet count' => ['192.168.1'], + 'IPv4 with character suffix' => ['192.168.1.1x'], + 'malformed IPv4-mapped IPv6' => ['::ffff:256.256.256.256'], + ]; + } } diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php index 5335a058..002e9c71 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php @@ -21,9 +21,9 @@ public function has_name(): void self::assertEquals('integer[]', $this->fixture->getName()); } - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { - return \array_merge(parent::provideInvalidTransformations(), [ + return \array_merge(parent::provideInvalidPHPValuesForDatabaseTransformation(), [ ['2147483648'], // Greater than max integer ['-2147483649'], // Less than min integer ['1.23e6'], // Scientific notation diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php index 85c66f26..af2c0c82 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php @@ -93,7 +93,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void { @@ -106,7 +106,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_php_va /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'non-array json' => ['"a string encoded as json"'], diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php index 3a154fa3..8dbbd9c9 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php @@ -89,7 +89,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void { @@ -100,7 +100,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_databa /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'invalid type' => ['not-an-array'], @@ -117,4 +117,30 @@ public static function provideInvalidTransformations(): array 'mixed case invalid chars' => [['GG:hh:II:jj:KK:ll']], ]; } + + /** + * @test + * + * @dataProvider provideInvalidDatabaseValuesForPHPTransformationForPHPTransformation + */ + public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void + { + $this->expectException(InvalidMacaddrArrayItemForPHPException::class); + + $this->fixture->convertToPHPValue($postgresValue, $this->platform); + } + + /** + * @return array + */ + public static function provideInvalidDatabaseValuesForPHPTransformationForPHPTransformation(): array + { + return [ + 'invalid format' => ['{"invalid-mac"}'], + 'invalid MAC in array' => ['{"00:11:22:33:44:ZZ"}'], + 'malformed array' => ['not-an-array'], + 'empty item in array' => ['{"08:00:2b:01:02:03",""}'], + 'invalid item in array' => ['{"08:00:2b:01:02:03","invalid-mac"}'], + ]; + } } diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php index 49cfcaa0..98f857ec 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php @@ -101,7 +101,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_database_value(mixed $phpValue): void { @@ -112,7 +112,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_databa /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'empty string' => [''], @@ -131,7 +131,7 @@ public static function provideInvalidTransformations(): array /** * @test * - * @dataProvider provideInvalidDatabaseValues + * @dataProvider provideInvalidDatabaseValuesForPHPTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(mixed $dbValue): void { @@ -142,7 +142,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_php_va /** * @return array */ - public static function provideInvalidDatabaseValues(): array + public static function provideInvalidDatabaseValuesForPHPTransformation(): array { return [ 'invalid type' => [123], diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php index c9f5d13a..bc56863b 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php @@ -22,9 +22,9 @@ public function has_name(): void self::assertEquals('real[]', $this->fixture->getName()); } - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { - return \array_merge(parent::provideInvalidTransformations(), [ + return \array_merge(parent::provideInvalidPHPValuesForDatabaseTransformation(), [ ['3.402823467E+38'], // Too large ['-3.402823467E+38'], // Too small ['1.1234567'], // Too many decimal places (>6) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php index 1b56eaa6..b343203b 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php @@ -21,9 +21,9 @@ public function has_name(): void self::assertEquals('smallint[]', $this->fixture->getName()); } - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { - return \array_merge(parent::provideInvalidTransformations(), [ + return \array_merge(parent::provideInvalidPHPValuesForDatabaseTransformation(), [ ['32768'], // Greater than max smallint ['-32769'], // Less than min smallint ['1.23e4'], // Scientific notation diff --git a/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php b/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php index bfb61c47..93ea60c8 100644 --- a/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php +++ b/tests/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php @@ -110,7 +110,7 @@ public static function provideValidTransformations(): array /** * @test * - * @dataProvider provideInvalidTransformations + * @dataProvider provideInvalidPHPValuesForDatabaseTransformation * * @param array $phpValue */ @@ -123,7 +123,7 @@ public function throws_invalid_argument_exception_when_tries_to_non_single_dimen /** * @return array */ - public static function provideInvalidTransformations(): array + public static function provideInvalidPHPValuesForDatabaseTransformation(): array { return [ 'multi-dimensioned array' => [ From 1633f90102a4c2bb1040fd54e649dba8ec27701a Mon Sep 17 00:00:00 2001 From: Martin Georgiev Date: Fri, 11 Apr 2025 12:22:40 +0100 Subject: [PATCH 5/7] no message --- tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php index 5460e926..06e6aee8 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php @@ -140,7 +140,7 @@ public static function provideInvalidPHPValuesForDatabaseTransformation(): array /** * @test * - * @dataProvider provideInvalidDatabaseValuesForPHPTransformationForDatabaseTransformation + * @dataProvider provideInvalidDatabaseValuesForPHPTransformation */ public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void { @@ -152,7 +152,7 @@ public function throws_exception_when_invalid_data_provided_to_convert_to_php_va /** * @return array */ - public static function provideInvalidDatabaseValuesForPHPTransformationForDatabaseTransformation(): array + public static function provideInvalidDatabaseValuesForPHPTransformation(): array { return [ 'invalid format' => ['{"invalid-ip"}'], From d56f1f0ffb15c86b61fba86dcede56932078ae2a Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 13:35:51 +0000 Subject: [PATCH 6/7] =?UTF-8?q?=F0=9F=93=9D=20CodeRabbit=20Chat:=20Update?= =?UTF-8?q?=20tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Doctrine/DBAL/Types/InetArrayTest.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php index 06e6aee8..0ea7e988 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php @@ -138,16 +138,20 @@ public static function provideInvalidPHPValuesForDatabaseTransformation(): array } /** + /** * @test * * @dataProvider provideInvalidDatabaseValuesForPHPTransformation */ - public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void - { - $this->expectException(InvalidInetArrayItemForPHPException::class); + public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void + { + // The parameter is typed as string since the data provider returns only string values. + // If non-string test cases are added in the future, update both the provider and this method signature accordingly. + $this- + >expectException(InvalidInetArrayItemForPHPException::class); $this->fixture->convertToPHPValue($postgresValue, $this->platform); - } + } /** * @return array From 0403aed56eff5144b132db7a327e00c5e12d8770 Mon Sep 17 00:00:00 2001 From: Martin Georgiev Date: Fri, 11 Apr 2025 14:36:30 +0100 Subject: [PATCH 7/7] =?UTF-8?q?Revert=20"=F0=9F=93=9D=20CodeRabbit=20Chat:?= =?UTF-8?q?=20Update=20tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayT?= =?UTF-8?q?est.php"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit d56f1f0ffb15c86b61fba86dcede56932078ae2a. --- .../Doctrine/DBAL/Types/InetArrayTest.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php index 0ea7e988..06e6aee8 100644 --- a/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php +++ b/tests/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php @@ -138,20 +138,16 @@ public static function provideInvalidPHPValuesForDatabaseTransformation(): array } /** - /** * @test * * @dataProvider provideInvalidDatabaseValuesForPHPTransformation */ - public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void - { - // The parameter is typed as string since the data provider returns only string values. - // If non-string test cases are added in the future, update both the provider and this method signature accordingly. - $this- + public function throws_exception_when_invalid_data_provided_to_convert_to_php_value(string $postgresValue): void + { + $this->expectException(InvalidInetArrayItemForPHPException::class); - >expectException(InvalidInetArrayItemForPHPException::class); $this->fixture->convertToPHPValue($postgresValue, $this->platform); - } + } /** * @return array