diff --git a/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsJsons.php b/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsJsons.php index 4008c271..3db348fc 100644 --- a/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsJsons.php +++ b/fixtures/MartinGeorgiev/Doctrine/Entity/ContainsJsons.php @@ -10,9 +10,15 @@ #[ORM\Entity()] class ContainsJsons extends Entity { + #[ORM\Column(type: 'jsonb')] + public array $jsonbObject1; + + #[ORM\Column(type: 'jsonb')] + public array $jsonbObject2; + #[ORM\Column(type: Types::JSON)] - public array $object1; + public array $jsonObject1; #[ORM\Column(type: Types::JSON)] - public array $object2; + public array $jsonObject2; } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php index 82fed6b4..effb369a 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAggTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAgg; +use PHPUnit\Framework\Attributes\Test; class ArrayAggTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_AGG' => ArrayAgg::class]; + return [ + 'ARRAY_AGG' => ArrayAgg::class, + ]; } - public function test_array_agg_with_text_array(): void + #[Test] + public function can_aggregate_text_arrays(): void { $dql = 'SELECT ARRAY_AGG(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -22,7 +26,8 @@ public function test_array_agg_with_text_array(): void $this->assertSame('{{apple,banana,orange}}', $result[0]['result']); } - public function test_array_agg_with_integer_array(): void + #[Test] + public function can_aggregate_integer_arrays(): void { $dql = 'SELECT ARRAY_AGG(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -31,7 +36,8 @@ public function test_array_agg_with_integer_array(): void $this->assertSame('{{1,2,3}}', $result[0]['result']); } - public function test_array_agg_with_boolean_array(): void + #[Test] + public function can_aggregate_boolean_arrays(): void { $dql = 'SELECT ARRAY_AGG(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php index ad9f5943..91a3df7a 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAppend; +use PHPUnit\Framework\Attributes\Test; class ArrayAppendTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_APPEND' => ArrayAppend::class]; + return [ + 'ARRAY_APPEND' => ArrayAppend::class, + ]; } - public function test_array_append_with_text_array(): void + #[Test] + public function can_append_to_text_array(): void { $dql = 'SELECT ARRAY_APPEND(t.textArray, \'orange\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -25,7 +29,8 @@ public function test_array_append_with_text_array(): void $this->assertSame(['apple', 'banana', 'orange', 'orange'], $actual); } - public function test_array_append_with_integer_array(): void + #[Test] + public function can_append_to_integer_array(): void { $dql = 'SELECT ARRAY_APPEND(t.integerArray, 3) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -37,7 +42,8 @@ public function test_array_append_with_integer_array(): void $this->assertSame([1, 2, 3, 3], $actual); } - public function test_array_append_with_boolean_array(): void + #[Test] + public function can_append_to_boolean_array(): void { $dql = 'SELECT ARRAY_APPEND(t.boolArray, true) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php index d92cac2b..8cf42a1c 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCardinality; +use PHPUnit\Framework\Attributes\Test; class ArrayCardinalityTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_CARDINALITY' => ArrayCardinality::class]; + return [ + 'ARRAY_CARDINALITY' => ArrayCardinality::class, + ]; } - public function test_array_cardinality_with_text_array(): void + #[Test] + public function can_get_text_array_cardinality(): void { $dql = 'SELECT ARRAY_CARDINALITY(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -23,7 +27,8 @@ public function test_array_cardinality_with_text_array(): void $this->assertSame(3, $result[0]['result']); } - public function test_array_cardinality_with_integer_array(): void + #[Test] + public function can_get_integer_array_cardinality(): void { $dql = 'SELECT ARRAY_CARDINALITY(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -33,7 +38,8 @@ public function test_array_cardinality_with_integer_array(): void $this->assertSame(3, $result[0]['result']); } - public function test_array_cardinality_with_boolean_array(): void + #[Test] + public function can_get_boolean_array_cardinality(): void { $dql = 'SELECT ARRAY_CARDINALITY(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php index 31e85c83..a1162da0 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCatTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCat; +use PHPUnit\Framework\Attributes\Test; class ArrayCatTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_CAT' => ArrayCat::class]; + return [ + 'ARRAY_CAT' => ArrayCat::class, + ]; } - public function test_array_cat_with_text_arrays(): void + #[Test] + public function can_concatenate_text_arrays(): void { $dql = 'SELECT ARRAY_CAT(:array1, :array2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -27,7 +31,8 @@ public function test_array_cat_with_text_arrays(): void $this->assertSame(['apple', 'banana', 'orange', 'kiwi'], $actual); } - public function test_array_cat_with_integer_arrays(): void + #[Test] + public function can_concatenate_integer_arrays(): void { $dql = 'SELECT ARRAY_CAT(:array1, :array2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -41,7 +46,8 @@ public function test_array_cat_with_integer_arrays(): void $this->assertSame([1, 2, 3, 4], $actual); } - public function test_array_cat_with_boolean_arrays(): void + #[Test] + public function can_concatenate_boolean_arrays(): void { $dql = 'SELECT ARRAY_CAT(:array1, :array2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -55,7 +61,8 @@ public function test_array_cat_with_boolean_arrays(): void $this->assertSame([true, false, true, true], $actual); } - public function test_array_cat_with_array_columns(): void + #[Test] + public function can_concatenate_array_columns(): void { $dql = 'SELECT ARRAY_CAT(t.textArray, t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php index 5ed3160d..f9cb634f 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayDimensionsTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayDimensions; +use PHPUnit\Framework\Attributes\Test; class ArrayDimensionsTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_DIMENSIONS' => ArrayDimensions::class]; + return [ + 'ARRAY_DIMENSIONS' => ArrayDimensions::class, + ]; } - public function test_array_dimensions_with_text_array(): void + #[Test] + public function can_get_text_array_dimensions(): void { $dql = 'SELECT ARRAY_DIMENSIONS(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -23,7 +27,8 @@ public function test_array_dimensions_with_text_array(): void $this->assertSame('[1:3]', $result[0]['result']); } - public function test_array_dimensions_with_integer_array(): void + #[Test] + public function can_get_integer_array_dimensions(): void { $dql = 'SELECT ARRAY_DIMENSIONS(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -33,7 +38,8 @@ public function test_array_dimensions_with_integer_array(): void $this->assertSame('[1:3]', $result[0]['result']); } - public function test_array_dimensions_with_boolean_array(): void + #[Test] + public function can_get_boolean_array_dimensions(): void { $dql = 'SELECT ARRAY_DIMENSIONS(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php index 7d6eec03..42a3215a 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayLength; +use PHPUnit\Framework\Attributes\Test; class ArrayLengthTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_LENGTH' => ArrayLength::class]; + return [ + 'ARRAY_LENGTH' => ArrayLength::class, + ]; } - public function test_array_length_with_text_array(): void + #[Test] + public function can_get_text_array_length(): void { $dql = 'SELECT ARRAY_LENGTH(t.textArray, 1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -24,7 +28,8 @@ public function test_array_length_with_text_array(): void $this->assertSame(3, $result[0]['result']); } - public function test_array_length_with_integer_array(): void + #[Test] + public function can_get_integer_array_length(): void { $dql = 'SELECT ARRAY_LENGTH(t.integerArray, 1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -35,7 +40,8 @@ public function test_array_length_with_integer_array(): void $this->assertSame(3, $result[0]['result']); } - public function test_array_length_with_boolean_array(): void + #[Test] + public function can_get_boolean_array_length(): void { $dql = 'SELECT ARRAY_LENGTH(t.boolArray, 1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -46,7 +52,8 @@ public function test_array_length_with_boolean_array(): void $this->assertSame(3, $result[0]['result']); } - public function test_array_length_with_invalid_dimension(): void + #[Test] + public function returns_null_for_invalid_dimension(): void { $dql = 'SELECT ARRAY_LENGTH(t.textArray, 2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php index 023f9cd5..6547e544 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayNumberOfDimensions; +use PHPUnit\Framework\Attributes\Test; class ArrayNumberOfDimensionsTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_NUMBER_OF_DIMENSIONS' => ArrayNumberOfDimensions::class]; + return [ + 'ARRAY_NUMBER_OF_DIMENSIONS' => ArrayNumberOfDimensions::class, + ]; } - public function test_array_number_of_dimensions_with_text_array(): void + #[Test] + public function can_get_text_array_number_of_dimensions(): void { $dql = 'SELECT ARRAY_NUMBER_OF_DIMENSIONS(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -24,7 +28,8 @@ public function test_array_number_of_dimensions_with_text_array(): void $this->assertSame(1, $result[0]['result']); } - public function test_array_number_of_dimensions_with_integer_array(): void + #[Test] + public function can_get_integer_array_number_of_dimensions(): void { $dql = 'SELECT ARRAY_NUMBER_OF_DIMENSIONS(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -35,7 +40,8 @@ public function test_array_number_of_dimensions_with_integer_array(): void $this->assertSame(1, $result[0]['result']); } - public function test_array_number_of_dimensions_with_boolean_array(): void + #[Test] + public function can_get_boolean_array_number_of_dimensions(): void { $dql = 'SELECT ARRAY_NUMBER_OF_DIMENSIONS(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionTest.php index 673d2103..66bc11b7 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionTest.php @@ -5,26 +5,31 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPosition; +use PHPUnit\Framework\Attributes\Test; class ArrayPositionTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_POSITION' => ArrayPosition::class]; + return [ + 'ARRAY_POSITION' => ArrayPosition::class, + ]; } - public function test_array_position_with_text_array(): void + #[Test] + public function returns_position_when_text_element_is_found(): void { - $dql = 'SELECT ARRAY_POSITION(t.textArray, \'banana\') as result + $dql = 'SELECT ARRAY_POSITION(t.textArray, \'orange\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertIsInt($result[0]['result']); - $this->assertSame(2, $result[0]['result']); + $this->assertSame(3, $result[0]['result']); } - public function test_array_position_with_integer_array(): void + #[Test] + public function returns_position_when_integer_element_is_found(): void { $dql = 'SELECT ARRAY_POSITION(t.integerArray, 2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -35,7 +40,8 @@ public function test_array_position_with_integer_array(): void $this->assertSame(2, $result[0]['result']); } - public function test_array_position_with_boolean_array(): void + #[Test] + public function returns_position_when_boolean_element_is_found(): void { $dql = 'SELECT ARRAY_POSITION(t.boolArray, false) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -46,7 +52,8 @@ public function test_array_position_with_boolean_array(): void $this->assertSame(2, $result[0]['result']); } - public function test_array_position_with_not_found_element(): void + #[Test] + public function returns_null_when_no_position_is_found(): void { $dql = 'SELECT ARRAY_POSITION(t.textArray, \'mango\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionsTest.php index bdefca5a..46ec978a 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionsTest.php @@ -5,27 +5,32 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPositions; +use PHPUnit\Framework\Attributes\Test; class ArrayPositionsTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_POSITIONS' => ArrayPositions::class]; + return [ + 'ARRAY_POSITIONS' => ArrayPositions::class, + ]; } - public function test_array_positions_with_text_array(): void + #[Test] + public function returns_positions_when_text_element_is_found(): void { $dql = 'SELECT ARRAY_POSITIONS(t.textArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t - WHERE t.id = 2'; + WHERE t.id = 3'; - $result = $this->executeDqlQuery($dql, ['value' => 'apple']); + $result = $this->executeDqlQuery($dql, ['value' => 'kiwi']); $actual = $this->transformPostgresArray($result[0]['result']); $this->assertIsArray($actual); - $this->assertSame([2], $actual); + $this->assertSame([3], $actual); } - public function test_array_positions_with_integer_array(): void + #[Test] + public function returns_positions_when_integer_element_is_found(): void { $dql = 'SELECT ARRAY_POSITIONS(t.integerArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -37,7 +42,8 @@ public function test_array_positions_with_integer_array(): void $this->assertSame([2], $actual); } - public function test_array_positions_with_boolean_array(): void + #[Test] + public function returns_positions_when_boolean_element_is_found(): void { $dql = 'SELECT ARRAY_POSITIONS(t.boolArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -49,7 +55,8 @@ public function test_array_positions_with_boolean_array(): void $this->assertSame([2], $actual); } - public function test_array_positions_with_not_found(): void + #[Test] + public function returns_empty_array_when_no_positions_are_found(): void { $dql = 'SELECT ARRAY_POSITIONS(t.textArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php index 7954d2fc..2a8ef9e7 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPrependTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPrepend; +use PHPUnit\Framework\Attributes\Test; class ArrayPrependTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_PREPEND' => ArrayPrepend::class]; + return [ + 'ARRAY_PREPEND' => ArrayPrepend::class, + ]; } - public function test_array_prepend_with_text_array(): void + #[Test] + public function can_prepend_to_text_array(): void { $dql = 'SELECT ARRAY_PREPEND(\'orange\', t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -25,7 +29,8 @@ public function test_array_prepend_with_text_array(): void $this->assertSame(['orange', 'apple', 'banana', 'orange'], $actual); } - public function test_array_prepend_with_integer_array(): void + #[Test] + public function can_prepend_to_integer_array(): void { $dql = 'SELECT ARRAY_PREPEND(3, t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -37,7 +42,8 @@ public function test_array_prepend_with_integer_array(): void $this->assertSame([3, 1, 2, 3], $actual); } - public function test_array_prepend_with_boolean_array(): void + #[Test] + public function can_prepend_to_boolean_array(): void { $dql = 'SELECT ARRAY_PREPEND(true, t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php index f7a99bc7..b83494dc 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayRemoveTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayRemove; +use PHPUnit\Framework\Attributes\Test; class ArrayRemoveTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_REMOVE' => ArrayRemove::class]; + return [ + 'ARRAY_REMOVE' => ArrayRemove::class, + ]; } - public function test_array_remove_with_text_array(): void + #[Test] + public function can_remove_text_elements(): void { $dql = 'SELECT ARRAY_REMOVE(t.textArray, \'banana\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -25,7 +29,8 @@ public function test_array_remove_with_text_array(): void $this->assertSame(['apple', 'orange'], $actual); } - public function test_array_remove_with_integer_array(): void + #[Test] + public function can_remove_integer_elements(): void { $dql = 'SELECT ARRAY_REMOVE(t.integerArray, 2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -37,7 +42,8 @@ public function test_array_remove_with_integer_array(): void $this->assertSame([1, 3], $actual); } - public function test_array_remove_with_boolean_array(): void + #[Test] + public function can_remove_boolean_elements(): void { $dql = 'SELECT ARRAY_REMOVE(t.boolArray, false) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -49,7 +55,8 @@ public function test_array_remove_with_boolean_array(): void $this->assertSame([true, true], $actual); } - public function test_array_remove_with_not_found_element(): void + #[Test] + public function leaves_array_unchanged_when_element_not_found(): void { $dql = 'SELECT ARRAY_REMOVE(t.textArray, \'mango\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php index e8e95deb..6f25e51b 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayReplaceTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayReplace; +use PHPUnit\Framework\Attributes\Test; class ArrayReplaceTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_REPLACE' => ArrayReplace::class]; + return [ + 'ARRAY_REPLACE' => ArrayReplace::class, + ]; } - public function test_array_replace_with_text_array(): void + #[Test] + public function can_replace_text_elements(): void { $dql = 'SELECT ARRAY_REPLACE(t.textArray, \'banana\', \'mango\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -25,7 +29,8 @@ public function test_array_replace_with_text_array(): void $this->assertSame(['apple', 'mango', 'orange'], $actual); } - public function test_array_replace_with_integer_array(): void + #[Test] + public function can_replace_integer_elements(): void { $dql = 'SELECT ARRAY_REPLACE(t.integerArray, 2, 5) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -37,7 +42,8 @@ public function test_array_replace_with_integer_array(): void $this->assertSame([1, 5, 3], $actual); } - public function test_array_replace_with_boolean_array(): void + #[Test] + public function can_replace_boolean_elements(): void { $dql = 'SELECT ARRAY_REPLACE(t.boolArray, false, true) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -49,7 +55,8 @@ public function test_array_replace_with_boolean_array(): void $this->assertSame([true, true, true], $actual); } - public function test_array_replace_with_not_found_element(): void + #[Test] + public function leaves_array_unchanged_when_element_not_found(): void { $dql = 'SELECT ARRAY_REPLACE(t.textArray, \'mango\', \'kiwi\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php index 2432d80c..385a5c46 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayShuffleTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayShuffle; +use PHPUnit\Framework\Attributes\Test; class ArrayShuffleTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_SHUFFLE' => ArrayShuffle::class]; + return [ + 'ARRAY_SHUFFLE' => ArrayShuffle::class, + ]; } - public function test_array_shuffle_with_text_array(): void + #[Test] + public function can_shuffle_text_array(): void { $dql = 'SELECT ARRAY_SHUFFLE(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -26,7 +30,8 @@ public function test_array_shuffle_with_text_array(): void $this->assertEqualsCanonicalizing(['apple', 'banana', 'orange'], $actual); } - public function test_array_shuffle_with_integer_array(): void + #[Test] + public function can_shuffle_integer_array(): void { $dql = 'SELECT ARRAY_SHUFFLE(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -39,7 +44,8 @@ public function test_array_shuffle_with_integer_array(): void $this->assertEqualsCanonicalizing([1, 2, 3], $actual); } - public function test_array_shuffle_with_boolean_array(): void + #[Test] + public function can_shuffle_boolean_array(): void { $dql = 'SELECT ARRAY_SHUFFLE(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php index 030c984b..511b2f38 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToJson; +use PHPUnit\Framework\Attributes\Test; class ArrayToJsonTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_TO_JSON' => ArrayToJson::class]; + return [ + 'ARRAY_TO_JSON' => ArrayToJson::class, + ]; } - public function test_array_to_json_with_text_array(): void + #[Test] + public function can_convert_text_array_to_json(): void { $dql = 'SELECT ARRAY_TO_JSON(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -23,7 +27,8 @@ public function test_array_to_json_with_text_array(): void $this->assertSame('["apple","banana","orange"]', $result[0]['result']); } - public function test_array_to_json_with_integer_array(): void + #[Test] + public function can_convert_integer_array_to_json(): void { $dql = 'SELECT ARRAY_TO_JSON(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -33,7 +38,8 @@ public function test_array_to_json_with_integer_array(): void $this->assertSame('[1,2,3]', $result[0]['result']); } - public function test_array_to_json_with_boolean_array(): void + #[Test] + public function can_convert_boolean_array_to_json(): void { $dql = 'SELECT ARRAY_TO_JSON(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php index 674832d5..ee901232 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToStringTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayToString; +use PHPUnit\Framework\Attributes\Test; class ArrayToStringTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['ARRAY_TO_STRING' => ArrayToString::class]; + return [ + 'ARRAY_TO_STRING' => ArrayToString::class, + ]; } - public function test_array_to_string_with_default_delimiter(): void + #[Test] + public function can_convert_to_string_with_comma_delimiter(): void { $dql = 'SELECT ARRAY_TO_STRING(t.textArray, \',\') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -22,7 +26,8 @@ public function test_array_to_string_with_default_delimiter(): void $this->assertSame('apple,banana,orange', $result[0]['result']); } - public function test_array_to_string_with_custom_delimiter(): void + #[Test] + public function can_convert_to_string_with_custom_delimiter(): void { $dql = 'SELECT ARRAY_TO_STRING(t.textArray, \' | \') as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php index 59da40bb..8a600e81 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CastTest.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Exception\DriverException; use Doctrine\ORM\Query\QueryException; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Cast; +use PHPUnit\Framework\Attributes\Test; use Tests\Integration\MartinGeorgiev\TestCase; class CastTest extends TestCase @@ -26,114 +27,129 @@ protected function getStringFunctions(): array ]; } - public function test_cast_text_to_integer(): void + #[Test] + public function can_convert_text_to_integer(): void { $dql = 'SELECT CAST(t.text1 AS INTEGER) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertSame(123, $result[0]['result']); + $this->assertSame(123, $result[0]['result']); } - public function test_cast_text_to_text(): void + #[Test] + public function can_convert_text_to_text(): void { $dql = 'SELECT CAST(t.text1 AS TEXT) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertSame('123', $result[0]['result']); + $this->assertSame('123', $result[0]['result']); } - public function test_cast_text_to_boolean(): void + #[Test] + public function can_convert_text_to_boolean(): void { $dql = 'SELECT CAST(t.text2 AS BOOLEAN) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertTrue($result[0]['result']); + $this->assertTrue($result[0]['result']); } - public function test_cast_text_to_decimal(): void + #[Test] + public function can_convert_text_to_decimal(): void { $dql = 'SELECT CAST(t.text1 AS DECIMAL(10, 2)) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertEquals('123.00', $result[0]['result']); + $this->assertEquals('123.00', $result[0]['result']); } - public function test_cast_array_to_text_array(): void + #[Test] + public function can_convert_array_to_text_array(): void { $dql = 'SELECT CAST(a.integerArray AS TEXT[]) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays a WHERE a.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertIsString($result[0]['result']); - static::assertStringContainsString('{', $result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertStringContainsString('{', $result[0]['result']); } - public function test_cast_boolean_array_to_integer_array(): void + #[Test] + public function can_convert_boolean_array_to_integer_array(): void { $dql = 'SELECT CAST(a.boolArray AS INTEGER[]) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays a WHERE a.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertIsString($result[0]['result']); - static::assertStringContainsString('{', $result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertStringContainsString('{', $result[0]['result']); } - public function test_cast_with_where_condition(): void + #[Test] + public function can_use_in_where_condition(): void { $dql = 'SELECT t.id FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE CAST(t.text1 AS INTEGER) > 100'; $result = $this->executeDqlQuery($dql); - static::assertNotEmpty($result); + $this->assertNotEmpty($result); } - public function test_cast_in_complex_query(): void + #[Test] + public function can_use_in_complex_query(): void { $dql = 'SELECT t.id, CAST(t.text1 AS INTEGER) as casted_text FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id IN (1, 2, 3)'; $result = $this->executeDqlQuery($dql); - static::assertNotEmpty($result); + $this->assertNotEmpty($result); } - public function test_cast_numeric_to_integer(): void + #[Test] + public function can_convert_numeric_to_integer(): void { $dql = 'SELECT CAST(n.decimal1 AS INTEGER) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertSame(11, $result[0]['result']); // PostgreSQL rounds 10.5 to 11 + $this->assertSame(11, $result[0]['result'], 'PostgreSQL is expected to round 10.5 to 11'); } - public function test_cast_numeric_to_decimal(): void + #[Test] + public function can_convert_numeric_to_decimal(): void { $dql = 'SELECT CAST(n.integer1 AS DECIMAL(10, 2)) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertEquals('10.00', $result[0]['result']); + $this->assertEquals('10.00', $result[0]['result']); } - public function test_cast_throws_with_invalid_type(): void + #[Test] + public function throws_exception_for_invalid_type(): void { $this->expectException(DriverException::class); $dql = "SELECT CAST('invalid' AS INVALID_TYPE) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_cast_throws_with_null_input(): void + #[Test] + public function throws_exception_for_null_input(): void { $this->expectException(QueryException::class); $dql = 'SELECT CAST(NULL AS INTEGER) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1'; $this->executeDqlQuery($dql); } - public function test_cast_lowercase_array_types(): void + #[Test] + public function can_use_lowercase_array_types(): void { $dql = 'SELECT CAST(a.integerArray AS int[]) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays a WHERE a.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertIsString($result[0]['result']); - static::assertStringContainsString('{', $result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertStringContainsString('{', $result[0]['result']); } - public function test_cast_mixed_case_array_types(): void + #[Test] + public function can_use_mixed_case_array_types(): void { $dql = 'SELECT CAST(a.integerArray AS Text[]) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays a WHERE a.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertIsString($result[0]['result']); - static::assertStringContainsString('{', $result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertStringContainsString('{', $result[0]['result']); } - public function test_cast_parameterized_decimal_array(): void + #[Test] + public function can_use_parameterized_decimal_array(): void { $dql = 'SELECT CAST(a.integerArray AS DECIMAL(10, 2)[]) AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays a WHERE a.id = 1'; $result = $this->executeDqlQuery($dql); - static::assertIsString($result[0]['result']); - static::assertStringContainsString('{', $result[0]['result']); + $this->assertIsString($result[0]['result']); + $this->assertStringContainsString('{', $result[0]['result']); } private function createTestTableForTextFixture(): void diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CbrtTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CbrtTest.php index d1743aed..d341cf9d 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CbrtTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CbrtTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Cbrt; +use PHPUnit\Framework\Attributes\Test; class CbrtTest extends NumericTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_cbrt_with_perfect_cube(): void + #[Test] + public function can_calculate_cube_root_of_perfect_cube(): void { $dql = 'SELECT CBRT(27.0) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -24,7 +26,8 @@ public function test_cbrt_with_perfect_cube(): void $this->assertEqualsWithDelta(3.0, $result[0]['result'], 0.0001); } - public function test_cbrt_with_non_perfect_cube(): void + #[Test] + public function can_calculate_cube_root_of_non_perfect_cube(): void { $dql = 'SELECT CBRT(10.0) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -33,7 +36,8 @@ public function test_cbrt_with_non_perfect_cube(): void $this->assertEqualsWithDelta(2.1544, $result[0]['result'], 0.0001); } - public function test_cbrt_with_negative_number(): void + #[Test] + public function can_calculate_cube_root_of_negative_number(): void { $dql = 'SELECT CBRT((-27.0)) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -42,7 +46,8 @@ public function test_cbrt_with_negative_number(): void $this->assertEqualsWithDelta(-3.0, $result[0]['result'], 0.0001); } - public function test_cbrt_with_column_value(): void + #[Test] + public function can_calculate_cube_root_of_column_value(): void { $dql = 'SELECT CBRT(n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CeilTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CeilTest.php index f749f74e..f32fa955 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CeilTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/CeilTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ceil; +use PHPUnit\Framework\Attributes\Test; class CeilTest extends NumericTestCase { @@ -15,21 +16,24 @@ protected function getStringFunctions(): array ]; } - public function test_ceil_with_positive_decimal(): void + #[Test] + public function ceil_with_positive_decimal(): void { $dql = 'SELECT CEIL(:number) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['number' => 10.5]); $this->assertEquals(11, $result[0]['result']); } - public function test_ceil_with_negative_decimal(): void + #[Test] + public function ceil_with_negative_decimal(): void { $dql = 'SELECT CEIL(:number) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['number' => -10.5]); $this->assertEquals(-10, $result[0]['result']); } - public function test_ceil_with_column_value(): void + #[Test] + public function ceil_with_column_value(): void { $dql = 'SELECT CEIL(t.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php index 978cbfde..3d55acab 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ContainsTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Contains; +use PHPUnit\Framework\Attributes\Test; class ContainsTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['CONTAINS' => Contains::class]; + return [ + 'CONTAINS' => Contains::class, + ]; } - public function test_contains_with_text_array(): void + #[Test] + public function returns_true_when_value_is_contained_in_text_array(): void { $dql = 'SELECT CONTAINS(t.textArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -23,7 +27,8 @@ public function test_contains_with_text_array(): void $this->assertTrue($result[0]['result']); } - public function test_contains_with_integer_array(): void + #[Test] + public function returns_true_when_value_is_contained_in_integer_array(): void { $dql = 'SELECT CONTAINS(t.integerArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -33,7 +38,8 @@ public function test_contains_with_integer_array(): void $this->assertTrue($result[0]['result']); } - public function test_contains_with_non_existing_element(): void + #[Test] + public function returns_false_for_non_existing_elements(): void { $dql = 'SELECT CONTAINS(t.textArray, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php index 35c1b104..22fe29e5 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateExtractTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DateExtract; +use PHPUnit\Framework\Attributes\Test; class DateExtractTest extends DateTestCase { protected function getStringFunctions(): array { - return ['DATE_EXTRACT' => DateExtract::class]; + return [ + 'DATE_EXTRACT' => DateExtract::class, + ]; } - public function test_date_extract_with_year(): void + #[Test] + public function can_extract_year(): void { $dql = "SELECT DATE_EXTRACT('year', t.date1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t @@ -22,7 +26,8 @@ public function test_date_extract_with_year(): void $this->assertSame('2023', $result[0]['result']); } - public function test_date_extract_with_month(): void + #[Test] + public function can_extract_month(): void { $dql = "SELECT DATE_EXTRACT('month', t.date1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t @@ -31,7 +36,8 @@ public function test_date_extract_with_month(): void $this->assertSame('6', $result[0]['result']); } - public function test_date_extract_with_day(): void + #[Test] + public function can_extract_day(): void { $dql = "SELECT DATE_EXTRACT('day', t.date1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t @@ -40,7 +46,8 @@ public function test_date_extract_with_day(): void $this->assertSame('15', $result[0]['result']); } - public function test_date_extract_with_column_reference(): void + #[Test] + public function can_extract_from_column_reference(): void { $dql = "SELECT DATE_EXTRACT('year', t.date1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php index 9e466d59..85cb5028 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DaterangeTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Daterange; +use PHPUnit\Framework\Attributes\Test; class DaterangeTest extends DateTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_daterange(): void + #[Test] + public function daterange(): void { $dql = 'SELECT DATERANGE(t.date1, t.date2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame('[2023-06-15,2023-06-16)', $result[0]['result']); } - public function test_daterange_with_bounds(): void + #[Test] + public function daterange_with_bounds(): void { $dql = "SELECT DATERANGE(t.date1, t.date2, '(]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DegreesTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DegreesTest.php index 1cb9140f..8e3faef3 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DegreesTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DegreesTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Degrees; +use PHPUnit\Framework\Attributes\Test; class DegreesTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_degrees(): void + #[Test] + public function degrees(): void { $dql = 'SELECT DEGREES(3.141592653589793) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertEqualsWithDelta(180.0, $result[0]['result'], 0.0001); } - public function test_degrees_with_entity_property(): void + #[Test] + public function degrees_with_entity_property(): void { $dql = 'SELECT DEGREES(n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php index 241a4b33..6fca041f 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DeleteAtPath; +use PHPUnit\Framework\Attributes\Test; class DeleteAtPathTest extends JsonTestCase { protected function getStringFunctions(): array { - return ['DELETE_AT_PATH' => DeleteAtPath::class]; + return [ + 'DELETE_AT_PATH' => DeleteAtPath::class, + ]; } - public function test_delete_at_path_simple(): void + #[Test] + public function can_delete_simple_path(): void { $dql = 'SELECT DELETE_AT_PATH(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -25,7 +29,8 @@ public function test_delete_at_path_simple(): void $this->assertSame('{"a": {}}', $result[0]['result']); } - public function test_delete_at_path_multiple_elements(): void + #[Test] + public function can_delete_multiple_elements(): void { $dql = 'SELECT DELETE_AT_PATH(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -37,7 +42,8 @@ public function test_delete_at_path_multiple_elements(): void $this->assertSame('{"a": {"c": 2}}', $result[0]['result']); } - public function test_delete_at_path_with_array(): void + #[Test] + public function can_delete_array_element(): void { $dql = 'SELECT DELETE_AT_PATH(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -49,10 +55,11 @@ public function test_delete_at_path_with_array(): void $this->assertSame('{"a": [1, 3]}', $result[0]['result']); } - public function test_delete_at_path_with_column_reference(): void + #[Test] + public function can_delete_with_column_reference(): void { - $dql = 'SELECT DELETE_AT_PATH(t.object1, :path) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT DELETE_AT_PATH(t.jsonbObject1, :path) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['path' => '{nested,value}']); $this->assertIsString($result[0]['result']); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ExpTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ExpTest.php index 95b24e10..5db8afe9 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ExpTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ExpTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Exp; +use PHPUnit\Framework\Attributes\Test; class ExpTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_exp(): void + #[Test] + public function exp(): void { $dql = 'SELECT EXP(1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertEqualsWithDelta(2.718281828459, $result[0]['result'], 0.0001); } - public function test_exp_with_entity_property(): void + #[Test] + public function exp_with_entity_property(): void { $dql = 'SELECT EXP(n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FloorTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FloorTest.php index 48c3cc59..2c4aa0dd 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FloorTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/FloorTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Floor; +use PHPUnit\Framework\Attributes\Test; class FloorTest extends NumericTestCase { @@ -15,21 +16,24 @@ protected function getStringFunctions(): array ]; } - public function test_floor_with_positive_decimal(): void + #[Test] + public function floor_with_positive_decimal(): void { $dql = 'SELECT FLOOR(:number) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['number' => 10.5]); $this->assertEquals(10, $result[0]['result']); } - public function test_floor_with_negative_decimal(): void + #[Test] + public function floor_with_negative_decimal(): void { $dql = 'SELECT FLOOR(:number) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['number' => -10.5]); $this->assertEquals(-11, $result[0]['result']); } - public function test_floor_with_column_value(): void + #[Test] + public function floor_with_column_value(): void { $dql = 'SELECT FLOOR(t.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php index d4e6560d..76e62384 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IRegexpTest.php @@ -5,8 +5,9 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\IRegexp; +use PHPUnit\Framework\Attributes\Test; -class IRegexpTest extends JsonTestCase +class IRegexpTest extends TextTestCase { protected function getStringFunctions(): array { @@ -15,20 +16,49 @@ protected function getStringFunctions(): array ]; } - public function test_iregexp(): void + #[Test] + public function returns_true_when_pattern_matches_text_field(): void { - // NOTE: Using string literals for arguments due to DQL limitations with field extraction. - $dql = "SELECT IREGEXP('John', 'j.*n') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT IREGEXP(t.text1, 'test.*string') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - $this->assertIsBool($result[0]['result']); $this->assertTrue($result[0]['result']); } - public function test_iregexp_negative(): void + #[Test] + public function returns_true_when_pattern_matches_with_case_insensitive(): void { - $dql = "SELECT IREGEXP('John', 'Jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT IREGEXP(t.text1, 'TEST.*STRING') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_false_when_pattern_does_not_match(): void + { + $dql = "SELECT IREGEXP(t.text1, 'nonexistent.*pattern') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - $this->assertIsBool($result[0]['result']); $this->assertFalse($result[0]['result']); } + + #[Test] + public function returns_true_when_matching_second_text_field(): void + { + $dql = "SELECT IREGEXP(t.text2, 'another.*string') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_true_when_matching_word_boundaries(): void + { + // POSIX word boundary pattern: [[:<:]]is[[:>:]] + // - [[:<:]] = start of word (word boundary at beginning) + // - is = literal word 'is' + // - [[:>:]] = end of word (word boundary at end) + // This matches 'is' as a complete word, considering letters, numbers, and underscores as word characters. + // Examples: 'this is test' ✅, 'is great' ✅, 'island' ❌, 'is_var' ❌, 'is123' ❌ + $dql = "SELECT IREGEXP(t.text1, '[[:<:]]is[[:>:]]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php index 072642a6..696540f9 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/IlikeTest.php @@ -5,8 +5,9 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ilike; +use PHPUnit\Framework\Attributes\Test; -class IlikeTest extends JsonTestCase +class IlikeTest extends TextTestCase { protected function getStringFunctions(): array { @@ -15,18 +16,43 @@ protected function getStringFunctions(): array ]; } - public function test_ilike(): void + #[Test] + public function returns_true_for_case_insensitive_matching_string(): void { - // NOTE: Using string literals for arguments due to DQL limitations with field extraction. - $dql = "SELECT ILIKE('John', 'john') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT ILIKE(t.text1, '%test%') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertTrue($result[0]['result']); } - public function test_ilike_negative(): void + #[Test] + public function returns_true_for_case_insensitive_matching_with_different_case(): void { - $dql = "SELECT ILIKE('John', 'jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT ILIKE(t.text1, '%TEST%') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_false_for_non_matching_string(): void + { + $dql = "SELECT ILIKE(t.text1, 'nonexistent') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertFalse($result[0]['result']); } + + #[Test] + public function returns_true_when_matching_second_text_field(): void + { + $dql = "SELECT ILIKE(t.text2, '%another%') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_true_when_matching_partial_string(): void + { + $dql = "SELECT ILIKE(t.text1, '%test%') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php index 5ecc0cab..e2c5ccc6 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/InArrayTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\InArray; +use PHPUnit\Framework\Attributes\Test; class InArrayTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['IN_ARRAY' => InArray::class]; + return [ + 'IN_ARRAY' => InArray::class, + ]; } - public function test_in_array_with_text_element(): void + #[Test] + public function returns_true_when_text_element_exists_in_array(): void { $dql = 'SELECT IN_ARRAY(:value, t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -23,7 +27,8 @@ public function test_in_array_with_text_element(): void $this->assertTrue($result[0]['result']); } - public function test_in_array_with_integer_element(): void + #[Test] + public function returns_true_when_integer_element_exists_in_array(): void { $dql = 'SELECT IN_ARRAY(:value, t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -33,7 +38,8 @@ public function test_in_array_with_integer_element(): void $this->assertTrue($result[0]['result']); } - public function test_in_array_with_non_existing_element(): void + #[Test] + public function returns_false_for_non_existing_element(): void { $dql = 'SELECT IN_ARRAY(:value, t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php index 40cd0d74..5ed9ffda 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int4rangeTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Int4range; +use PHPUnit\Framework\Attributes\Test; class Int4rangeTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_int4range(): void + #[Test] + public function can_create_integer_range_with_default_bounds(): void { $dql = 'SELECT INT4RANGE(t.integer1, t.integer2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame('[10,20)', $result[0]['result']); } - public function test_int4range_with_bounds(): void + #[Test] + public function can_create_integer_range_with_custom_bounds(): void { $dql = "SELECT INT4RANGE(t.integer1, t.integer2, '(]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php index 4404d4f9..ca710bb1 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/Int8rangeTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Int8range; +use PHPUnit\Framework\Attributes\Test; class Int8rangeTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_int8range(): void + #[Test] + public function int8range(): void { $dql = 'SELECT INT8RANGE(t.bigint1, t.bigint2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame('[1000,2000)', $result[0]['result']); } - public function test_int8range_with_bounds(): void + #[Test] + public function int8range_with_bounds(): void { $dql = "SELECT INT8RANGE(t.bigint1, t.bigint2, '(]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php index 61a6498e..f3b100ac 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonAggTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonAgg; +use PHPUnit\Framework\Attributes\Test; class JsonAggTest extends ArrayTestCase { protected function getStringFunctions(): array { - return ['JSON_AGG' => JsonAgg::class]; + return [ + 'JSON_AGG' => JsonAgg::class, + ]; } - public function test_json_agg_with_text_array(): void + #[Test] + public function can_aggregate_text_arrays_to_json(): void { $dql = 'SELECT JSON_AGG(t.textArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -26,7 +30,8 @@ public function test_json_agg_with_text_array(): void $this->assertSame(['apple', 'banana', 'orange'], $decoded[0]); } - public function test_json_agg_with_integer_array(): void + #[Test] + public function can_aggregate_integer_arrays_to_json(): void { $dql = 'SELECT JSON_AGG(t.integerArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t @@ -39,7 +44,8 @@ public function test_json_agg_with_integer_array(): void $this->assertSame([1, 2, 3], $decoded[0]); } - public function test_json_agg_with_boolean_array(): void + #[Test] + public function can_aggregate_boolean_arrays_to_json(): void { $dql = 'SELECT JSON_AGG(t.boolArray) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php new file mode 100644 index 00000000..0322a00a --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php @@ -0,0 +1,109 @@ + JsonEach::class, + ]; + } + + /** + * @param array> $result Query results from executeDqlQuery() + * @param int $expectedCount Expected number of key-value pairs + * + * @return array Array of extracted keys + */ + private function extractAndValidateKeysFromJsonEachResult(array $result, int $expectedCount): array + { + $this->assertCount($expectedCount, $result); + + $extractedKeys = []; + foreach ($result as $row) { + $this->assertIsArray($row, 'Query result row should be an array'); + $this->assertValidTupleStructure($row); + $extractedKeys[] = $this->extractKeysFromTupleResult($row); + } + + return $extractedKeys; + } + + /** + * @param array $extractedKeys + * @param array $expectedKeys Keys expected to be among the extracted keys + */ + private function assertExtractedKeys(array $extractedKeys, array $expectedKeys): void + { + $expectedCount = \count($expectedKeys); + $this->assertExpectedKeysArePresent($extractedKeys, $expectedKeys); + $this->assertCount($expectedCount, $extractedKeys, \sprintf('Should extract exactly %d keys from JSON object', $expectedCount)); + } + + #[Test] + public function extracts_key_value_pairs_from_standard_json_object(): void + { + $dql = 'SELECT JSON_EACH(t.jsonObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + WHERE t.id = 1'; + $result = $this->executeDqlQuery($dql); + + $extractedKeys = $this->extractAndValidateKeysFromJsonEachResult($result, 4); + $this->assertExtractedKeys($extractedKeys, ['name', 'age', 'address', 'tags']); + } + + #[Test] + public function returns_empty_result_for_empty_object(): void + { + $dql = 'SELECT JSON_EACH(t.jsonObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + WHERE t.id = 4'; + $result = $this->executeDqlQuery($dql); + $this->assertCount(0, $result); + } + + #[Test] + public function extracts_key_value_pairs_from_alternative_json_object(): void + { + $dql = 'SELECT JSON_EACH(t.jsonObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + WHERE t.id = 2'; + $result = $this->executeDqlQuery($dql); + + $extractedKeys = $this->extractAndValidateKeysFromJsonEachResult($result, 4); + $this->assertExtractedKeys($extractedKeys, ['name', 'age', 'address', 'tags']); + } + + #[Test] + public function extracts_key_value_pairs_when_json_contains_null_values(): void + { + $dql = 'SELECT JSON_EACH(t.jsonObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + WHERE t.id = 5'; + $result = $this->executeDqlQuery($dql); + + $extractedKeys = $this->extractAndValidateKeysFromJsonEachResult($result, 4); + $this->assertExtractedKeys($extractedKeys, ['name', 'age', 'address', 'tags']); + } + + #[Test] + public function extracts_key_value_pairs_when_json_contains_empty_array(): void + { + $dql = 'SELECT JSON_EACH(t.jsonObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + WHERE t.id = 3'; + $result = $this->executeDqlQuery($dql); + + $extractedKeys = $this->extractAndValidateKeysFromJsonEachResult($result, 4); + $this->assertExtractedKeys($extractedKeys, ['name', 'age', 'address', 'tags']); + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php index 29ffa044..008138a2 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php @@ -6,6 +6,7 @@ use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetField; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetFieldAsInteger; +use PHPUnit\Framework\Attributes\Test; class JsonGetFieldAsIntegerTest extends JsonTestCase { @@ -17,42 +18,47 @@ protected function getStringFunctions(): array ]; } - public function test_json_get_field_as_integer(): void + #[Test] + public function json_get_field_as_integer(): void { - $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.object1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.jsonObject1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame(30, $result[0]['result']); } - public function test_json_get_field_as_integer_with_index(): void + #[Test] + public function json_get_field_as_integer_with_index(): void { // First, let's insert test data with numeric arrays $this->connection->executeStatement( - \sprintf("UPDATE %s.containsjsons SET object1 = '{\"scores\": [85, 92, 78]}' WHERE id = 1", self::DATABASE_SCHEMA) + \sprintf("UPDATE %s.containsjsons SET jsonObject1 = '{\"scores\": [85, 92, 78]}' WHERE id = 1", self::DATABASE_SCHEMA) ); - $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(JSON_GET_FIELD(t.object1, 'scores'), 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(JSON_GET_FIELD(t.jsonObject1, 'scores'), 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame(92, $result[0]['result']); } - public function test_json_get_field_as_integer_empty_object(): void + #[Test] + public function json_get_field_as_integer_empty_object(): void { - $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.object1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 4"; + $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.jsonObject1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 4"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } - public function test_json_get_field_as_integer_null_value(): void + #[Test] + public function json_get_field_as_integer_null_value(): void { - $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.object1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 5"; + $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.jsonObject1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 5"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } - public function test_json_get_field_as_integer_nonexistent_property_name(): void + #[Test] + public function json_get_field_as_integer_nonexistent_property_name(): void { - $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.object1, 'nonexistent') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_INTEGER(t.jsonObject1, 'nonexistent') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php index b9c0fbbb..8904aea1 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php @@ -6,6 +6,7 @@ use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetField; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetFieldAsText; +use PHPUnit\Framework\Attributes\Test; class JsonGetFieldAsTextTest extends JsonTestCase { @@ -17,37 +18,42 @@ protected function getStringFunctions(): array ]; } - public function test_json_get_field_as_text_with_property_name(): void + #[Test] + public function json_get_field_as_text_with_property_name(): void { - $dql = "SELECT JSON_GET_FIELD_AS_TEXT(t.object1, 'name') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_TEXT(t.jsonObject1, 'name') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame('John', $result[0]['result']); } - public function test_json_get_field_as_text_with_index(): void + #[Test] + public function json_get_field_as_text_with_index(): void { - $dql = "SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(t.object1, 'tags'), 0) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(t.jsonObject1, 'tags'), 0) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame('developer', $result[0]['result']); } - public function test_json_get_field_as_text_nested_access(): void + #[Test] + public function json_get_field_as_text_nested_access(): void { - $dql = "SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(t.object1, 'address'), 'city') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(t.jsonObject1, 'address'), 'city') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame('New York', $result[0]['result']); } - public function test_json_get_field_as_text_with_null_value(): void + #[Test] + public function json_get_field_as_text_with_null_value(): void { - $dql = "SELECT JSON_GET_FIELD_AS_TEXT(t.object1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 5"; + $dql = "SELECT JSON_GET_FIELD_AS_TEXT(t.jsonObject1, 'age') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 5"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } - public function test_json_get_field_as_text_with_nonexistent_index(): void + #[Test] + public function json_get_field_as_text_with_nonexistent_index(): void { - $dql = "SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(t.object1, 'tags'), 10) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(t.jsonObject1, 'tags'), 10) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php index 1133f1f8..38f5c955 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonGetField; +use PHPUnit\Framework\Attributes\Test; class JsonGetFieldTest extends JsonTestCase { @@ -15,44 +16,50 @@ protected function getStringFunctions(): array ]; } - public function test_json_get_field_with_property_name(): void + #[Test] + public function returns_json_string_when_getting_field_by_property_name(): void { - $dql = "SELECT JSON_GET_FIELD(t.object1, 'name') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD(t.jsonObject1, 'name') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame('"John"', $result[0]['result']); } - public function test_json_get_field_with_index(): void + #[Test] + public function returns_json_string_when_getting_field_by_index(): void { - $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.object1, 'tags'), 0) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.jsonObject1, 'tags'), 0) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame('"developer"', $result[0]['result']); } - public function test_json_get_field_nested_object_access(): void + #[Test] + public function returns_json_string_when_accessing_nested_object(): void { - $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.object1, 'address'), 'city') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.jsonObject1, 'address'), 'city') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame('"New York"', $result[0]['result']); } - public function test_json_get_field_with_empty_array(): void + #[Test] + public function returns_null_for_empty_array(): void { - $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.object1, 'tags'), 0) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 3"; + $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.jsonObject1, 'tags'), 0) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 3"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } - public function test_json_get_field_with_nonexistent_index(): void + #[Test] + public function returns_null_for_nonexistent_index(): void { - $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.object1, 'tags'), 10) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD(JSON_GET_FIELD(t.jsonObject1, 'tags'), 10) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } - public function test_json_get_field_with_nonexistent_property_name(): void + #[Test] + public function returns_null_for_nonexistent_property(): void { - $dql = "SELECT JSON_GET_FIELD(t.object1, 'nonexistent') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT JSON_GET_FIELD(t.jsonObject1, 'nonexistent') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertNull($result[0]['result']); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php index 69b498e9..974ce41d 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectAggTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonObjectAgg; +use PHPUnit\Framework\Attributes\Test; class JsonObjectAggTest extends JsonTestCase { @@ -15,22 +16,32 @@ protected function getStringFunctions(): array ]; } - public function test_json_object_agg_simple(): void + #[Test] + public function can_aggregate_key_value_pairs_to_json_object(): void { - $dql = "SELECT JSON_OBJECT_AGG('key', t.object1) as result - FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t + $dql = "SELECT JSON_OBJECT_AGG('key', t.jsonObject1) as result + FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 3"; $result = $this->executeDqlQuery($dql); $this->assertIsString($result[0]['result']); + $decoded = \json_decode($result[0]['result'], true); $this->assertIsArray($decoded); - $this->assertSame([ - 'key' => [ - 'age' => 30, - 'name' => 'Micky', - 'tags' => [], - 'address' => ['city' => 'New York'], - ], - ], $decoded); + $this->assertArrayHasKey('key', $decoded); + + $keyData = $decoded['key']; + $this->assertIsArray($keyData); + + $this->assertArrayHasKey('age', $keyData); + $this->assertSame(30, $keyData['age']); + + $this->assertArrayHasKey('name', $keyData); + $this->assertSame('Micky', $keyData['name']); + + $this->assertArrayHasKey('tags', $keyData); + $this->assertSame([], $keyData['tags']); + + $this->assertArrayHasKey('address', $keyData); + $this->assertSame(['city' => 'New York'], $keyData['address']); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTestCase.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTestCase.php index cad26d6d..954679f4 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTestCase.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTestCase.php @@ -27,8 +27,10 @@ protected function createTestTableForJsonFixture(): void $sql = \sprintf(' CREATE TABLE %s ( id SERIAL PRIMARY KEY, - object1 JSONB, - object2 JSONB + jsonbObject1 JSONB, + jsonbObject2 JSONB, + jsonObject1 JSON, + jsonObject2 JSON ) ', $fullTableName); @@ -43,14 +45,37 @@ protected function insertTestDataForJsonFixture(): void $json4 = '{}'; $json5 = '{"name": "John", "age": null, "tags": ["developer"], "address": {"city": "New York", "zip": null}}'; - $sql = \sprintf(' - INSERT INTO %s.containsjsons (object1, object2) VALUES - (\'%s\', \'%s\'), - (\'%s\', \'%s\'), - (\'%s\', \'%s\'), - (\'%s\', \'%s\'), - (\'%s\', \'%s\') - ', self::DATABASE_SCHEMA, $json1, $json1, $json2, $json2, $json3, $json3, $json4, $json4, $json5, $json5); + $sql = \sprintf( + ' + INSERT INTO %s.containsjsons (jsonbObject1, jsonbObject2, jsonObject1, jsonObject2) VALUES + (\'%s\', \'%s\', \'%s\', \'%s\'), + (\'%s\', \'%s\', \'%s\', \'%s\'), + (\'%s\', \'%s\', \'%s\', \'%s\'), + (\'%s\', \'%s\', \'%s\', \'%s\'), + (\'%s\', \'%s\', \'%s\', \'%s\') + ', + self::DATABASE_SCHEMA, + $json1, + $json1, + $json1, + $json1, + $json2, + $json2, + $json2, + $json2, + $json3, + $json3, + $json3, + $json3, + $json4, + $json4, + $json4, + $json4, + $json5, + $json5, + $json5, + $json5 + ); $this->connection->executeStatement($sql); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php index 8e51cbe9..f01f6783 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbAggTest.php @@ -5,17 +5,21 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbAgg; +use PHPUnit\Framework\Attributes\Test; class JsonbAggTest extends JsonTestCase { protected function getStringFunctions(): array { - return ['JSONB_AGG' => JsonbAgg::class]; + return [ + 'JSONB_AGG' => JsonbAgg::class, + ]; } - public function test_jsonb_agg_with_single_row(): void + #[Test] + public function can_aggregate_single_row_to_jsonb(): void { - $dql = 'SELECT JSONB_AGG(t.object1) as result + $dql = 'SELECT JSONB_AGG(t.jsonObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); @@ -31,9 +35,10 @@ public function test_jsonb_agg_with_single_row(): void $this->assertEqualsCanonicalizing($expected, $actual); } - public function test_jsonb_agg_with_multiple_rows(): void + #[Test] + public function can_aggregate_multiple_rows_to_jsonb(): void { - $dql = 'SELECT JSONB_AGG(t.object1) as result + $dql = 'SELECT JSONB_AGG(t.jsonObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id IN (1, 2)'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php index f83b70f1..7600d302 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php @@ -5,9 +5,12 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbEach; +use PHPUnit\Framework\Attributes\Test; class JsonbEachTest extends JsonTestCase { + use PostgresTupleParsingTrait; + protected function getStringFunctions(): array { return [ @@ -15,64 +18,92 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_each(): void + /** + * @param array> $result Query results from executeDqlQuery() + * @param int $expectedCount Expected number of key-value pairs + * + * @return array Array of extracted keys + */ + private function extractAndValidateKeysFromJsonbEachResult(array $result, int $expectedCount): array + { + $this->assertCount($expectedCount, $result); + + $extractedKeys = []; + foreach ($result as $row) { + $this->assertIsArray($row, 'Query result row should be an array'); + $this->assertValidTupleStructure($row); + $extractedKeys[] = $this->extractKeysFromTupleResult($row); + } + + return $extractedKeys; + } + + /** + * @param array $extractedKeys + * @param array $expectedKeys Keys expected to be among the extracted keys + */ + private function assertStandardJsonObjectKeys(array $extractedKeys, array $expectedKeys): void + { + $expectedCount = \count($expectedKeys); + $this->assertExpectedKeysArePresent($extractedKeys, $expectedKeys); + $this->assertCount($expectedCount, $extractedKeys, \sprintf('Should extract exactly %d keys from JSONB object', $expectedCount)); + } + + #[Test] + public function extracts_key_value_pairs_from_standard_jsonb_object(): void { - $dql = 'SELECT JSONB_EACH(t.object1) as result + $dql = 'SELECT JSONB_EACH(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); - $this->assertCount(4, $result); - foreach ($result as $row) { - $this->assertIsArray($row); - $this->assertArrayHasKey('result', $row); - $this->assertIsString($row['result']); - $decoded = \json_decode($row['result'], true); - if (\is_array($decoded) && isset($decoded['key'], $decoded['value'])) { - $key = $decoded['key']; - $value = $decoded['value']; - } else { - $parts = \explode(':', \trim($row['result'], '{}"')); - $key = $parts[0] ?? null; - $value = $parts[1] ?? null; - } - - $this->assertNotNull($key); - } + + $extractedKeys = $this->extractAndValidateKeysFromJsonbEachResult($result, 4); + $this->assertStandardJsonObjectKeys($extractedKeys, ['name', 'age', 'address', 'tags']); } - public function test_jsonb_each_with_empty_object(): void + #[Test] + public function returns_empty_result_for_empty_object(): void { - $dql = 'SELECT JSONB_EACH(t.object1) as result + $dql = 'SELECT JSONB_EACH(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 4'; $result = $this->executeDqlQuery($dql); $this->assertCount(0, $result); } - public function test_jsonb_each_with_different_object(): void + #[Test] + public function extracts_key_value_pairs_from_alternative_jsonb_object(): void { - $dql = 'SELECT JSONB_EACH(t.object1) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_EACH(t.jsonbObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 2'; $result = $this->executeDqlQuery($dql); - $this->assertCount(4, $result); + + $extractedKeys = $this->extractAndValidateKeysFromJsonbEachResult($result, 4); + $this->assertStandardJsonObjectKeys($extractedKeys, ['name', 'age', 'address', 'tags']); } - public function test_jsonb_each_with_nulls(): void + #[Test] + public function extracts_key_value_pairs_when_jsonb_contains_null_values(): void { - $dql = 'SELECT JSONB_EACH(t.object1) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_EACH(t.jsonbObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 5'; $result = $this->executeDqlQuery($dql); - $this->assertCount(4, $result); + + $extractedKeys = $this->extractAndValidateKeysFromJsonbEachResult($result, 4); + $this->assertStandardJsonObjectKeys($extractedKeys, ['name', 'age', 'address', 'tags']); } - public function test_jsonb_each_with_empty_tags_array(): void + #[Test] + public function extracts_key_value_pairs_when_jsonb_contains_empty_array(): void { - $dql = 'SELECT JSONB_EACH(t.object1) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_EACH(t.jsonbObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 3'; $result = $this->executeDqlQuery($dql); - $this->assertCount(4, $result); + + $extractedKeys = $this->extractAndValidateKeysFromJsonbEachResult($result, 4); + $this->assertStandardJsonObjectKeys($extractedKeys, ['name', 'age', 'address', 'tags']); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php index a04f2149..e6ce5c56 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbEachText; +use PHPUnit\Framework\Attributes\Test; class JsonbEachTextTest extends JsonTestCase { @@ -15,9 +16,10 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_each_text(): void + #[Test] + public function extracts_key_value_pairs_from_standard_json_object(): void { - $dql = 'SELECT JSONB_EACH_TEXT(t.object1) as result + $dql = 'SELECT JSONB_EACH_TEXT(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); @@ -40,36 +42,40 @@ public function test_jsonb_each_text(): void } } - public function test_jsonb_each_text_with_empty_object(): void + #[Test] + public function returns_empty_result_for_empty_object(): void { - $dql = 'SELECT JSONB_EACH_TEXT(t.object1) as result + $dql = 'SELECT JSONB_EACH_TEXT(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 4'; $result = $this->executeDqlQuery($dql); $this->assertCount(0, $result); } - public function test_jsonb_each_text_with_different_object(): void + #[Test] + public function extracts_key_value_pairs_from_alternative_json_object(): void { - $dql = 'SELECT JSONB_EACH_TEXT(t.object1) as result + $dql = 'SELECT JSONB_EACH_TEXT(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 2'; $result = $this->executeDqlQuery($dql); $this->assertCount(4, $result); } - public function test_jsonb_each_text_with_nulls(): void + #[Test] + public function extracts_key_value_pairs_when_json_contains_null_values(): void { - $dql = 'SELECT JSONB_EACH_TEXT(t.object1) as result + $dql = 'SELECT JSONB_EACH_TEXT(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 5'; $result = $this->executeDqlQuery($dql); $this->assertCount(4, $result); } - public function test_jsonb_each_text_with_empty_tags_array(): void + #[Test] + public function extracts_key_value_pairs_when_json_contains_empty_array(): void { - $dql = 'SELECT JSONB_EACH_TEXT(t.object1) as result + $dql = 'SELECT JSONB_EACH_TEXT(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 3'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php index 2cc6392f..6d31dd01 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php @@ -5,17 +5,21 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbExists; +use PHPUnit\Framework\Attributes\Test; class JsonbExistsTest extends JsonTestCase { protected function getStringFunctions(): array { - return ['JSONB_EXISTS' => JsonbExists::class]; + return [ + 'JSONB_EXISTS' => JsonbExists::class, + ]; } - public function test_jsonb_exists_with_existing_key(): void + #[Test] + public function returns_true_when_key_exists(): void { - $dql = 'SELECT JSONB_EXISTS(t.object1, :key) as result + $dql = 'SELECT JSONB_EXISTS(t.jsonbObject1, :key) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; @@ -23,9 +27,10 @@ public function test_jsonb_exists_with_existing_key(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_exists_with_nested_key(): void + #[Test] + public function returns_true_when_nested_key_exists(): void { - $dql = 'SELECT JSONB_EXISTS(t.object1, :key) as result + $dql = 'SELECT JSONB_EXISTS(t.jsonbObject1, :key) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; @@ -33,9 +38,10 @@ public function test_jsonb_exists_with_nested_key(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_exists_with_array_element(): void + #[Test] + public function returns_true_when_array_element_exists(): void { - $dql = 'SELECT JSONB_EXISTS(t.object1, :key) as result + $dql = 'SELECT JSONB_EXISTS(t.jsonbObject1, :key) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; @@ -43,9 +49,10 @@ public function test_jsonb_exists_with_array_element(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_exists_with_non_existing_key(): void + #[Test] + public function returns_false_for_non_existing_key(): void { - $dql = 'SELECT JSONB_EXISTS(t.object1, :key) as result + $dql = 'SELECT JSONB_EXISTS(t.jsonbObject1, :key) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php index 537ff017..6c0a41c9 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php @@ -6,6 +6,7 @@ use Doctrine\DBAL\Exception; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbInsert; +use PHPUnit\Framework\Attributes\Test; class JsonbInsertTest extends JsonTestCase { @@ -16,9 +17,10 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_insert_new_value(): void + #[Test] + public function can_insert_new_value(): void { - $dql = 'SELECT JSONB_INSERT(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_INSERT(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -32,9 +34,10 @@ public function test_jsonb_insert_new_value(): void $this->assertSame('john@example.com', $decoded['email']); } - public function test_jsonb_insert_nested_path(): void + #[Test] + public function can_insert_at_nested_path(): void { - $dql = 'SELECT JSONB_INSERT(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_INSERT(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -50,10 +53,11 @@ public function test_jsonb_insert_nested_path(): void $this->assertSame('10001', $decoded['address']['zip']); } - public function test_throws_exception_when_inserting_at_existing_object_key(): void + #[Test] + public function throws_exception_when_inserting_at_existing_object_key(): void { $this->expectException(Exception::class); - $dql = 'SELECT JSONB_INSERT(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_INSERT(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $this->executeDqlQuery($dql, [ @@ -62,11 +66,12 @@ public function test_throws_exception_when_inserting_at_existing_object_key(): v ]); } - public function test_throws_exception_when_inserting_at_existing_nested_path(): void + #[Test] + public function throws_exception_when_inserting_at_existing_nested_path(): void { $this->expectException(Exception::class); - $dql = 'SELECT JSONB_INSERT(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_INSERT(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 5'; diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php index 2c3bc35e..3be88399 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectAggTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbObjectAgg; +use PHPUnit\Framework\Attributes\Test; class JsonbObjectAggTest extends JsonTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_object_agg(): void + #[Test] + public function can_aggregate_key_value_pairs_to_jsonb_object(): void { $dql = "SELECT JSONB_OBJECT_AGG('key', 'value') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php index b37f4b28..5493434a 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbObjectKeys; +use PHPUnit\Framework\Attributes\Test; class JsonbObjectKeysTest extends JsonTestCase { @@ -15,12 +16,26 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_object_keys(): void + #[Test] + public function extracts_object_keys_from_jsonb(): void { - $dql = 'SELECT JSONB_OBJECT_KEYS(t.object1) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_OBJECT_KEYS(t.jsonbObject1) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); - $this->assertIsString($result[0]['result']); + $this->assertCount(4, $result); + + $foundKeys = []; + foreach ($result as $row) { + $this->assertIsArray($row); + $this->assertArrayHasKey('result', $row); + $this->assertIsString($row['result']); + $foundKeys[] = $row['result']; + } + + $expectedKeys = ['name', 'age', 'address', 'tags']; + foreach ($expectedKeys as $expectedKey) { + $this->assertContains($expectedKey, $foundKeys, \sprintf("Expected key '%s' should be present in the extracted keys", $expectedKey)); + } } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php index aa8dcea3..af1c83c0 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathExists; +use PHPUnit\Framework\Attributes\Test; class JsonbPathExistsTest extends JsonTestCase { protected function getStringFunctions(): array { - return ['JSONB_PATH_EXISTS' => JsonbPathExists::class]; + return [ + 'JSONB_PATH_EXISTS' => JsonbPathExists::class, + ]; } - public function test_jsonb_path_exists_with_simple_path(): void + #[Test] + public function can_check_simple_path_exists(): void { $dql = 'SELECT JSONB_PATH_EXISTS(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -25,7 +29,8 @@ public function test_jsonb_path_exists_with_simple_path(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_path_exists_with_nested_path(): void + #[Test] + public function can_check_nested_path_exists(): void { $dql = 'SELECT JSONB_PATH_EXISTS(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -37,7 +42,8 @@ public function test_jsonb_path_exists_with_nested_path(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_path_exists_with_missing_path(): void + #[Test] + public function returns_false_for_missing_path(): void { $dql = 'SELECT JSONB_PATH_EXISTS(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -49,10 +55,11 @@ public function test_jsonb_path_exists_with_missing_path(): void $this->assertFalse($result[0]['result']); } - public function test_jsonb_path_exists_with_column_reference(): void + #[Test] + public function can_check_path_exists_in_column_reference(): void { - $dql = 'SELECT JSONB_PATH_EXISTS(t.object1, :path) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_PATH_EXISTS(t.jsonbObject1, :path) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['path' => '$.name']); $this->assertTrue($result[0]['result']); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php index 17517437..59e477b6 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathMatch; +use PHPUnit\Framework\Attributes\Test; class JsonbPathMatchTest extends JsonTestCase { protected function getStringFunctions(): array { - return ['JSONB_PATH_MATCH' => JsonbPathMatch::class]; + return [ + 'JSONB_PATH_MATCH' => JsonbPathMatch::class, + ]; } - public function test_jsonb_path_match_simple(): void + #[Test] + public function can_match_simple_path(): void { $dql = 'SELECT JSONB_PATH_MATCH(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -25,7 +29,8 @@ public function test_jsonb_path_match_simple(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_path_match_comparison(): void + #[Test] + public function can_match_comparison_expression(): void { $dql = 'SELECT JSONB_PATH_MATCH(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -37,7 +42,8 @@ public function test_jsonb_path_match_comparison(): void $this->assertTrue($result[0]['result']); } - public function test_jsonb_path_match_negative(): void + #[Test] + public function returns_false_for_non_matching_path(): void { $dql = 'SELECT JSONB_PATH_MATCH(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -49,10 +55,11 @@ public function test_jsonb_path_match_negative(): void $this->assertFalse($result[0]['result']); } - public function test_jsonb_path_match_with_column_reference(): void + #[Test] + public function can_match_with_column_reference(): void { - $dql = 'SELECT JSONB_PATH_MATCH(t.object1, :path) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_PATH_MATCH(t.jsonbObject1, :path) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['path' => 'exists($.name)']); $this->assertTrue($result[0]['result']); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php index 311ecb34..192fc703 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathQueryArray; +use PHPUnit\Framework\Attributes\Test; class JsonbPathQueryArrayTest extends JsonTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_path_query_array_simple(): void + #[Test] + public function jsonb_path_query_array_simple(): void { $dql = 'SELECT JSONB_PATH_QUERY_ARRAY(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -31,7 +33,8 @@ public function test_jsonb_path_query_array_simple(): void $this->assertSame(2, $decoded[0]); } - public function test_jsonb_path_query_array_multiple_values(): void + #[Test] + public function jsonb_path_query_array_multiple_values(): void { $dql = 'SELECT JSONB_PATH_QUERY_ARRAY(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -47,7 +50,8 @@ public function test_jsonb_path_query_array_multiple_values(): void $this->assertSame([1, 2, 3], $decoded); } - public function test_jsonb_path_query_array_with_filter(): void + #[Test] + public function jsonb_path_query_array_with_filter(): void { $dql = 'SELECT JSONB_PATH_QUERY_ARRAY(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -64,10 +68,11 @@ public function test_jsonb_path_query_array_with_filter(): void $this->assertSame(['id' => 3], $decoded[1]); } - public function test_jsonb_path_query_array_with_column_reference(): void + #[Test] + public function jsonb_path_query_array_with_column_reference(): void { - $dql = 'SELECT JSONB_PATH_QUERY_ARRAY(t.object1, :path) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_PATH_QUERY_ARRAY(t.jsonbObject1, :path) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['path' => '$.tags[*]']); $this->assertIsString($result[0]['result']); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php index d77355df..88f027a8 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathQueryFirst; +use PHPUnit\Framework\Attributes\Test; class JsonbPathQueryFirstTest extends JsonTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_path_query_first_simple(): void + #[Test] + public function jsonb_path_query_first_simple(): void { $dql = 'SELECT JSONB_PATH_QUERY_FIRST(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -27,7 +29,8 @@ public function test_jsonb_path_query_first_simple(): void $this->assertSame('2', $result[0]['result']); } - public function test_jsonb_path_query_first_array(): void + #[Test] + public function jsonb_path_query_first_array(): void { $dql = 'SELECT JSONB_PATH_QUERY_FIRST(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -39,7 +42,8 @@ public function test_jsonb_path_query_first_array(): void $this->assertSame('1', $result[0]['result']); } - public function test_jsonb_path_query_first_with_filter(): void + #[Test] + public function jsonb_path_query_first_with_filter(): void { $dql = 'SELECT JSONB_PATH_QUERY_FIRST(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -51,7 +55,8 @@ public function test_jsonb_path_query_first_with_filter(): void $this->assertSame('{"id": 2}', $result[0]['result']); } - public function test_jsonb_path_query_first_with_no_match(): void + #[Test] + public function jsonb_path_query_first_with_no_match(): void { $dql = 'SELECT JSONB_PATH_QUERY_FIRST(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -63,10 +68,11 @@ public function test_jsonb_path_query_first_with_no_match(): void $this->assertNull($result[0]['result']); } - public function test_jsonb_path_query_first_with_column_reference(): void + #[Test] + public function jsonb_path_query_first_with_column_reference(): void { - $dql = 'SELECT JSONB_PATH_QUERY_FIRST(t.object1, :path) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_PATH_QUERY_FIRST(t.jsonbObject1, :path) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['path' => '$.tags[*]']); $this->assertSame('"developer"', $result[0]['result']); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php index ba0b67b7..bf522224 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPathQuery; +use PHPUnit\Framework\Attributes\Test; class JsonbPathQueryTest extends JsonTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_path_query_simple(): void + #[Test] + public function can_query_simple_path(): void { $dql = 'SELECT JSONB_PATH_QUERY(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -28,7 +30,8 @@ public function test_jsonb_path_query_simple(): void $this->assertSame('2', $result[0]['result']); } - public function test_jsonb_path_query_array(): void + #[Test] + public function can_query_array_elements(): void { $dql = 'SELECT JSONB_PATH_QUERY(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -43,7 +46,8 @@ public function test_jsonb_path_query_array(): void $this->assertSame('3', $result[2]['result']); } - public function test_jsonb_path_query_with_filter(): void + #[Test] + public function can_query_with_filter(): void { $dql = 'SELECT JSONB_PATH_QUERY(:json, :path) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t @@ -57,10 +61,11 @@ public function test_jsonb_path_query_with_filter(): void $this->assertSame('{"id": 3}', $result[1]['result']); } - public function test_jsonb_path_query_with_column_reference(): void + #[Test] + public function can_query_with_column_reference(): void { - $dql = 'SELECT JSONB_PATH_QUERY(t.object1, :path) as result - FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t + $dql = 'SELECT JSONB_PATH_QUERY(t.jsonbObject1, :path) as result + FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, ['path' => '$.tags[*]']); $this->assertCount(2, $result); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php index d6c1e611..f619a08c 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbPretty; +use PHPUnit\Framework\Attributes\Test; class JsonbPrettyTest extends JsonTestCase { @@ -15,12 +16,38 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_pretty(): void + #[Test] + public function formats_jsonb_as_pretty_string(): void { - $dql = 'SELECT JSONB_PRETTY(t.object1) as result + $dql = 'SELECT JSONB_PRETTY(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertIsString($result[0]['result']); + + $prettyJson = $result[0]['result']; + + // Verify that the result is valid JSON + $decoded = \json_decode($prettyJson, true); + $this->assertNotNull($decoded, 'Result should be valid JSON'); + $this->assertIsArray($decoded); + + // Verify that the JSON contains the expected structure + $this->assertArrayHasKey('name', $decoded); + $this->assertArrayHasKey('age', $decoded); + $this->assertArrayHasKey('address', $decoded); + $this->assertArrayHasKey('tags', $decoded); + + // Verify that the JSON is actually formatted with indentation (pretty-printed) + $this->assertStringContainsString("\n", $prettyJson, 'Pretty JSON should contain newlines'); + $this->assertStringContainsString(' ', $prettyJson, 'Pretty JSON should contain indentation spaces'); + + // Verify that the formatted JSON is different from a compact version + $compactJson = \json_encode($decoded); + \assert(\is_string($compactJson)); + $this->assertNotEquals($compactJson, $prettyJson, 'Pretty JSON should be different from compact JSON'); + + // Verify that the content is preserved (round-trip test) + $this->assertEquals($decoded, \json_decode($compactJson, true), 'Content should be preserved in pretty formatting'); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php index 59229340..cd9e49a3 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbSetLax; +use PHPUnit\Framework\Attributes\Test; class JsonbSetLaxTest extends JsonTestCase { @@ -15,9 +16,10 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_set_lax_update_existing_value(): void + #[Test] + public function can_update_existing_value(): void { - $dql = 'SELECT JSONB_SET_LAX(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET_LAX(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -31,9 +33,10 @@ public function test_jsonb_set_lax_update_existing_value(): void $this->assertSame('John Doe', $decoded['name']); } - public function test_jsonb_set_lax_add_new_value(): void + #[Test] + public function can_add_new_value(): void { - $dql = 'SELECT JSONB_SET_LAX(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET_LAX(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -47,9 +50,10 @@ public function test_jsonb_set_lax_add_new_value(): void $this->assertSame('john@example.com', $decoded['email']); } - public function test_jsonb_set_lax_nested_path(): void + #[Test] + public function can_set_nested_path(): void { - $dql = 'SELECT JSONB_SET_LAX(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET_LAX(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -65,9 +69,10 @@ public function test_jsonb_set_lax_nested_path(): void $this->assertSame('10001', $decoded['address']['zip']); } - public function test_jsonb_set_lax_with_invalid_path(): void + #[Test] + public function does_not_add_value_for_invalid_path(): void { - $dql = 'SELECT JSONB_SET_LAX(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET_LAX(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -77,6 +82,6 @@ public function test_jsonb_set_lax_with_invalid_path(): void $this->assertIsString($result[0]['result']); $decoded = \json_decode($result[0]['result'], true); $this->assertIsArray($decoded); - self::assertArrayNotHasKey('invalid', $decoded); + $this->assertArrayNotHasKey('invalid', $decoded); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php index c1268666..2b48bcdb 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbSet; +use PHPUnit\Framework\Attributes\Test; class JsonbSetTest extends JsonTestCase { @@ -15,9 +16,10 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_set_update_existing_value(): void + #[Test] + public function can_update_existing_value(): void { - $dql = 'SELECT JSONB_SET(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -31,9 +33,10 @@ public function test_jsonb_set_update_existing_value(): void $this->assertSame('John Doe', $decoded['name']); } - public function test_jsonb_set_add_new_value(): void + #[Test] + public function can_add_new_value(): void { - $dql = 'SELECT JSONB_SET(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -47,9 +50,10 @@ public function test_jsonb_set_add_new_value(): void $this->assertSame('john@example.com', $decoded['email']); } - public function test_jsonb_set_nested_path(): void + #[Test] + public function can_set_nested_path(): void { - $dql = 'SELECT JSONB_SET(t.object1, :path, :value) as result + $dql = 'SELECT JSONB_SET(t.jsonbObject1, :path, :value) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql, [ @@ -65,9 +69,10 @@ public function test_jsonb_set_nested_path(): void $this->assertSame('10001', $decoded['address']['zip']); } - public function test_jsonb_set_with_create_missing_false(): void + #[Test] + public function does_not_create_missing_key_when_create_missing_is_false(): void { - $dql = "SELECT JSONB_SET(t.object1, :path, :value, 'false') as result + $dql = "SELECT JSONB_SET(t.jsonbObject1, :path, :value, 'false') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql, [ @@ -77,6 +82,6 @@ public function test_jsonb_set_with_create_missing_false(): void $this->assertIsString($result[0]['result']); $decoded = \json_decode($result[0]['result'], true); $this->assertIsArray($decoded); - self::assertArrayNotHasKey('nonexistent', $decoded); + $this->assertArrayNotHasKey('nonexistent', $decoded); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php index 68be7955..311c99dc 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\JsonbStripNulls; +use PHPUnit\Framework\Attributes\Test; class JsonbStripNullsTest extends JsonTestCase { @@ -15,18 +16,20 @@ protected function getStringFunctions(): array ]; } - public function test_jsonb_strip_nulls(): void + #[Test] + public function jsonb_strip_nulls(): void { - $dql = 'SELECT JSONB_STRIP_NULLS(t.object1) as result + $dql = 'SELECT JSONB_STRIP_NULLS(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertIsString($result[0]['result']); } - public function test_jsonb_strip_nulls_with_null_values(): void + #[Test] + public function jsonb_strip_nulls_with_null_values(): void { - $dql = 'SELECT JSONB_STRIP_NULLS(t.object1) as result + $dql = 'SELECT JSONB_STRIP_NULLS(t.jsonbObject1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t WHERE t.id = 5'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LnTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LnTest.php index a21bed8d..ebc9133d 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LnTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LnTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Ln; +use PHPUnit\Framework\Attributes\Test; class LnTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_ln(): void + #[Test] + public function ln(): void { $dql = 'SELECT LN(2.718281828459) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertEqualsWithDelta(1.0, $result[0]['result'], 0.0001); } - public function test_ln_with_entity_property(): void + #[Test] + public function ln_with_entity_property(): void { $dql = 'SELECT LN(n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LogTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LogTest.php index 2b9df36e..e681b1cd 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LogTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/LogTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Log; +use PHPUnit\Framework\Attributes\Test; class LogTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_log(): void + #[Test] + public function log(): void { $dql = 'SELECT LOG(10, 100) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertEqualsWithDelta(2.0, $result[0]['result'], 0.0001); } - public function test_log_with_entity_property(): void + #[Test] + public function log_with_entity_property(): void { $dql = 'SELECT LOG(10, n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php index 6c30b5cf..ff8552f9 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NotIRegexpTest.php @@ -5,8 +5,9 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\NotIRegexp; +use PHPUnit\Framework\Attributes\Test; -class NotIRegexpTest extends JsonTestCase +class NotIRegexpTest extends TextTestCase { protected function getStringFunctions(): array { @@ -15,17 +16,42 @@ protected function getStringFunctions(): array ]; } - public function test_not_iregexp(): void + #[Test] + public function returns_true_when_pattern_does_not_match_text_field(): void { - // NOTE: Using string literals for arguments due to DQL limitations with field extraction. - $dql = "SELECT NOT_IREGEXP('John', 'jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT NOT_IREGEXP(t.text1, 'nonexistent.*pattern') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertTrue($result[0]['result']); } - public function test_not_iregexp_negative(): void + #[Test] + public function returns_false_when_pattern_matches_text_field(): void { - $dql = "SELECT NOT_IREGEXP('John', 'John') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT NOT_IREGEXP(t.text1, 'test.*string') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertFalse($result[0]['result']); + } + + #[Test] + public function returns_true_when_pattern_does_not_match_with_case_insensitive(): void + { + $dql = "SELECT NOT_IREGEXP(t.text1, 'TEST.*STRING') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertFalse($result[0]['result']); + } + + #[Test] + public function returns_true_when_pattern_does_not_match_second_text_field(): void + { + $dql = "SELECT NOT_IREGEXP(t.text2, 'nonexistent.*pattern') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_false_when_pattern_matches_second_text_field(): void + { + $dql = "SELECT NOT_IREGEXP(t.text2, 'another.*string') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertFalse($result[0]['result']); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php index 0e47040a..36978360 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/NumrangeTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Numrange; +use PHPUnit\Framework\Attributes\Test; class NumrangeTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_numrange(): void + #[Test] + public function can_create_range_with_default_bounds(): void { $dql = 'SELECT NUMRANGE(t.decimal1, t.decimal2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame('[10.5,20.5)', $result[0]['result']); } - public function test_numrange_with_bounds(): void + #[Test] + public function can_create_range_with_custom_bounds(): void { $dql = "SELECT NUMRANGE(t.decimal1, t.decimal2, '(]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PiTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PiTest.php index c917058d..1043cc8a 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PiTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PiTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Pi; +use PHPUnit\Framework\Attributes\Test; class PiTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_pi(): void + #[Test] + public function pi(): void { $dql = 'SELECT PI() as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertEqualsWithDelta(3.141592653589793, $result[0]['result'], 0.0001); } - public function test_pi_plus_entity_property(): void + #[Test] + public function pi_plus_entity_property(): void { $dql = 'SELECT PI() + n.decimal1 as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PostgresTupleParsingTrait.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PostgresTupleParsingTrait.php new file mode 100644 index 00000000..b58b3a2f --- /dev/null +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PostgresTupleParsingTrait.php @@ -0,0 +1,154 @@ + $queryResult Single query result row + * @param string $resultKeyName Name of the result key in the query result + * + * @return string The extracted key from the tuple + */ + protected function extractKeysFromTupleResult(array $queryResult, string $resultKeyName = 'result'): string + { + $this->assertArrayHasKey($resultKeyName, $queryResult, \sprintf('Query result should contain "%s" key', $resultKeyName)); + $this->assertIsString($queryResult[$resultKeyName], 'Query result should be a string'); + + $key = $this->parseKeyFromTuple($queryResult[$resultKeyName]); + $this->assertNotNull($key, 'Should be able to extract key from tuple result'); + + return $key; + } + + /** + * Extracts a key-value pair from a PostgreSQL tuple format result row. + * + * @param array $queryResult Single query result row + * @param string $resultKeyName Name of the result key in the query result + * + * @return array{key: string, value: string} The extracted key-value pair from the tuple + */ + protected function extractKeyValuePairsFromTupleResult(array $queryResult, string $resultKeyName = 'result'): array + { + $this->assertArrayHasKey($resultKeyName, $queryResult, \sprintf('Query result should contain "%s" key', $resultKeyName)); + $this->assertIsString($queryResult[$resultKeyName], 'Query result should be a string'); + + $pair = $this->parseKeyValueFromTuple($queryResult[$resultKeyName]); + $this->assertNotNull($pair, 'Should be able to extract key-value pair from tuple result'); + + return $pair; + } + + /** + * Validates that all expected keys are present in the extracted results. + * + * @param array $extractedKeys Keys extracted from tuple results + * @param array $expectedKeys Keys that should be present + */ + protected function assertExpectedKeysArePresent(array $extractedKeys, array $expectedKeys): void + { + foreach ($expectedKeys as $expectedKey) { + $this->assertContains( + $expectedKey, + $extractedKeys, + \sprintf("Expected key '%s' should be extracted from JSON object", $expectedKey) + ); + } + } + + /** + * Validates that a query result row contains a valid PostgreSQL tuple structure. + * + * @param array $queryResult Single query result row + * @param string $resultKeyName Name of the result key in the query result + */ + protected function assertValidTupleStructure(array $queryResult, string $resultKeyName = 'result'): void + { + $this->assertArrayHasKey($resultKeyName, $queryResult, \sprintf('Query result should contain "%s" key', $resultKeyName)); + $this->assertIsString($queryResult[$resultKeyName], 'Query result should be a string'); + + $this->assertTrue( + $this->isValidTupleFormat($queryResult[$resultKeyName]), + \sprintf("Result '%s' should be a valid PostgreSQL tuple format", $queryResult[$resultKeyName]) + ); + } + + /** + * @param string $tupleString PostgreSQL tuple in format (key,value) + * + * @return string|null The extracted key, or null if parsing fails + */ + private function parseKeyFromTuple(string $tupleString): ?string + { + if (!$this->isValidTupleFormat($tupleString)) { + return null; + } + + // Remove outer parentheses + $tupleContent = \trim($tupleString, '()'); + + // Find the first comma that separates key from value + $commaPos = \strpos($tupleContent, ','); + if ($commaPos === false) { + return null; + } + + return \substr($tupleContent, 0, $commaPos); + } + + /** + * @param string $tupleString PostgreSQL tuple in format (key,value) + * + * @return array{key: string, value: string}|null The extracted key-value pair, or null if parsing fails + */ + private function parseKeyValueFromTuple(string $tupleString): ?array + { + if (!$this->isValidTupleFormat($tupleString)) { + return null; + } + + // Remove outer parentheses + $tupleContent = \trim($tupleString, '()'); + + // Find the first comma that separates key from value + $commaPos = \strpos($tupleContent, ','); + if ($commaPos === false) { + return null; + } + + $key = \substr($tupleContent, 0, $commaPos); + $value = \substr($tupleContent, $commaPos + 1); + + return [ + 'key' => $key, + 'value' => $value, + ]; + } + + private function isValidTupleFormat(string $tupleString): bool + { + // Must start with '(' and end with ')' + if (!\str_starts_with($tupleString, '(') || !\str_ends_with($tupleString, ')')) { + return false; + } + + // Must contain at least one comma (key,value separator) + if (!\str_contains($tupleString, ',')) { + return false; + } + + // Must have content between parentheses + $content = \trim($tupleString, '()'); + + return $content !== '' && $content !== '0'; + } +} diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PowerTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PowerTest.php index 40cffd26..ee1e80ae 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PowerTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/PowerTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Power; +use PHPUnit\Framework\Attributes\Test; class PowerTest extends NumericTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_power_with_integer_exponent(): void + #[Test] + public function can_calculate_with_integer_exponent(): void { $dql = 'SELECT POWER(2, 3) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -24,7 +26,8 @@ public function test_power_with_integer_exponent(): void $this->assertEquals(8, $result[0]['result']); } - public function test_power_with_fractional_exponent(): void + #[Test] + public function can_calculate_with_fractional_exponent(): void { $dql = 'SELECT POWER(9, 0.5) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -33,7 +36,8 @@ public function test_power_with_fractional_exponent(): void $this->assertEqualsWithDelta(3.0, $result[0]['result'], 0.0001); } - public function test_power_with_negative_base(): void + #[Test] + public function can_calculate_with_negative_base(): void { $dql = 'SELECT POWER((-2), 3) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -42,7 +46,8 @@ public function test_power_with_negative_base(): void $this->assertEquals(-8, $result[0]['result']); } - public function test_power_with_negative_exponent(): void + #[Test] + public function can_calculate_with_negative_exponent(): void { $dql = 'SELECT POWER(2, (-2)) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -51,7 +56,8 @@ public function test_power_with_negative_exponent(): void $this->assertEqualsWithDelta(0.25, $result[0]['result'], 0.0001); } - public function test_power_with_column_values(): void + #[Test] + public function can_calculate_with_column_values(): void { $dql = 'SELECT POWER(n.decimal1, n.decimal2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RadiansTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RadiansTest.php index 39dda8f0..0f489a24 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RadiansTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RadiansTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Radians; +use PHPUnit\Framework\Attributes\Test; class RadiansTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_radians(): void + #[Test] + public function can_convert_degrees_to_radians(): void { $dql = 'SELECT RADIANS(180) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertEqualsWithDelta(3.141592653589793, $result[0]['result'], 0.0001); } - public function test_radians_with_entity_property(): void + #[Test] + public function can_convert_decimal_entity_property_to_radians(): void { $dql = 'SELECT RADIANS(n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RandomTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RandomTest.php index c1093c95..6dcbc959 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RandomTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RandomTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Random; +use PHPUnit\Framework\Attributes\Test; class RandomTest extends NumericTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_random(): void + #[Test] + public function random(): void { $dql = 'SELECT RANDOM() as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); @@ -23,7 +25,8 @@ public function test_random(): void $this->assertLessThanOrEqual(1.0, $result[0]['result']); } - public function test_random_plus_entity_property(): void + #[Test] + public function random_plus_entity_property(): void { $dql = 'SELECT RANDOM() + n.decimal1 as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php index a16c0ddc..6c408c29 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpInstrTest.php @@ -5,8 +5,9 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpInstr; +use PHPUnit\Framework\Attributes\Test; -class RegexpInstrTest extends JsonTestCase +class RegexpInstrTest extends TextTestCase { protected function getStringFunctions(): array { @@ -15,17 +16,48 @@ protected function getStringFunctions(): array ]; } - public function test_regexp_instr(): void + #[Test] + public function returns_position_when_finding_matching_pattern(): void { - // NOTE: Using string literals for arguments due to DQL limitations with field extraction. - $dql = "SELECT REGEXP_INSTR('John', 'J.*n') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT REGEXP_INSTR(t.text1, 'test') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - $this->assertSame(1, $result[0]['result']); + $this->assertSame(11, $result[0]['result']); } - public function test_regexp_instr_negative(): void + #[Test] + public function returns_zero_for_non_matching_pattern(): void { - $dql = "SELECT REGEXP_INSTR('John', 'Jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT REGEXP_INSTR(t.text1, 'nonexistent') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertSame(0, $result[0]['result']); + } + + #[Test] + public function returns_position_when_finding_pattern_in_second_text_field(): void + { + $dql = "SELECT REGEXP_INSTR(t.text2, 'test') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertSame(9, $result[0]['result']); + } + + #[Test] + public function returns_position_when_finding_word_boundary_pattern(): void + { + // POSIX word boundary pattern: [[:<:]]is[[:>:]] + // - [[:<:]] = start of word (word boundary at beginning) + // - is = literal word 'is' + // - [[:>:]] = end of word (word boundary at end) + // This matches 'is' as a complete word, considering letters, numbers, and underscores as word characters. + // Returns position 6 (start of 'is') in 'this is a test string' + $dql = "SELECT REGEXP_INSTR(t.text1, '[[:<:]]is[[:>:]]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertSame(6, $result[0]['result']); + } + + #[Test] + public function returns_zero_for_case_sensitive_pattern(): void + { + $dql = "SELECT REGEXP_INSTR(t.text1, 'TEST') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertSame(0, $result[0]['result']); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php index 6942f422..cf35f532 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpLikeTest.php @@ -5,8 +5,9 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpLike; +use PHPUnit\Framework\Attributes\Test; -class RegexpLikeTest extends JsonTestCase +class RegexpLikeTest extends TextTestCase { protected function getStringFunctions(): array { @@ -15,17 +16,48 @@ protected function getStringFunctions(): array ]; } - public function test_regexp_like(): void + #[Test] + public function returns_true_when_pattern_matches_text_field(): void { - // NOTE: Using string literals for arguments due to DQL limitations with field extraction. - $dql = "SELECT REGEXP_LIKE('John', 'J.*n') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT REGEXP_LIKE(t.text1, 'test.*string') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertTrue($result[0]['result']); } - public function test_regexp_like_negative(): void + #[Test] + public function returns_false_when_pattern_does_not_match(): void { - $dql = "SELECT REGEXP_LIKE('John', 'Jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT REGEXP_LIKE(t.text1, 'nonexistent.*pattern') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertFalse($result[0]['result']); + } + + #[Test] + public function returns_true_when_matching_second_text_field(): void + { + $dql = "SELECT REGEXP_LIKE(t.text2, 'another.*string') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_true_when_matching_word_boundaries(): void + { + // POSIX word boundary pattern: [[:<:]]is[[:>:]] + // - [[:<:]] = start of word (word boundary at beginning) + // - is = literal word 'is' + // - [[:>:]] = end of word (word boundary at end) + // This matches 'is' as a complete word, considering letters, numbers, and underscores as word characters. + // Examples: 'this is test' ✅, 'is great' ✅, 'island' ❌, 'is_var' ❌, 'is123' ❌ + $dql = "SELECT REGEXP_LIKE(t.text1, '[[:<:]]is[[:>:]]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_false_when_matching_case_sensitive_pattern(): void + { + $dql = "SELECT REGEXP_LIKE(t.text1, 'TEST.*STRING') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertFalse($result[0]['result']); } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php index d998805c..fd25418b 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpReplaceTest.php @@ -5,8 +5,9 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\RegexpReplace; +use PHPUnit\Framework\Attributes\Test; -class RegexpReplaceTest extends JsonTestCase +class RegexpReplaceTest extends TextTestCase { protected function getStringFunctions(): array { @@ -15,18 +16,43 @@ protected function getStringFunctions(): array ]; } - public function test_regexp_replace(): void + #[Test] + public function replaces_matching_pattern_in_text_field(): void { - // NOTE: Using string literals for arguments due to DQL limitations with field extraction. - $dql = "SELECT REGEXP_REPLACE('John', 'J.*n', 'Jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT REGEXP_REPLACE(t.text1, 'test', 'replaced') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - $this->assertSame('Jane', $result[0]['result']); + $this->assertSame('this is a replaced string', $result[0]['result']); } - public function test_regexp_replace_no_match(): void + #[Test] + public function replaces_multiple_occurrences_with_global_flag(): void { - $dql = "SELECT REGEXP_REPLACE('John', 'Jane', 'Jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT REGEXP_REPLACE(t.text1, 'is', 'was', 'g') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - $this->assertSame('John', $result[0]['result']); + $this->assertSame('thwas was a test string', $result[0]['result']); + } + + #[Test] + public function leaves_string_unchanged_when_no_match(): void + { + $dql = "SELECT REGEXP_REPLACE(t.text1, 'nonexistent', 'replaced') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertSame('this is a test string', $result[0]['result']); + } + + #[Test] + public function replaces_pattern_in_second_text_field(): void + { + $dql = "SELECT REGEXP_REPLACE(t.text2, 'test', 'replaced') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertSame('another replaced string', $result[0]['result']); + } + + #[Test] + public function handles_case_sensitive_replacement(): void + { + $dql = "SELECT REGEXP_REPLACE(t.text1, 'TEST', 'replaced') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertSame('this is a test string', $result[0]['result']); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php index 594ad50b..9369d7e2 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RegexpTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Regexp; +use PHPUnit\Framework\Attributes\Test; class RegexpTest extends JsonTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_regexp(): void + #[Test] + public function regexp(): void { // NOTE: Using a string literal for the first argument because DQL does not support ->> operator in this context. $dql = "SELECT REGEXP('John', 'J.*n') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; @@ -23,7 +25,8 @@ public function test_regexp(): void $this->assertTrue($result[0]['result']); } - public function test_regexp_negative(): void + #[Test] + public function regexp_negative(): void { $dql = "SELECT REGEXP('John', 'Jane') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RoundTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RoundTest.php index d8304d47..2d487fe5 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RoundTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RoundTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Round; +use PHPUnit\Framework\Attributes\Test; class RoundTest extends NumericTestCase { protected function getStringFunctions(): array { - return ['ROUND' => Round::class]; + return [ + 'ROUND' => Round::class, + ]; } - public function test_round_with_positive_number(): void + #[Test] + public function can_round_positive_number(): void { $dql = 'SELECT ROUND(:number) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t @@ -22,7 +26,8 @@ public function test_round_with_positive_number(): void $this->assertEquals(3, $result[0]['result']); } - public function test_round_with_negative_number(): void + #[Test] + public function can_round_negative_number(): void { $dql = 'SELECT ROUND(:number) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t @@ -31,7 +36,8 @@ public function test_round_with_negative_number(): void $this->assertEquals(-3, $result[0]['result']); } - public function test_round_with_precision(): void + #[Test] + public function can_round_with_precision(): void { $dql = 'SELECT ROUND(:number, :precision) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t @@ -43,7 +49,8 @@ public function test_round_with_precision(): void $this->assertEquals(3.14, $result[0]['result']); } - public function test_round_with_negative_precision(): void + #[Test] + public function can_round_with_negative_precision(): void { $dql = 'SELECT ROUND(:number, :precision) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t @@ -55,7 +62,8 @@ public function test_round_with_negative_precision(): void $this->assertEquals(300, $result[0]['result']); } - public function test_round_with_column_value(): void + #[Test] + public function can_round_column_value(): void { $dql = 'SELECT ROUND(t.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SignTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SignTest.php index 0381fe9e..0135cca7 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SignTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/SignTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Sign; +use PHPUnit\Framework\Attributes\Test; class SignTest extends NumericTestCase { @@ -15,7 +16,8 @@ protected function getStringFunctions(): array ]; } - public function test_sign_with_zero(): void + #[Test] + public function sign_with_zero(): void { $dql = 'SELECT SIGN(0) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n @@ -24,7 +26,8 @@ public function test_sign_with_zero(): void $this->assertEquals(0, $result[0]['result']); } - public function test_sign_with_column_value(): void + #[Test] + public function sign_with_column_value(): void { $dql = 'SELECT SIGN(n.decimal1) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php index 273d046c..fd9c6cfa 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/StringAggTest.php @@ -5,15 +5,19 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\StringAgg; +use PHPUnit\Framework\Attributes\Test; class StringAggTest extends TextTestCase { protected function getStringFunctions(): array { - return ['STRING_AGG' => StringAgg::class]; + return [ + 'STRING_AGG' => StringAgg::class, + ]; } - public function test_string_agg_with_for_all_rows(): void + #[Test] + public function can_aggregate_all_rows_with_comma_delimiter(): void { $dql = "SELECT STRING_AGG(t.text1, ',') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t"; @@ -21,7 +25,8 @@ public function test_string_agg_with_for_all_rows(): void $this->assertSame('this is a test string,lorem ipsum dolor,foo,special,chars;test', $result[0]['result']); } - public function test_string_agg_with_for_all_rows_and_semicolon_delimiter(): void + #[Test] + public function can_aggregate_all_rows_with_semicolon_delimiter(): void { $dql = "SELECT STRING_AGG(t.text2, ';') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t"; @@ -29,14 +34,16 @@ public function test_string_agg_with_for_all_rows_and_semicolon_delimiter(): voi $this->assertSame('another test string;sit amet;bar;multi;delimiter,case', $result[0]['result']); } - public function test_string_agg_with_for_all_rows_and_space_delimiter(): void + #[Test] + public function can_aggregate_all_rows_with_space_delimiter(): void { $dql = "SELECT STRING_AGG(t.text1, ' ') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t"; $result = $this->executeDqlQuery($dql); $this->assertSame('this is a test string lorem ipsum dolor foo special,chars;test', $result[0]['result']); } - public function test_string_agg_with_where_clause(): void + #[Test] + public function can_aggregate_filtered_rows(): void { $dql = "SELECT STRING_AGG(t.text1, ',') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id in (1, 4)"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToCharTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToCharTest.php index 5e52d198..259ce61d 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToCharTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToCharTest.php @@ -9,6 +9,7 @@ use Doctrine\ORM\Query\QueryException; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToChar; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTimestamp; +use PHPUnit\Framework\Attributes\Test; use Tests\Integration\MartinGeorgiev\TestCase; class ToCharTest extends TestCase @@ -29,63 +30,72 @@ protected function getStringFunctions(): array ]; } - public function test_tochar_for_timestamp(): void + #[Test] + public function tochar_for_timestamp(): void { $dql = "SELECT to_char(t.datetimetz1, 'HH12:MI:SS') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('10:30:00', $result[0]['result']); + $this->assertSame('10:30:00', $result[0]['result']); } - public function test_tochar_for_interval(): void + #[Test] + public function tochar_for_interval(): void { $dql = "SELECT to_char(t.dateinterval1, 'HH24:MI:SS') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('15:02:12', $result[0]['result']); + $this->assertSame('15:02:12', $result[0]['result']); } - public function test_tochar_for_numeric(): void + #[Test] + public function tochar_for_numeric(): void { $dql = "SELECT to_char(t.decimal1, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('125.80-', $result[0]['result']); + $this->assertSame('125.80-', $result[0]['result']); } - public function test_tochar_for_numeric_literal(): void + #[Test] + public function tochar_for_numeric_literal(): void { $dql = "SELECT to_char(125.80, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('125.80+', $result[0]['result']); + $this->assertSame('125.80+', $result[0]['result']); } - public function test_tochar_for_numeric_literal_negative(): void + #[Test] + public function tochar_for_numeric_literal_negative(): void { $dql = "SELECT to_char(-125.80, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('125.80-', $result[0]['result']); + $this->assertSame('125.80-', $result[0]['result']); } - public function test_tochar_with_subfunction(): void + #[Test] + public function tochar_with_subfunction(): void { $dql = "SELECT to_char(to_timestamp('05 Dec 2000 at 11:55 and 32 seconds', 'DD Mon YYYY tt HH24:MI ttt SS ttttttt'), 'HH24:MI:SS') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('11:55:32', $result[0]['result']); + $this->assertSame('11:55:32', $result[0]['result']); } - public function test_tochar_throws_with_invalid_input_type(): void + #[Test] + public function tochar_throws_with_invalid_input_type(): void { $this->expectException(DriverException::class); $dql = "SELECT to_char('can only be timestamp, interval or numeric, never a string', 'DD Mon YYYY') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_tochar_throws_with_invalid_format(): void + #[Test] + public function tochar_throws_with_invalid_format(): void { $this->expectException(Exception::class); $dql = "SELECT to_char(t.decimal1, 'invalid_format') FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_tochar_throws_with_unsupported_null_input(): void + #[Test] + public function tochar_throws_with_unsupported_null_input(): void { $this->expectException(QueryException::class); $dql = "SELECT to_char(NULL, '999D99S') AS result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsNumerics t WHERE t.id = 1"; diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDateTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDateTest.php index 620d235c..47187933 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDateTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToDateTest.php @@ -7,48 +7,54 @@ use Doctrine\DBAL\Exception\DriverException; use Doctrine\ORM\Query\QueryException; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToDate; +use PHPUnit\Framework\Attributes\Test; class ToDateTest extends TextTestCase { protected function getStringFunctions(): array { return [ - 'to_date' => ToDate::class, + 'TO_DATE' => ToDate::class, ]; } - public function test_todate(): void + #[Test] + public function can_convert_string_to_date(): void { - $dql = "SELECT to_date('05 Dec 2000', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $dql = "SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('2000-12-05', $result[0]['result']); + $this->assertSame('2000-12-05', $result[0]['result']); } - public function test_todate_throws_with_invalid_input(): void + #[Test] + public function throws_exception_for_invalid_date_input(): void { $this->expectException(DriverException::class); - $dql = "SELECT to_date('invalid_date', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $dql = "SELECT TO_DATE('invalid_date', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_todate_with_invalid_format(): void + #[Test] + public function returns_default_date_for_invalid_format(): void { - $dql = "SELECT to_date('05 Dec 2000', 'invalid_format') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $dql = "SELECT TO_DATE('05 Dec 2000', 'invalid_format') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('2005-01-01', $result[0]['result']); + $this->assertSame('2005-01-01', $result[0]['result']); } - public function test_todate_throws_with_unsupported_format_type(): void + #[Test] + public function throws_exception_for_unsupported_format_type(): void { $this->expectException(QueryException::class); - $dql = "SELECT to_date('05 Dec 2000', 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $dql = "SELECT TO_DATE('05 Dec 2000', 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_todate_throws_with_unsupported_null_input(): void + #[Test] + public function throws_exception_for_null_input(): void { $this->expectException(QueryException::class); - $dql = "SELECT to_date(null, 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $dql = "SELECT TO_DATE(null, 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToNumberTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToNumberTest.php index f6d883ac..49fcd9c4 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToNumberTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToNumberTest.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Exception; use Doctrine\ORM\Query\QueryException; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToNumber; +use PHPUnit\Framework\Attributes\Test; class ToNumberTest extends TextTestCase { @@ -17,28 +18,32 @@ protected function getStringFunctions(): array ]; } - public function test_tonumber(): void + #[Test] + public function tonumber(): void { $dql = "SELECT to_number('12,454.8-', '99G999D9S') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('-12454.8', $result[0]['result']); + $this->assertSame('-12454.8', $result[0]['result']); } - public function test_tonumber_throws_with_invalid_format(): void + #[Test] + public function tonumber_throws_with_invalid_format(): void { $this->expectException(Exception::class); $dql = "SELECT to_number('12,454.8-', 'invalid_format') FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_tonumber_throws_with_unsupported_null_format(): void + #[Test] + public function tonumber_throws_with_unsupported_null_format(): void { $this->expectException(QueryException::class); $dql = "SELECT to_number('12,454.8-', null) FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_tonumber_throws_with_unsupported_input_type(): void + #[Test] + public function tonumber_throws_with_unsupported_input_type(): void { $this->expectException(QueryException::class); $dql = "SELECT to_number(123456, '999D99S') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTimestampTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTimestampTest.php index 742ab225..a86355c7 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTimestampTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ToTimestampTest.php @@ -7,6 +7,7 @@ use Doctrine\DBAL\Exception\DriverException; use Doctrine\ORM\Query\QueryException; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTimestamp; +use PHPUnit\Framework\Attributes\Test; class ToTimestampTest extends TextTestCase { @@ -17,35 +18,40 @@ protected function getStringFunctions(): array ]; } - public function test_totimestamp(): void + #[Test] + public function totimestamp(): void { $dql = "SELECT to_timestamp('05 Dec 2000 at 11:55 and 32 seconds', 'DD Mon YYYY tt HH24:MI ttt SS ttttttt') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('2000-12-05 11:55:32+00', $result[0]['result']); + $this->assertSame('2000-12-05 11:55:32+00', $result[0]['result']); } - public function test_totimestamp_throws_with_invalid_input(): void + #[Test] + public function totimestamp_throws_with_invalid_input(): void { $this->expectException(DriverException::class); $dql = "SELECT to_timestamp('invalid_date', 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_totimestamp_with_invalid_format(): void + #[Test] + public function totimestamp_with_invalid_format(): void { $dql = "SELECT to_timestamp('05 Dec 2000', 'invalid_format') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); - static::assertSame('2005-01-01 00:00:00+00', $result[0]['result']); + $this->assertSame('2005-01-01 00:00:00+00', $result[0]['result']); } - public function test_totimestamp_throws_with_unsupported_format_type(): void + #[Test] + public function totimestamp_throws_with_unsupported_format_type(): void { $this->expectException(QueryException::class); $dql = "SELECT to_timestamp('05 Dec 2000', 1) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $this->executeDqlQuery($dql); } - public function test_totimestamp_throws_with_unsupported_null_input(): void + #[Test] + public function totimestamp_throws_with_unsupported_null_input(): void { $this->expectException(QueryException::class); $dql = "SELECT to_timestamp(null, 'DD Mon YYYY') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php index 8445c440..474da50f 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsmatchTest.php @@ -4,28 +4,83 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; +use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTsquery; +use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ToTsvector; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Tsmatch; +use PHPUnit\Framework\Attributes\Test; -class TsmatchTest extends JsonTestCase +class TsmatchTest extends TextTestCase { protected function getStringFunctions(): array { return [ + 'TO_TSQUERY' => ToTsquery::class, + 'TO_TSVECTOR' => ToTsvector::class, 'TSMATCH' => Tsmatch::class, ]; } - public function test_tsmatch(): void + #[Test] + public function returns_true_when_text_search_matches_word_in_fixture_data(): void { - $dql = "SELECT TSMATCH('developer manager', 'developer') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text1), TO_TSQUERY('test')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertTrue($result[0]['result']); } - public function test_tsmatch_negative(): void + #[Test] + public function returns_false_when_text_search_does_not_match_fixture_data(): void { - $dql = "SELECT TSMATCH('developer manager', 'doctor') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsJsons t WHERE t.id = 1"; + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text1), TO_TSQUERY('nonexistent')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); $this->assertFalse($result[0]['result']); } + + #[Test] + public function returns_true_when_searching_for_multiple_words(): void + { + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text1), TO_TSQUERY('test & string')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_true_when_searching_with_or_operator(): void + { + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text1), TO_TSQUERY('lorem | nonexistent')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 2"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_false_when_searching_with_and_operator_for_missing_word(): void + { + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text1), TO_TSQUERY('lorem & nonexistent')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 2"; + $result = $this->executeDqlQuery($dql); + $this->assertFalse($result[0]['result']); + } + + #[Test] + public function returns_true_when_searching_second_text_field(): void + { + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text2), TO_TSQUERY('another')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_true_when_using_english_dictionary_configuration(): void + { + $dql = "SELECT TSMATCH(TO_TSVECTOR('english', t.text1), TO_TSQUERY('english', 'test')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 1"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } + + #[Test] + public function returns_true_when_searching_special_characters_text(): void + { + $dql = "SELECT TSMATCH(TO_TSVECTOR(t.text1), TO_TSQUERY('special')) as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsTexts t WHERE t.id = 4"; + $result = $this->executeDqlQuery($dql); + $this->assertTrue($result[0]['result']); + } } diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php index 8012fe3c..67d32040 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TsrangeTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Tsrange; +use PHPUnit\Framework\Attributes\Test; class TsrangeTest extends DateTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_tsrange(): void + #[Test] + public function can_create_timestamp_range_with_default_bounds(): void { $dql = 'SELECT TSRANGE(t.datetime1, t.datetime2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame('["2023-06-15 10:30:00","2023-06-16 11:45:00")', $result[0]['result']); } - public function test_tsrange_with_bounds(): void + #[Test] + public function can_create_timestamp_range_with_custom_bounds(): void { $dql = "SELECT TSRANGE(t.datetime1, t.datetime2, '(]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php index 168ce8c3..91839f6b 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TstzrangeTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Tstzrange; +use PHPUnit\Framework\Attributes\Test; class TstzrangeTest extends DateTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_tstzrange(): void + #[Test] + public function can_create_timestamptz_range_with_default_bounds(): void { $dql = 'SELECT TSTZRANGE(t.datetimetz1, t.datetimetz2) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsDates t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame('["2023-06-15 10:30:00+00","2023-06-16 11:45:00+00")', $result[0]['result']); } - public function test_tstzrange_with_bounds(): void + #[Test] + public function can_create_timestamptz_range_with_custom_bounds(): void { $dql = "SELECT TSTZRANGE(t.datetimetz1, t.datetimetz2, '(]') as result FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsDates t WHERE t.id = 1"; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/WidthBucketTest.php b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/WidthBucketTest.php index 4f74dc7c..1fb13c4e 100644 --- a/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/WidthBucketTest.php +++ b/tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/WidthBucketTest.php @@ -5,6 +5,7 @@ namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions; use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\WidthBucket; +use PHPUnit\Framework\Attributes\Test; class WidthBucketTest extends NumericTestCase { @@ -15,14 +16,16 @@ protected function getStringFunctions(): array ]; } - public function test_width_bucket(): void + #[Test] + public function width_bucket(): void { $dql = 'SELECT WIDTH_BUCKET(5.35, 0.024, 10.06, 5) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics t WHERE t.id = 1'; $result = $this->executeDqlQuery($dql); $this->assertSame(3, $result[0]['result']); } - public function test_width_bucket_with_entity_property(): void + #[Test] + public function width_bucket_with_entity_property(): void { $dql = 'SELECT WIDTH_BUCKET(n.decimal1, 0.0, 20.0, 4) as result FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsNumerics n WHERE n.id = 1'; $result = $this->executeDqlQuery($dql); diff --git a/tests/Integration/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php b/tests/Integration/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php index 84112ca1..3118318c 100644 --- a/tests/Integration/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php +++ b/tests/Integration/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php @@ -168,18 +168,16 @@ private function insertArray(array $arrayData): int */ private function assertArrayRoundTrip(int $id, array $expected, string $description): void { - // Test direct retrieval $retrieved = $this->retrieveArray($id); - self::assertEquals( + $this->assertEquals( $expected, $retrieved, \sprintf('Direct retrieval failed for %s', $description) ); - // Test text representation $postgresText = $this->retrieveArrayAsText($id); $parsed = PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresText); - self::assertEquals( + $this->assertEquals( $expected, $parsed, \sprintf('Text representation parsing failed for %s', $description) diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php index 68e857ad..75287254 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseArrayTest.php @@ -42,14 +42,14 @@ public function can_transform_from_php_value(?array $phpValue, ?string $postgres ->method('isValidArrayItemForDatabase') ->willReturn(true); - self::assertSame($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertSame($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php index db135de9..18b863f9 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseFloatArrayTestCase.php @@ -18,7 +18,7 @@ abstract class BaseFloatArrayTestCase extends TestCase #[Test] public function can_detect_invalid_for_transformation_php_value(mixed $phpValue): void { - self::assertFalse($this->fixture->isValidArrayItemForDatabase($phpValue)); + $this->assertFalse($this->fixture->isValidArrayItemForDatabase($phpValue)); } /** @@ -43,14 +43,14 @@ public static function provideInvalidDatabaseValueInputs(): array #[Test] public function can_transform_from_php_value(float $phpValue, string $postgresValue): void { - self::assertTrue($this->fixture->isValidArrayItemForDatabase($phpValue)); + $this->assertTrue($this->fixture->isValidArrayItemForDatabase($phpValue)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(float $phpValue, string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->transformArrayItemForPHP($postgresValue)); + $this->assertEquals($phpValue, $this->fixture->transformArrayItemForPHP($postgresValue)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php index 84fcbe80..ff5e27ee 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseIntegerArrayTestCase.php @@ -18,7 +18,7 @@ abstract class BaseIntegerArrayTestCase extends TestCase #[Test] public function can_detect_invalid_for_transformation_php_value(mixed $phpValue): void { - self::assertFalse($this->fixture->isValidArrayItemForDatabase($phpValue)); + $this->assertFalse($this->fixture->isValidArrayItemForDatabase($phpValue)); } /** @@ -44,14 +44,14 @@ public static function provideInvalidDatabaseValueInputs(): array #[Test] public function can_transform_from_php_value(int $phpValue, string $postgresValue): void { - self::assertTrue($this->fixture->isValidArrayItemForDatabase($phpValue)); + $this->assertTrue($this->fixture->isValidArrayItemForDatabase($phpValue)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(int $phpValue, string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->transformArrayItemForPHP($postgresValue)); + $this->assertEquals($phpValue, $this->fixture->transformArrayItemForPHP($postgresValue)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php index f688787d..307b8539 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseNetworkTypeArrayTest.php @@ -52,14 +52,14 @@ protected function throwInvalidItemException(): never #[Test] public function has_name(): void { - self::assertEquals('test_network_array', $this->fixture->getName()); + $this->assertEquals('test_network_array', $this->fixture->getName()); } #[Test] #[DataProvider('provideValidTransformations')] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } public static function provideValidTransformations(): array diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseRangeTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseRangeTestCase.php index 4ffca636..dbbcdc50 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseRangeTestCase.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseRangeTestCase.php @@ -38,7 +38,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals($this->getExpectedTypeName(), $this->fixture->getName()); + $this->assertEquals($this->getExpectedTypeName(), $this->fixture->getName()); } /** @@ -48,7 +48,7 @@ public function has_name(): void #[Test] public function can_transform_from_php_value(?Range $range, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($range, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($range, $this->platform)); } /** @@ -61,11 +61,11 @@ public function can_transform_to_php_value(?Range $range, ?string $postgresValue $result = $this->fixture->convertToPHPValue($postgresValue, $this->platform); if (!$range instanceof Range) { - self::assertNull($result); + $this->assertNull($result); } else { - self::assertInstanceOf($this->getExpectedValueObjectClass(), $result); - self::assertEquals($range->__toString(), $result->__toString()); - self::assertEquals($range->isEmpty(), $result->isEmpty()); + $this->assertInstanceOf($this->getExpectedValueObjectClass(), $result); + $this->assertEquals($range->__toString(), $result->__toString()); + $this->assertEquals($range->isEmpty(), $result->isEmpty()); } } @@ -79,7 +79,7 @@ public function can_transform_null_from_php_value(): void { $result = $this->fixture->convertToDatabaseValue(null, $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[Test] @@ -87,7 +87,7 @@ public function can_transform_null_from_sql_value(): void { $result = $this->fixture->convertToPHPValue(null, $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[Test] @@ -95,9 +95,9 @@ public function can_handle_postgres_empty_range(): void { $result = $this->fixture->convertToPHPValue('empty', $this->platform); - self::assertInstanceOf($this->getExpectedValueObjectClass(), $result); - self::assertEquals('empty', (string) $result); - self::assertTrue($result->isEmpty()); + $this->assertInstanceOf($this->getExpectedValueObjectClass(), $result); + $this->assertEquals('empty', (string) $result); + $this->assertTrue($result->isEmpty()); } #[Test] @@ -105,7 +105,7 @@ public function can_handle_empty_string_from_sql(): void { $result = $this->fixture->convertToPHPValue('', $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[DataProvider('provideInvalidDatabaseValues')] diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php index 75395985..16bd0b5e 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BaseTypeTest.php @@ -55,7 +55,7 @@ public function can_return_correct_type_name(): void protected const TYPE_NAME = 'custom_type'; }; - self::assertEquals('custom_type', $type->getName()); + $this->assertEquals('custom_type', $type->getName()); } #[Test] @@ -72,7 +72,7 @@ public function can_get_correct_sql_declaration(): void ->willReturn('CUSTOM_SQL_TYPE'); $result = $type->getSQLDeclaration([], $this->platform); - self::assertEquals('CUSTOM_SQL_TYPE', $result); + $this->assertEquals('CUSTOM_SQL_TYPE', $result); } #[Test] @@ -83,6 +83,6 @@ public function can_return_false_for_sql_comment_hint_requirement(): void }; // @phpstan-ignore-next-line Not all Doctrine version like this method as it's deprecated. For now, we ignore the deprecation. - self::assertFalse($type->requiresSQLCommentHint($this->platform)); + $this->assertFalse($type->requiresSQLCommentHint($this->platform)); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php index 924a7f2a..a05ff9f5 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BigIntArrayTest.php @@ -19,16 +19,16 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('bigint[]', $this->fixture->getName()); + $this->assertEquals('bigint[]', $this->fixture->getName()); } public static function provideInvalidDatabaseValueInputs(): array { return \array_merge(parent::provideInvalidDatabaseValueInputs(), [ - ['9223372036854775808'], // Greater than PHP_INT_MAX - ['-9223372036854775809'], // Less than PHP_INT_MIN - ['1.23e10'], // Scientific notation - ['12345.67890'], // Decimal number + ['9223372036854775808'], // Greater than PHP_INT_MAX + ['-9223372036854775809'], // Less than PHP_INT_MIN + ['1.23e10'], // Scientific notation + ['12345.67890'], // Decimal number ]); } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php index 4f466393..3a40a72c 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/BooleanArrayTest.php @@ -30,7 +30,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('bool[]', $this->fixture->getName()); + $this->assertEquals('bool[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] @@ -41,7 +41,7 @@ public function can_transform_from_php_value(?array $phpValue, ?string $postgres ->with($phpValue) ->willReturn($platformValue); - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] @@ -52,7 +52,7 @@ public function can_transform_to_php_value(?array $phpValue, ?string $postgresVa ->with($this->anything()) ->willReturnCallback('boolval'); - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php index 7a78c4e4..823a5bd1 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrArrayTest.php @@ -30,21 +30,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('cidr[]', $this->fixture->getName()); + $this->assertEquals('cidr[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php index b740c2b4..abff2bdf 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/CidrTest.php @@ -31,21 +31,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('cidr', $this->fixture->getName()); + $this->assertEquals('cidr', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?string $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?string $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php index 0d6ed3fd..1a3695a1 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/DoublePrecisionArrayTest.php @@ -20,7 +20,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('double precision[]', $this->fixture->getName()); + $this->assertEquals('double precision[]', $this->fixture->getName()); } public static function provideInvalidDatabaseValueInputs(): array diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyArrayTest.php index d001d6d1..cb9970ce 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyArrayTest.php @@ -30,7 +30,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('geography[]', $this->type->getName()); + $this->assertEquals('geography[]', $this->type->getName()); } #[Test] @@ -38,7 +38,7 @@ public function can_convert_null_to_database_value(): void { $result = $this->type->convertToDatabaseValue(null, $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[Test] @@ -46,7 +46,7 @@ public function can_convert_empty_array_to_database_value(): void { $result = $this->type->convertToDatabaseValue([], $this->platform); - self::assertSame('{}', $result); + $this->assertSame('{}', $result); } #[DataProvider('provideValidArraysForDatabase')] @@ -55,7 +55,7 @@ public function can_convert_valid_arrays_to_database_value(array $phpArray, stri { $result = $this->type->convertToDatabaseValue($phpArray, $this->platform); - self::assertSame($expectedPostgresArray, $result); + $this->assertSame($expectedPostgresArray, $result); } /** @@ -136,7 +136,7 @@ public function can_convert_null_to_php_value(): void { $result = $this->type->convertToPHPValue(null, $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[Test] @@ -144,7 +144,7 @@ public function can_convert_empty_postgres_array_to_php_value(): void { $result = $this->type->convertToPHPValue('{}', $this->platform); - self::assertSame([], $result); + $this->assertSame([], $result); } #[DataProvider('provideValidPostgresArraysForPHP')] @@ -153,12 +153,12 @@ public function can_convert_valid_postgres_arrays_to_php_value(string $postgresA { $result = $this->type->convertToPHPValue($postgresArray, $this->platform); - self::assertIsArray($result); - self::assertCount(\count($expectedPhpArray), $result); + $this->assertIsArray($result); + $this->assertCount(\count($expectedPhpArray), $result); foreach ($result as $index => $item) { - self::assertInstanceOf(WktSpatialData::class, $item); - self::assertSame($expectedPhpArray[$index], (string) $item); + $this->assertInstanceOf(WktSpatialData::class, $item); + $this->assertSame($expectedPhpArray[$index], (string) $item); } } @@ -225,14 +225,14 @@ public function preserves_data_in_bidirectional_conversion(array $phpArray): voi $databaseValue = $this->type->convertToDatabaseValue($phpArray, $this->platform); $convertedBack = $this->type->convertToPHPValue($databaseValue, $this->platform); - self::assertIsArray($convertedBack); - self::assertCount(\count($phpArray), $convertedBack); + $this->assertIsArray($convertedBack); + $this->assertCount(\count($phpArray), $convertedBack); foreach ($convertedBack as $index => $item) { - self::assertInstanceOf(WktSpatialData::class, $item); + $this->assertInstanceOf(WktSpatialData::class, $item); $originalItem = $phpArray[$index]; - self::assertInstanceOf(WktSpatialData::class, $originalItem); - self::assertSame((string) $originalItem, (string) $item); + $this->assertInstanceOf(WktSpatialData::class, $originalItem); + $this->assertSame((string) $originalItem, (string) $item); } } @@ -258,8 +258,8 @@ public static function provideBidirectionalTestCases(): array 'world coordinate edge cases' => [ [ WktSpatialData::fromWkt('POINT(-180 -90)'), // Southwest corner - WktSpatialData::fromWkt('POINT(180 90)'), // Northeast corner - WktSpatialData::fromWkt('POINT(0 0)'), // Null Island + WktSpatialData::fromWkt('POINT(180 90)'), // Northeast corner + WktSpatialData::fromWkt('POINT(0 0)'), // Null Island ], ], ]; @@ -269,7 +269,7 @@ public static function provideBidirectionalTestCases(): array #[Test] public function can_validate_array_items_for_database(mixed $item): void { - self::assertFalse($this->type->isValidArrayItemForDatabase($item)); + $this->assertFalse($this->type->isValidArrayItemForDatabase($item)); } /** @@ -299,8 +299,8 @@ public function can_normalize_dimensional_modifiers(string $input, string $expec { $result = $this->type->transformArrayItemForPHP($input); - self::assertInstanceOf(WktSpatialData::class, $result); - self::assertEquals($expected, (string) $result); + $this->assertInstanceOf(WktSpatialData::class, $result); + $this->assertEquals($expected, (string) $result); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyTest.php index d2cce4be..0cdaef88 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeographyTest.php @@ -32,14 +32,14 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('geography', $this->fixture->getName()); + $this->assertEquals('geography', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?WktSpatialData $wktSpatialData, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($wktSpatialData, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($wktSpatialData, $this->platform)); } #[DataProvider('provideValidTransformations')] @@ -48,13 +48,13 @@ public function can_transform_to_php_value(?WktSpatialData $wktSpatialData, ?str { $result = $this->fixture->convertToPHPValue($postgresValue, $this->platform); if (!$wktSpatialData instanceof WktSpatialData) { - self::assertNull($result); + $this->assertNull($result); return; } - self::assertInstanceOf(WktSpatialData::class, $result); - self::assertEquals((string) $wktSpatialData, (string) $result); + $this->assertInstanceOf(WktSpatialData::class, $result); + $this->assertEquals((string) $wktSpatialData, (string) $result); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryArrayTest.php index 389bb238..f6faaf0d 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryArrayTest.php @@ -30,7 +30,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('geometry[]', $this->type->getName()); + $this->assertEquals('geometry[]', $this->type->getName()); } #[Test] @@ -38,7 +38,7 @@ public function can_convert_null_to_database_value(): void { $result = $this->type->convertToDatabaseValue(null, $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[Test] @@ -46,7 +46,7 @@ public function can_convert_empty_array_to_database_value(): void { $result = $this->type->convertToDatabaseValue([], $this->platform); - self::assertSame('{}', $result); + $this->assertSame('{}', $result); } #[DataProvider('provideValidArraysForDatabase')] @@ -55,7 +55,7 @@ public function can_convert_valid_arrays_to_database_value(array $phpArray, stri { $result = $this->type->convertToDatabaseValue($phpArray, $this->platform); - self::assertSame($expectedPostgresArray, $result); + $this->assertSame($expectedPostgresArray, $result); } /** @@ -127,7 +127,7 @@ public function can_convert_null_to_php_value(): void { $result = $this->type->convertToPHPValue(null, $this->platform); - self::assertNull($result); + $this->assertNull($result); } #[Test] @@ -135,7 +135,7 @@ public function can_convert_empty_postgres_array_to_php_value(): void { $result = $this->type->convertToPHPValue('{}', $this->platform); - self::assertSame([], $result); + $this->assertSame([], $result); } #[DataProvider('provideValidPostgresArraysForPHP')] @@ -144,12 +144,12 @@ public function can_convert_valid_postgres_arrays_to_php_value(string $postgresA { $result = $this->type->convertToPHPValue($postgresArray, $this->platform); - self::assertIsArray($result); - self::assertCount(\count($expectedPhpArray), $result); + $this->assertIsArray($result); + $this->assertCount(\count($expectedPhpArray), $result); foreach ($result as $index => $item) { - self::assertInstanceOf(WktSpatialData::class, $item); - self::assertSame($expectedPhpArray[$index], (string) $item); + $this->assertInstanceOf(WktSpatialData::class, $item); + $this->assertSame($expectedPhpArray[$index], (string) $item); } } @@ -270,14 +270,14 @@ public function preserves_data_in_bidirectional_conversion(array $phpArray): voi $databaseValue = $this->type->convertToDatabaseValue($phpArray, $this->platform); $convertedBack = $this->type->convertToPHPValue($databaseValue, $this->platform); - self::assertIsArray($convertedBack); - self::assertCount(\count($phpArray), $convertedBack); + $this->assertIsArray($convertedBack); + $this->assertCount(\count($phpArray), $convertedBack); foreach ($convertedBack as $index => $item) { - self::assertInstanceOf(WktSpatialData::class, $item); + $this->assertInstanceOf(WktSpatialData::class, $item); $originalItem = $phpArray[$index]; - self::assertInstanceOf(WktSpatialData::class, $originalItem); - self::assertSame((string) $originalItem, (string) $item); + $this->assertInstanceOf(WktSpatialData::class, $originalItem); + $this->assertSame((string) $originalItem, (string) $item); } } @@ -313,7 +313,7 @@ public static function provideBidirectionalTestCases(): array #[Test] public function can_validate_array_items_for_database(mixed $item, bool $expected): void { - self::assertSame($expected, $this->type->isValidArrayItemForDatabase($item)); + $this->assertSame($expected, $this->type->isValidArrayItemForDatabase($item)); } /** @@ -351,8 +351,8 @@ public function can_transform_array_item_for_php(): void $wktString = 'POINT(1 2)'; $result = $this->type->transformArrayItemForPHP($wktString); - self::assertInstanceOf(WktSpatialData::class, $result); - self::assertEquals($wktString, (string) $result); + $this->assertInstanceOf(WktSpatialData::class, $result); + $this->assertEquals($wktString, (string) $result); } #[Test] @@ -360,7 +360,7 @@ public function can_transform_null_array_item_for_php(): void { $result = $this->type->transformArrayItemForPHP(null); - self::assertNull($result); + $this->assertNull($result); } #[DataProvider('provideDimensionalModifierNormalization')] @@ -369,8 +369,8 @@ public function can_normalize_dimensional_modifiers(string $input, string $expec { $result = $this->type->transformArrayItemForPHP($input); - self::assertInstanceOf(WktSpatialData::class, $result); - self::assertEquals($expected, (string) $result); + $this->assertInstanceOf(WktSpatialData::class, $result); + $this->assertEquals($expected, (string) $result); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryTest.php index c7f71704..6b67745d 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/GeometryTest.php @@ -32,14 +32,14 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('geometry', $this->fixture->getName()); + $this->assertEquals('geometry', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?WktSpatialData $wktSpatialData, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($wktSpatialData, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($wktSpatialData, $this->platform)); } #[DataProvider('provideValidTransformations')] @@ -48,13 +48,13 @@ public function can_transform_to_php_value(?WktSpatialData $wktSpatialData, ?str { $result = $this->fixture->convertToPHPValue($postgresValue, $this->platform); if (!$wktSpatialData instanceof WktSpatialData) { - self::assertNull($result); + $this->assertNull($result); return; } - self::assertInstanceOf(WktSpatialData::class, $result); - self::assertEquals((string) $wktSpatialData, (string) $result); + $this->assertInstanceOf(WktSpatialData::class, $result); + $this->assertEquals((string) $wktSpatialData, (string) $result); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php index cd9bafdd..1e0a8dfd 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetArrayTest.php @@ -30,21 +30,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('inet[]', $this->fixture->getName()); + $this->assertEquals('inet[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php index e4fa2092..e833440d 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/InetTest.php @@ -31,21 +31,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('inet', $this->fixture->getName()); + $this->assertEquals('inet', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?string $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?string $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php index f9093ef4..fb6e4db9 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/IntegerArrayTest.php @@ -17,16 +17,16 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('integer[]', $this->fixture->getName()); + $this->assertEquals('integer[]', $this->fixture->getName()); } public static function provideInvalidDatabaseValueInputs(): array { return \array_merge(parent::provideInvalidDatabaseValueInputs(), [ - ['2147483648'], // Greater than max integer - ['-2147483649'], // Less than min integer - ['1.23e6'], // Scientific notation - ['123456.789'], // Decimal number + ['2147483648'], // Greater than max integer + ['-2147483649'], // Less than min integer + ['1.23e6'], // Scientific notation + ['123456.789'], // Decimal number ]); } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php index 11ac3c7c..5af80832 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbArrayTest.php @@ -31,21 +31,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('jsonb[]', $this->fixture->getName()); + $this->assertEquals('jsonb[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php index 92b4312a..e09c9c2f 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/JsonbTest.php @@ -32,21 +32,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('jsonb', $this->fixture->getName()); + $this->assertEquals('jsonb', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(null|array|bool|float|int|string $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(null|array|bool|float|int|string $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php index e8f096a3..7b779b40 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrArrayTest.php @@ -30,21 +30,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('macaddr[]', $this->fixture->getName()); + $this->assertEquals('macaddr[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php index ee83b99e..084eeb5b 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/MacaddrTest.php @@ -31,21 +31,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('macaddr', $this->fixture->getName()); + $this->assertEquals('macaddr', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?string $phpInput, ?string $postgresValueAfterNormalization, ?string $phpValueAfterRetrievalFromDatabase): void { - self::assertEquals($postgresValueAfterNormalization, $this->fixture->convertToDatabaseValue($phpInput, $this->platform)); + $this->assertEquals($postgresValueAfterNormalization, $this->fixture->convertToDatabaseValue($phpInput, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?string $phpInput, ?string $postgresValueAfterNormalization, ?string $phpValueAfterRetrievalFromDatabase): void { - self::assertEquals($phpValueAfterRetrievalFromDatabase, $this->fixture->convertToPHPValue($postgresValueAfterNormalization, $this->platform)); + $this->assertEquals($phpValueAfterRetrievalFromDatabase, $this->fixture->convertToPHPValue($postgresValueAfterNormalization, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php index bab84979..0c0be483 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointArrayTest.php @@ -31,21 +31,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('point[]', $this->fixture->getName()); + $this->assertEquals('point[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** @@ -180,9 +180,9 @@ public function can_handle_edge_case_with_empty_and_malformed_arrays(): void $result2 = $this->fixture->convertToPHPValue('{invalid}', $this->platform); $result3 = $this->fixture->convertToPHPValue('{""}', $this->platform); - self::assertEquals([], $result1); - self::assertEquals([], $result2); - self::assertEquals([], $result3); + $this->assertEquals([], $result1); + $this->assertEquals([], $result2); + $this->assertEquals([], $result3); } #[Test] @@ -191,8 +191,8 @@ public function can_return_empty_array_for_non_standard_postgres_array_format(): $result1 = $this->fixture->convertToPHPValue('[test]', $this->platform); $result2 = $this->fixture->convertToPHPValue('not-an-array', $this->platform); - self::assertEquals([], $result1); - self::assertEquals([], $result2); + $this->assertEquals([], $result1); + $this->assertEquals([], $result2); } #[Test] diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php index 815b6292..e5ec8788 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/PointTest.php @@ -32,21 +32,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('point', $this->fixture->getName()); + $this->assertEquals('point', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?PointValueObject $pointValueObject, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($pointValueObject, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($pointValueObject, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?PointValueObject $pointValueObject, ?string $postgresValue): void { - self::assertEquals($pointValueObject, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($pointValueObject, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php index 98d13bf0..d39b8257 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/RealArrayTest.php @@ -19,7 +19,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('real[]', $this->fixture->getName()); + $this->assertEquals('real[]', $this->fixture->getName()); } public static function provideInvalidDatabaseValueInputs(): array diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php index 5e54b65c..49a4e320 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/SmallIntArrayTest.php @@ -17,7 +17,7 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('smallint[]', $this->fixture->getName()); + $this->assertEquals('smallint[]', $this->fixture->getName()); } public static function provideInvalidDatabaseValueInputs(): array diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php index bcc51ed9..1fadc2da 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/TextArrayTest.php @@ -30,21 +30,21 @@ protected function setUp(): void #[Test] public function has_name(): void { - self::assertEquals('text[]', $this->fixture->getName()); + $this->assertEquals('text[]', $this->fixture->getName()); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_from_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); + $this->assertEquals($postgresValue, $this->fixture->convertToDatabaseValue($phpValue, $this->platform)); } #[DataProvider('provideValidTransformations')] #[Test] public function can_transform_to_php_value(?array $phpValue, ?string $postgresValue): void { - self::assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($phpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } /** @@ -111,7 +111,7 @@ public function can_transform_unquoted_postgres_array_to_php(): void $postgresValue = '{STRING_A,STRING_B,STRING_C,STRING_D}'; $expectedPhpValue = ['STRING_A', 'STRING_B', 'STRING_C', 'STRING_D']; - self::assertEquals($expectedPhpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($expectedPhpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } #[Test] @@ -120,6 +120,6 @@ public function can_handle_backslashes_correctly(): void $postgresValue = '{"simple\\\backslash"}'; $expectedPhpValue = ['simple\backslash']; - self::assertEquals($expectedPhpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); + $this->assertEquals($expectedPhpValue, $this->fixture->convertToPHPValue($postgresValue, $this->platform)); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseRangeTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseRangeTestCase.php index 728c9e21..b4354e47 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseRangeTestCase.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseRangeTestCase.php @@ -24,8 +24,8 @@ public function can_create_simple_range(): void $range = $this->createSimpleRange(); $expectedString = $this->getExpectedSimpleRangeString(); - self::assertEquals($expectedString, (string) $range); - self::assertFalse($range->isEmpty()); + $this->assertEquals($expectedString, (string) $range); + $this->assertFalse($range->isEmpty()); } #[Test] @@ -33,8 +33,8 @@ public function can_create_empty_range(): void { $range = $this->createEmptyRange(); - self::assertEquals('empty', (string) $range); - self::assertTrue($range->isEmpty()); + $this->assertEquals('empty', (string) $range); + $this->assertTrue($range->isEmpty()); } #[Test] @@ -42,8 +42,8 @@ public function can_create_infinite_range(): void { $range = $this->createInfiniteRange(); - self::assertEquals('(,)', (string) $range); - self::assertFalse($range->isEmpty()); + $this->assertEquals('(,)', (string) $range); + $this->assertFalse($range->isEmpty()); } #[Test] @@ -52,8 +52,8 @@ public function can_create_inclusive_range(): void $range = $this->createInclusiveRange(); $expectedString = $this->getExpectedInclusiveRangeString(); - self::assertEquals($expectedString, (string) $range); - self::assertFalse($range->isEmpty()); + $this->assertEquals($expectedString, (string) $range); + $this->assertFalse($range->isEmpty()); } /** @@ -63,7 +63,7 @@ public function can_create_inclusive_range(): void #[DataProvider('provideContainsTestCases')] public function can_check_contains(Range $range, mixed $value, bool $expected): void { - self::assertEquals($expected, $range->contains($value)); + $this->assertEquals($expected, $range->contains($value)); } /** @@ -102,7 +102,7 @@ public function can_handle_comparison_via_is_empty(): void $testCases = $this->getComparisonTestCases(); foreach ($testCases as $description => $testCase) { - self::assertEquals( + $this->assertEquals( $testCase['expectedEmpty'], $testCase['range']->isEmpty(), 'Comparison test failed: '.$description @@ -184,8 +184,8 @@ abstract protected function getComparisonTestCases(): array; */ protected function assertRangeEquals(Range $expected, Range $actual, string $message = ''): void { - self::assertEquals($expected->__toString(), $actual->__toString(), $message.' (string representation)'); - self::assertEquals($expected->isEmpty(), $actual->isEmpty(), $message.' (isEmpty state)'); + $this->assertEquals($expected->__toString(), $actual->__toString(), $message.' (string representation)'); + $this->assertEquals($expected->isEmpty(), $actual->isEmpty(), $message.' (isEmpty state)'); } /** @@ -197,7 +197,7 @@ protected function assertRangeEquals(Range $expected, Range $actual, string $mes protected function assertRangeContainsAll(Range $range, array $values, string $message = ''): void { foreach ($values as $value) { - self::assertTrue( + $this->assertTrue( $range->contains($value), $message.' - Range should contain value: '.\var_export($value, true) ); @@ -213,7 +213,7 @@ protected function assertRangeContainsAll(Range $range, array $values, string $m protected function assertRangeContainsNone(Range $range, array $values, string $message = ''): void { foreach ($values as $value) { - self::assertFalse( + $this->assertFalse( $range->contains($value), $message.' - Range should not contain value: '.\var_export($value, true) ); @@ -227,7 +227,7 @@ protected function assertRangeContainsNone(Range $range, array $values, string $ */ protected function assertRangeStringEquals(string $expected, Range $range, string $message = ''): void { - self::assertEquals($expected, (string) $range, $message); + $this->assertEquals($expected, (string) $range, $message); } /** @@ -237,8 +237,8 @@ protected function assertRangeStringEquals(string $expected, Range $range, strin */ protected function assertRangeIsEmpty(Range $range, string $message = ''): void { - self::assertTrue($range->isEmpty(), $message.' - Range should be empty'); - self::assertEquals('empty', (string) $range, $message.' - Empty range should have "empty" string representation'); + $this->assertTrue($range->isEmpty(), $message.' - Range should be empty'); + $this->assertEquals('empty', (string) $range, $message.' - Empty range should have "empty" string representation'); } /** @@ -248,8 +248,8 @@ protected function assertRangeIsEmpty(Range $range, string $message = ''): void */ protected function assertRangeIsNotEmpty(Range $range, string $message = ''): void { - self::assertFalse($range->isEmpty(), $message.' - Range should not be empty'); - self::assertNotEquals('empty', (string) $range, $message.' - Non-empty range should not have "empty" string representation'); + $this->assertFalse($range->isEmpty(), $message.' - Range should not be empty'); + $this->assertNotEquals('empty', (string) $range, $message.' - Non-empty range should not have "empty" string representation'); } /** @@ -261,7 +261,7 @@ protected function assertRangeIsNotEmpty(Range $range, string $message = ''): vo protected function assertBoundaryConditions(Range $range, array $testCases, string $message = ''): void { foreach ($testCases as $description => $testCase) { - self::assertEquals( + $this->assertEquals( $testCase['expected'], $range->contains($testCase['value']), $message.' - Boundary test failed: '.$description @@ -299,17 +299,17 @@ protected function generateBoundaryTestCases( protected function assertEqualBoundsHandling(callable $rangeFactory, mixed $value): void { $inclusiveEqual = $rangeFactory($value, $value, true, true); - self::assertFalse($inclusiveEqual->isEmpty(), 'Equal bounds with inclusive brackets should not be empty'); - self::assertTrue($inclusiveEqual->contains($value), 'Equal bounds with inclusive brackets should contain the value'); + $this->assertFalse($inclusiveEqual->isEmpty(), 'Equal bounds with inclusive brackets should not be empty'); + $this->assertTrue($inclusiveEqual->contains($value), 'Equal bounds with inclusive brackets should contain the value'); $exclusiveExclusive = $rangeFactory($value, $value, false, false); - self::assertTrue($exclusiveExclusive->isEmpty(), 'Equal bounds with exclusive brackets should be empty'); + $this->assertTrue($exclusiveExclusive->isEmpty(), 'Equal bounds with exclusive brackets should be empty'); $inclusiveExclusive = $rangeFactory($value, $value, true, false); - self::assertTrue($inclusiveExclusive->isEmpty(), 'Equal bounds with mixed brackets should be empty'); + $this->assertTrue($inclusiveExclusive->isEmpty(), 'Equal bounds with mixed brackets should be empty'); $exclusiveInclusive = $rangeFactory($value, $value, false, true); - self::assertTrue($exclusiveInclusive->isEmpty(), 'Equal bounds with mixed brackets should be empty'); + $this->assertTrue($exclusiveInclusive->isEmpty(), 'Equal bounds with mixed brackets should be empty'); } /** @@ -320,6 +320,6 @@ protected function assertEqualBoundsHandling(callable $rangeFactory, mixed $valu protected function assertReverseBoundsHandling(callable $rangeFactory, mixed $lower, mixed $upper): void { $reverseRange = $rangeFactory($lower, $upper, true, false); - self::assertTrue($reverseRange->isEmpty(), 'Range with lower > upper should be empty'); + $this->assertTrue($reverseRange->isEmpty(), 'Range with lower > upper should be empty'); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseTimestampRangeTestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseTimestampRangeTestCase.php index 9c54a134..05ebc89c 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseTimestampRangeTestCase.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/BaseTimestampRangeTestCase.php @@ -110,9 +110,9 @@ public function can_handle_microsecond_precision(): void $range = $this->createRangeWithTimes($earlier, $later); - self::assertTrue($range->contains($this->createTimeWithMicroseconds('2023-01-01 10:00:00.400000'))); - self::assertFalse($range->contains($this->createTimeWithMicroseconds('2023-01-01 10:00:00.100000'))); - self::assertFalse($range->contains($this->createTimeWithMicroseconds('2023-01-01 10:00:00.700000'))); + $this->assertTrue($range->contains($this->createTimeWithMicroseconds('2023-01-01 10:00:00.400000'))); + $this->assertFalse($range->contains($this->createTimeWithMicroseconds('2023-01-01 10:00:00.100000'))); + $this->assertFalse($range->contains($this->createTimeWithMicroseconds('2023-01-01 10:00:00.700000'))); } #[Test] @@ -124,8 +124,8 @@ public function can_handle_different_datetime_implementations(): void $range = $this->createRangeWithTimes($dateTime, $dateTimeImmutable); $formatted = (string) $range; - self::assertStringContainsString('2023-01-01 10:00:00', $formatted); - self::assertStringContainsString('2023-01-01 18:00:00', $formatted); + $this->assertStringContainsString('2023-01-01 10:00:00', $formatted); + $this->assertStringContainsString('2023-01-01 18:00:00', $formatted); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DateRangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DateRangeTest.php index 029e292e..88e242be 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DateRangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DateRangeTest.php @@ -142,8 +142,8 @@ public function can_create_single_day_range(): void $date = new \DateTimeImmutable('2023-06-15'); $dateRange = DateRange::singleDay($date); - self::assertEquals('[2023-06-15,2023-06-16)', (string) $dateRange); - self::assertFalse($dateRange->isEmpty()); + $this->assertEquals('[2023-06-15,2023-06-16)', (string) $dateRange); + $this->assertFalse($dateRange->isEmpty()); } #[Test] @@ -151,8 +151,8 @@ public function can_create_year_range(): void { $dateRange = DateRange::year(2023); - self::assertEquals('[2023-01-01,2024-01-01)', (string) $dateRange); - self::assertFalse($dateRange->isEmpty()); + $this->assertEquals('[2023-01-01,2024-01-01)', (string) $dateRange); + $this->assertFalse($dateRange->isEmpty()); } #[Test] @@ -160,8 +160,8 @@ public function can_create_month_range(): void { $dateRange = DateRange::month(2023, 6); - self::assertEquals('[2023-06-01,2023-07-01)', (string) $dateRange); - self::assertFalse($dateRange->isEmpty()); + $this->assertEquals('[2023-06-01,2023-07-01)', (string) $dateRange); + $this->assertFalse($dateRange->isEmpty()); } public static function provideContainsTestCases(): \Generator @@ -273,10 +273,10 @@ public function throws_exception_for_invalid_date_string_in_parse_via_from_strin public function can_parse_various_date_formats_via_from_string(): void { $dateRange = DateRange::fromString('[2023-01-01,2023-12-31)'); - self::assertStringContainsString('2023-01-01', (string) $dateRange); + $this->assertStringContainsString('2023-01-01', (string) $dateRange); $range2 = DateRange::fromString('[2023-12-31,2024-01-01)'); - self::assertStringContainsString('2023-12-31', (string) $range2); + $this->assertStringContainsString('2023-12-31', (string) $range2); } #[Test] @@ -289,11 +289,11 @@ public function can_format_date_values_via_to_string(): void ); $formatted = (string) $dateRange; - self::assertStringContainsString('2023-06-15', $formatted); - self::assertStringContainsString('2023-06-16', $formatted); + $this->assertStringContainsString('2023-06-15', $formatted); + $this->assertStringContainsString('2023-06-16', $formatted); // Should not contain time information - self::assertStringNotContainsString('14:30:00', $formatted); - self::assertStringNotContainsString('20:45:00', $formatted); + $this->assertStringNotContainsString('14:30:00', $formatted); + $this->assertStringNotContainsString('20:45:00', $formatted); } #[Test] @@ -305,26 +305,26 @@ public function can_compare_dates_with_different_times_via_is_empty(): void // Test comparison logic through isEmpty() - more natural than reflection // When lower > upper, range should be empty $reverseRange = new DateRange($date2, $date1); // 20:00 to 10:00 - self::assertTrue($reverseRange->isEmpty()); + $this->assertTrue($reverseRange->isEmpty()); // When lower < upper, range should not be empty $normalRange = new DateRange($date1, $date2); // 10:00 to 20:00 - self::assertFalse($normalRange->isEmpty()); + $this->assertFalse($normalRange->isEmpty()); // When lower == upper with exclusive bounds, should be empty $equalExclusive = new DateRange($date1, $date1, false, false); - self::assertTrue($equalExclusive->isEmpty()); + $this->assertTrue($equalExclusive->isEmpty()); // When lower == upper with inclusive bounds, should not be empty $equalInclusive = new DateRange($date1, $date1, true, true); - self::assertFalse($equalInclusive->isEmpty()); + $this->assertFalse($equalInclusive->isEmpty()); } #[Test] #[DataProvider('provideLeapYearTestCases')] public function can_handle_leap_years(DateRange $dateRange, string $expectedString, string $description): void { - self::assertEquals($expectedString, (string) $dateRange, $description); + $this->assertEquals($expectedString, (string) $dateRange, $description); } public static function provideLeapYearTestCases(): \Generator @@ -350,7 +350,7 @@ public static function provideLeapYearTestCases(): \Generator #[DataProvider('provideEdgeCaseMonthTestCases')] public function can_handle_edge_case_months(DateRange $dateRange, string $expectedString, string $description): void { - self::assertEquals($expectedString, (string) $dateRange, $description); + $this->assertEquals($expectedString, (string) $dateRange, $description); } public static function provideEdgeCaseMonthTestCases(): \Generator diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DimensionalModifierTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DimensionalModifierTest.php index e5065f6e..cdc86d4e 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DimensionalModifierTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/DimensionalModifierTest.php @@ -17,8 +17,8 @@ public function can_create_from_string(string $modifierString, DimensionalModifi { $modifier = DimensionalModifier::from($modifierString); - self::assertSame($dimensionalModifier, $modifier); - self::assertSame($modifierString, $modifier->value); + $this->assertSame($dimensionalModifier, $modifier); + $this->assertSame($modifierString, $modifier->value); } #[Test] @@ -35,7 +35,7 @@ public function returns_enum_for_valid_modifiers(string $modifierString, Dimensi { $result = DimensionalModifier::tryFrom($modifierString); - self::assertSame($dimensionalModifier, $result); + $this->assertSame($dimensionalModifier, $result); } /** @@ -53,9 +53,9 @@ public static function provideValidDimensionalModifiers(): array #[Test] public function returns_null_for_invalid_modifiers(): void { - self::assertNull(DimensionalModifier::tryFrom('INVALID_MODIFIER')); - self::assertNull(DimensionalModifier::tryFrom('')); - self::assertNull(DimensionalModifier::tryFrom('X')); - self::assertNull(DimensionalModifier::tryFrom('Y')); + $this->assertNull(DimensionalModifier::tryFrom('INVALID_MODIFIER')); + $this->assertNull(DimensionalModifier::tryFrom('')); + $this->assertNull(DimensionalModifier::tryFrom('X')); + $this->assertNull(DimensionalModifier::tryFrom('Y')); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/GeometryTypeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/GeometryTypeTest.php index 783cf6a0..53b705d3 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/GeometryTypeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/GeometryTypeTest.php @@ -17,8 +17,8 @@ public function can_create_from_string(string $typeString, GeometryType $geometr { $result = GeometryType::from($typeString); - self::assertSame($geometryType, $result); - self::assertSame($typeString, $result->value); + $this->assertSame($geometryType, $result); + $this->assertSame($typeString, $result->value); } #[Test] @@ -35,7 +35,7 @@ public function returns_enum_for_valid_types(string $typeString, GeometryType $g { $result = GeometryType::tryFrom($typeString); - self::assertSame($geometryType, $result); + $this->assertSame($geometryType, $result); } /** @@ -65,7 +65,7 @@ public static function provideValidGeometryTypes(): array #[Test] public function returns_null_for_invalid_types(): void { - self::assertNull(GeometryType::tryFrom('INVALID_TYPE')); - self::assertNull(GeometryType::tryFrom('')); + $this->assertNull(GeometryType::tryFrom('INVALID_TYPE')); + $this->assertNull(GeometryType::tryFrom('')); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int4RangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int4RangeTest.php index 1cb43be2..a207e0f2 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int4RangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int4RangeTest.php @@ -132,6 +132,6 @@ public function can_allow_max_int4_values(): void { $int4Range = new Int4Range(-2147483648, 2147483647); - self::assertEquals('[-2147483648,2147483647)', (string) $int4Range); + $this->assertEquals('[-2147483648,2147483647)', (string) $int4Range); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int8RangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int8RangeTest.php index 952528d2..94f7fc4b 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int8RangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/Int8RangeTest.php @@ -92,8 +92,8 @@ public function can_handle_large_values(): void { $int8Range = new Int8Range(PHP_INT_MIN, PHP_INT_MAX); - self::assertEquals('['.PHP_INT_MIN.','.PHP_INT_MAX.')', (string) $int8Range); - self::assertFalse($int8Range->isEmpty()); + $this->assertEquals('['.PHP_INT_MIN.','.PHP_INT_MAX.')', (string) $int8Range); + $this->assertFalse($int8Range->isEmpty()); } public static function provideContainsTestCases(): \Generator diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/NumericRangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/NumericRangeTest.php index 564380bc..280277d7 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/NumericRangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/NumericRangeTest.php @@ -153,54 +153,54 @@ public function throws_exception_for_invalid_parse_value_via_from_string(): void public function can_parse_integer_and_float_values_via_from_string(): void { $numericRange = NumericRange::fromString('[42,100)'); - self::assertStringContainsString('42', (string) $numericRange); + $this->assertStringContainsString('42', (string) $numericRange); $range2 = NumericRange::fromString('[-123,0)'); - self::assertStringContainsString('-123', (string) $range2); + $this->assertStringContainsString('-123', (string) $range2); $range3 = NumericRange::fromString('[3.14,10)'); - self::assertStringContainsString('3.14', (string) $range3); + $this->assertStringContainsString('3.14', (string) $range3); $range4 = NumericRange::fromString('[-2.5,0)'); - self::assertStringContainsString('-2.5', (string) $range4); + $this->assertStringContainsString('-2.5', (string) $range4); } #[Test] public function can_handle_mixed_integer_and_float_ranges(): void { $range = new NumericRange(1, 10.5); - self::assertEquals('[1,10.5)', (string) $range); + $this->assertEquals('[1,10.5)', (string) $range); $range2 = new NumericRange(1.5, 10); - self::assertEquals('[1.5,10)', (string) $range2); + $this->assertEquals('[1.5,10)', (string) $range2); } #[Test] public function can_compare_mixed_numeric_types_via_is_empty(): void { $reverseRange = new NumericRange(5.1, 5.0); - self::assertTrue($reverseRange->isEmpty()); + $this->assertTrue($reverseRange->isEmpty()); $normalRange = new NumericRange(5.0, 5.1); - self::assertFalse($normalRange->isEmpty()); + $this->assertFalse($normalRange->isEmpty()); $equalRange = new NumericRange(5, 5.0, true, true); - self::assertFalse($equalRange->isEmpty()); + $this->assertFalse($equalRange->isEmpty()); $equalExclusive = new NumericRange(5.0, 5.0, false, false); - self::assertTrue($equalExclusive->isEmpty()); + $this->assertTrue($equalExclusive->isEmpty()); } #[Test] public function can_format_numeric_values_via_to_string(): void { $range1 = new NumericRange(42, 100); - self::assertStringContainsString('42', (string) $range1); + $this->assertStringContainsString('42', (string) $range1); $range2 = new NumericRange(3.14, 10); - self::assertStringContainsString('3.14', (string) $range2); + $this->assertStringContainsString('3.14', (string) $range2); $range3 = new NumericRange(-2.5, 0); - self::assertStringContainsString('-2.5', (string) $range3); + $this->assertStringContainsString('-2.5', (string) $range3); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TsRangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TsRangeTest.php index a2f3f4d2..028b691c 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TsRangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TsRangeTest.php @@ -172,8 +172,8 @@ public function can_create_hour_range(): void $end = $start->modify('+1 hour'); $tsRange = new TsRange($start, $end); - self::assertEquals('[2023-01-01 14:00:00.000000,2023-01-01 15:00:00.000000)', (string) $tsRange); - self::assertFalse($tsRange->isEmpty()); + $this->assertEquals('[2023-01-01 14:00:00.000000,2023-01-01 15:00:00.000000)', (string) $tsRange); + $this->assertFalse($tsRange->isEmpty()); } public static function provideContainsTestCases(): \Generator @@ -225,7 +225,7 @@ public function can_handle_microseconds_correctly(): void $end = new \DateTimeImmutable('2023-01-01 18:00:00.654321'); $tsRange = new TsRange($start, $end); - self::assertEquals('[2023-01-01 10:00:00.123456,2023-01-01 18:00:00.654321)', (string) $tsRange); + $this->assertEquals('[2023-01-01 10:00:00.123456,2023-01-01 18:00:00.654321)', (string) $tsRange); } #[Test] @@ -246,8 +246,8 @@ public function can_format_timestamp_values_via_to_string(): void ); $formatted = (string) $tsRange; - self::assertStringContainsString('2023-06-15 14:30:25.123456', $formatted); - self::assertStringContainsString('2023-06-15 18:45:30.654321', $formatted); + $this->assertStringContainsString('2023-06-15 14:30:25.123456', $formatted); + $this->assertStringContainsString('2023-06-15 18:45:30.654321', $formatted); } #[Test] @@ -258,7 +258,7 @@ public function can_handle_microseconds_in_formatting(): void new \DateTimeImmutable('2023-01-01 18:00:00.654321') ); - self::assertEquals('[2023-01-01 10:00:00.123456,2023-01-01 18:00:00.654321)', (string) $tsRange); + $this->assertEquals('[2023-01-01 10:00:00.123456,2023-01-01 18:00:00.654321)', (string) $tsRange); } #[Test] @@ -267,8 +267,8 @@ public function can_parse_timestamp_strings_via_from_string(): void $tsRange = TsRange::fromString('[2023-06-15 14:30:25.123456,2023-06-15 18:45:30.654321)'); $formatted = (string) $tsRange; - self::assertStringContainsString('2023-06-15 14:30:25.123456', $formatted); - self::assertStringContainsString('2023-06-15 18:45:30.654321', $formatted); + $this->assertStringContainsString('2023-06-15 14:30:25.123456', $formatted); + $this->assertStringContainsString('2023-06-15 18:45:30.654321', $formatted); } #[Test] @@ -289,6 +289,6 @@ public function can_handle_timezone_information_in_input(): void // The timestamp should be formatted as-is without timezone conversion $formatted = (string) $tsRange; - self::assertStringContainsString('2023-01-01 10:00:00.000000', $formatted); + $this->assertStringContainsString('2023-01-01 10:00:00.000000', $formatted); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TstzRangeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TstzRangeTest.php index 57bd0384..5b1f49b3 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TstzRangeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/TstzRangeTest.php @@ -112,8 +112,8 @@ public function can_create_hour_range(): void $end = $start->modify('+1 hour'); $tstzRange = new TstzRange($start, $end); - self::assertEquals('[2023-01-01 14:00:00.000000+02:00,2023-01-01 15:00:00.000000+02:00)', (string) $tstzRange); - self::assertFalse($tstzRange->isEmpty()); + $this->assertEquals('[2023-01-01 14:00:00.000000+02:00,2023-01-01 15:00:00.000000+02:00)', (string) $tstzRange); + $this->assertFalse($tstzRange->isEmpty()); } public static function provideContainsTestCases(): \Generator @@ -165,7 +165,7 @@ public function can_handle_different_timezones(): void $end = new \DateTimeImmutable('2023-01-01 18:00:00-05:00'); $tstzRange = new TstzRange($start, $end); - self::assertEquals('[2023-01-01 10:00:00.000000+02:00,2023-01-01 18:00:00.000000-05:00)', (string) $tstzRange); + $this->assertEquals('[2023-01-01 10:00:00.000000+02:00,2023-01-01 18:00:00.000000-05:00)', (string) $tstzRange); } #[Test] @@ -175,7 +175,7 @@ public function can_handle_microseconds_with_timezone(): void $end = new \DateTimeImmutable('2023-01-01 18:00:00.654321+00:00'); $tstzRange = new TstzRange($start, $end); - self::assertEquals('[2023-01-01 10:00:00.123456+00:00,2023-01-01 18:00:00.654321+00:00)', (string) $tstzRange); + $this->assertEquals('[2023-01-01 10:00:00.123456+00:00,2023-01-01 18:00:00.654321+00:00)', (string) $tstzRange); } #[Test] @@ -196,8 +196,8 @@ public function can_format_timestamp_with_timezone_via_to_string(): void ); $formatted = (string) $tstzRange; - self::assertStringContainsString('2023-06-15 14:30:25.123456+02:00', $formatted); - self::assertStringContainsString('2023-06-15 18:45:30.654321+02:00', $formatted); + $this->assertStringContainsString('2023-06-15 14:30:25.123456+02:00', $formatted); + $this->assertStringContainsString('2023-06-15 18:45:30.654321+02:00', $formatted); } #[Test] @@ -210,7 +210,7 @@ public function can_handle_timezone_comparison(): void $tstzRange = new TstzRange($utc, $later); // EST represents the same moment as the lower bound, so it should be contained (inclusive lower) - self::assertTrue($tstzRange->contains($est)); + $this->assertTrue($tstzRange->contains($est)); } #[Test] @@ -219,8 +219,8 @@ public function can_parse_timestamp_with_timezone_strings_via_from_string(): voi $tstzRange = TstzRange::fromString('[2023-06-15 14:30:25.123456+02:00,2023-06-15 18:45:30.654321+02:00)'); $formatted = (string) $tstzRange; - self::assertStringContainsString('2023-06-15 14:30:25.123456+02:00', $formatted); - self::assertStringContainsString('2023-06-15 18:45:30.654321+02:00', $formatted); + $this->assertStringContainsString('2023-06-15 14:30:25.123456+02:00', $formatted); + $this->assertStringContainsString('2023-06-15 18:45:30.654321+02:00', $formatted); } #[Test] @@ -239,8 +239,8 @@ public function can_preserve_timezone_information(): void $tstzRange = new TstzRange($timestampWithTz, null); $formatted = (string) $tstzRange; - self::assertStringContainsString('+02:00', $formatted); - self::assertStringContainsString('2023-01-01 10:00:00.000000+02:00', $formatted); + $this->assertStringContainsString('+02:00', $formatted); + $this->assertStringContainsString('2023-01-01 10:00:00.000000+02:00', $formatted); } #[Test] @@ -252,7 +252,7 @@ public function can_handle_different_datetime_implementations(): void $tstzRange = new TstzRange($dateTime, $dateTimeImmutable); $formatted = (string) $tstzRange; - self::assertStringContainsString('+02:00', $formatted); - self::assertStringContainsString('-05:00', $formatted); + $this->assertStringContainsString('+02:00', $formatted); + $this->assertStringContainsString('-05:00', $formatted); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/WktSpatialDataTest.php b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/WktSpatialDataTest.php index 64a1ec68..b9c91679 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/WktSpatialDataTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/DBAL/Types/ValueObject/WktSpatialDataTest.php @@ -20,10 +20,10 @@ public function can_create_from_wkt(string $wkt, string $expectedType, ?int $exp { $wktSpatialData = WktSpatialData::fromWkt($wkt); - self::assertSame(GeometryType::from($expectedType), $wktSpatialData->getGeometryType()); - self::assertSame($expectedSrid, $wktSpatialData->getSrid()); - self::assertSame($wkt, $wktSpatialData->getWkt()); - self::assertSame($wkt, (string) $wktSpatialData); + $this->assertSame(GeometryType::from($expectedType), $wktSpatialData->getGeometryType()); + $this->assertSame($expectedSrid, $wktSpatialData->getSrid()); + $this->assertSame($wkt, $wktSpatialData->getWkt()); + $this->assertSame($wkt, (string) $wktSpatialData); } /** @@ -71,7 +71,7 @@ public function can_extract_dimensional_modifier(string $wkt, ?DimensionalModifi { $wktSpatialData = WktSpatialData::fromWkt($wkt); - self::assertSame($dimensionalModifier, $wktSpatialData->getDimensionalModifier()); + $this->assertSame($dimensionalModifier, $wktSpatialData->getDimensionalModifier()); } /** @@ -141,7 +141,7 @@ public function preserves_dimensional_modifiers_in_round_trip(string $wkt): void $wktSpatialData = WktSpatialData::fromWkt($wkt); $output = (string) $wktSpatialData; - self::assertSame($wkt, $output, 'Dimensional modifier should be preserved in round-trip conversion'); + $this->assertSame($wkt, $output, 'Dimensional modifier should be preserved in round-trip conversion'); } /** diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php index e44c17c6..68e6971f 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AllOnTheRightExistOnTheLeftTest.php @@ -21,16 +21,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if single key exists in jsonb' => "SELECT (c0_.object1 ??& ARRAY['test']) AS sclr_0 FROM ContainsJsons c0_", - 'checks if multiple keys exist in jsonb' => "SELECT (c0_.object1 ??& ARRAY['key1', 'key2']) AS sclr_0 FROM ContainsJsons c0_", + 'checks if single key exists in jsonb' => "SELECT (c0_.jsonbObject1 ??& ARRAY['test']) AS sclr_0 FROM ContainsJsons c0_", + 'checks if multiple keys exist in jsonb' => "SELECT (c0_.jsonbObject1 ??& ARRAY['key1', 'key2']) AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if single key exists in jsonb' => \sprintf("SELECT ALL_ON_RIGHT_EXIST_ON_LEFT(e.object1, ARRAY('test')) FROM %s e", ContainsJsons::class), - 'checks if multiple keys exist in jsonb' => \sprintf("SELECT ALL_ON_RIGHT_EXIST_ON_LEFT(e.object1, ARRAY('key1', 'key2')) FROM %s e", ContainsJsons::class), + 'checks if single key exists in jsonb' => \sprintf("SELECT ALL_ON_RIGHT_EXIST_ON_LEFT(e.jsonbObject1, ARRAY('test')) FROM %s e", ContainsJsons::class), + 'checks if multiple keys exist in jsonb' => \sprintf("SELECT ALL_ON_RIGHT_EXIST_ON_LEFT(e.jsonbObject1, ARRAY('key1', 'key2')) FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php index 4132babe..f86d1455 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/AnyOnTheRightExistsOnTheLeftTest.php @@ -21,18 +21,18 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if any key exists in jsonb' => "SELECT (c0_.object1 ??| ARRAY['test']) AS sclr_0 FROM ContainsJsons c0_", - 'checks if any of multiple keys exist in jsonb' => "SELECT (c0_.object1 ??| ARRAY['key1', 'key2']) AS sclr_0 FROM ContainsJsons c0_", - 'checks with parameter' => 'SELECT (c0_.object1 ??| ?) AS sclr_0 FROM ContainsJsons c0_', + 'checks if any key exists in jsonb' => "SELECT (c0_.jsonbObject1 ??| ARRAY['test']) AS sclr_0 FROM ContainsJsons c0_", + 'checks if any of multiple keys exist in jsonb' => "SELECT (c0_.jsonbObject1 ??| ARRAY['key1', 'key2']) AS sclr_0 FROM ContainsJsons c0_", + 'checks with parameter' => 'SELECT (c0_.jsonbObject1 ??| ?) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - 'checks if any key exists in jsonb' => \sprintf("SELECT ANY_ON_RIGHT_EXISTS_ON_LEFT(e.object1, ARRAY('test')) FROM %s e", ContainsJsons::class), - 'checks if any of multiple keys exist in jsonb' => \sprintf("SELECT ANY_ON_RIGHT_EXISTS_ON_LEFT(e.object1, ARRAY('key1', 'key2')) FROM %s e", ContainsJsons::class), - 'checks with parameter' => \sprintf('SELECT ANY_ON_RIGHT_EXISTS_ON_LEFT(e.object1, :parameter) FROM %s e', ContainsJsons::class), + 'checks if any key exists in jsonb' => \sprintf("SELECT ANY_ON_RIGHT_EXISTS_ON_LEFT(e.jsonbObject1, ARRAY('test')) FROM %s e", ContainsJsons::class), + 'checks if any of multiple keys exist in jsonb' => \sprintf("SELECT ANY_ON_RIGHT_EXISTS_ON_LEFT(e.jsonbObject1, ARRAY('key1', 'key2')) FROM %s e", ContainsJsons::class), + 'checks with parameter' => \sprintf('SELECT ANY_ON_RIGHT_EXISTS_ON_LEFT(e.jsonbObject1, :parameter) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php index 2cc1492e..3d4fcf83 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DeleteAtPathTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT (c0_.object1 #- c0_.object2) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT (c0_.jsonbObject1 #- c0_.jsonbObject2) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT DELETE_AT_PATH(e.object1, e.object2) FROM %s e', ContainsJsons::class), + \sprintf('SELECT DELETE_AT_PATH(e.jsonbObject1, e.jsonbObject2) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php index ff8d469e..662cd19d 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonArrayLengthTest.php @@ -19,7 +19,7 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'gets length of top-level array' => 'SELECT json_array_length(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'gets length of top-level array' => 'SELECT json_array_length(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', 'gets length from literal json' => "SELECT json_array_length('{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", ]; } @@ -27,7 +27,7 @@ protected function getExpectedSqlStatements(): array protected function getDqlStatements(): array { return [ - 'gets length of top-level array' => \sprintf('SELECT JSON_ARRAY_LENGTH(e.object1) FROM %s e', ContainsJsons::class), + 'gets length of top-level array' => \sprintf('SELECT JSON_ARRAY_LENGTH(e.jsonObject1) FROM %s e', ContainsJsons::class), 'gets length from literal json' => \sprintf("SELECT JSON_ARRAY_LENGTH('{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), ]; } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php index 25d5d76d..46c0b960 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php @@ -27,24 +27,24 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'builds JSON object with field value' => "SELECT json_build_object('key1', c0_.object1) AS sclr_0 FROM ContainsJsons c0_", + 'builds JSON object with field value' => "SELECT json_build_object('key1', c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_", 'builds JSON object with function result and literal' => "SELECT json_build_object('key1', UPPER('value1'), 'key2', 'value2') AS sclr_0 FROM ContainsJsons c0_", - 'builds JSON object with multiple field values' => "SELECT json_build_object('key1', c0_.object1, 'key2', c0_.object2) AS sclr_0 FROM ContainsJsons c0_", + 'builds JSON object with multiple field values' => "SELECT json_build_object('key1', c0_.jsonObject1, 'key2', c0_.jsonObject2) AS sclr_0 FROM ContainsJsons c0_", 'builds JSON object with many key-value pairs' => "SELECT json_build_object('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') AS sclr_0 FROM ContainsJsons c0_", 'builds JSON object with numeric and boolean values' => "SELECT json_build_object('numeric_key', '123', 'boolean_key', 'true') AS sclr_0 FROM ContainsJsons c0_", - 'builds JSON object with mixed field and literal values' => "SELECT json_build_object('field_key', c0_.object1, 'literal_key', 'literal_value') AS sclr_0 FROM ContainsJsons c0_", + 'builds JSON object with mixed field and literal values' => "SELECT json_build_object('field_key', c0_.jsonObject1, 'literal_key', 'literal_value') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'builds JSON object with field value' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.object1) FROM %s e", ContainsJsons::class), + 'builds JSON object with field value' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.jsonObject1) FROM %s e", ContainsJsons::class), 'builds JSON object with function result and literal' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', UPPER('value1'), 'key2', 'value2') FROM %s e", ContainsJsons::class), - 'builds JSON object with multiple field values' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.object1, 'key2', e.object2) FROM %s e", ContainsJsons::class), + 'builds JSON object with multiple field values' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.jsonObject1, 'key2', e.jsonObject2) FROM %s e", ContainsJsons::class), 'builds JSON object with many key-value pairs' => \sprintf("SELECT JSON_BUILD_OBJECT('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') FROM %s e", ContainsJsons::class), 'builds JSON object with numeric and boolean values' => \sprintf("SELECT JSON_BUILD_OBJECT('numeric_key', '123', 'boolean_key', 'true') FROM %s e", ContainsJsons::class), - 'builds JSON object with mixed field and literal values' => \sprintf("SELECT JSON_BUILD_OBJECT('field_key', e.object1, 'literal_key', 'literal_value') FROM %s e", ContainsJsons::class), + 'builds JSON object with mixed field and literal values' => \sprintf("SELECT JSON_BUILD_OBJECT('field_key', e.jsonObject1, 'literal_key', 'literal_value') FROM %s e", ContainsJsons::class), ]; } @@ -54,7 +54,7 @@ public function throws_exception_for_odd_number_of_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('json_build_object() requires an even number of arguments'); - $dql = \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.object1, 'key2') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.jsonObject1, 'key2') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php index 0c3654ac..f6ee111d 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'expands json object into key-value pairs' => 'SELECT json_each(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'expands json object into key-value pairs' => 'SELECT json_each(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - 'expands json object into key-value pairs' => \sprintf('SELECT JSON_EACH(e.object1) FROM %s e', ContainsJsons::class), + 'expands json object into key-value pairs' => \sprintf('SELECT JSON_EACH(e.jsonObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php index 6b7f10c0..4e398101 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'expands json object into text key-value pairs' => 'SELECT json_each_text(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'expands json object into text key-value pairs' => 'SELECT json_each_text(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - 'expands json object into text key-value pairs' => \sprintf('SELECT JSON_EACH_TEXT(e.object1) FROM %s e', ContainsJsons::class), + 'expands json object into text key-value pairs' => \sprintf('SELECT JSON_EACH_TEXT(e.jsonObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php index 320803bf..ff4567f5 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php @@ -19,20 +19,20 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if simple path exists' => "SELECT json_exists(c0_.object1, '$.name') AS sclr_0 FROM ContainsJsons c0_", - 'checks if nested path exists' => "SELECT json_exists(c0_.object1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_", - 'checks if array element exists' => "SELECT json_exists(c0_.object1, '$.items[0]') AS sclr_0 FROM ContainsJsons c0_", - 'checks if deeply nested array element exists' => "SELECT json_exists(c0_.object1, '$.users[0].addresses[0].street') AS sclr_0 FROM ContainsJsons c0_", + 'checks if simple path exists' => "SELECT json_exists(c0_.jsonObject1, '$.name') AS sclr_0 FROM ContainsJsons c0_", + 'checks if nested path exists' => "SELECT json_exists(c0_.jsonObject1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_", + 'checks if array element exists' => "SELECT json_exists(c0_.jsonObject1, '$.items[0]') AS sclr_0 FROM ContainsJsons c0_", + 'checks if deeply nested array element exists' => "SELECT json_exists(c0_.jsonObject1, '$.users[0].addresses[0].street') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if simple path exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.name') FROM %s e", ContainsJsons::class), - 'checks if nested path exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.address.city') FROM %s e", ContainsJsons::class), - 'checks if array element exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.items[0]') FROM %s e", ContainsJsons::class), - 'checks if deeply nested array element exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.users[0].addresses[0].street') FROM %s e", ContainsJsons::class), + 'checks if simple path exists' => \sprintf("SELECT JSON_EXISTS(e.jsonObject1, '$.name') FROM %s e", ContainsJsons::class), + 'checks if nested path exists' => \sprintf("SELECT JSON_EXISTS(e.jsonObject1, '$.address.city') FROM %s e", ContainsJsons::class), + 'checks if array element exists' => \sprintf("SELECT JSON_EXISTS(e.jsonObject1, '$.items[0]') FROM %s e", ContainsJsons::class), + 'checks if deeply nested array element exists' => \sprintf("SELECT JSON_EXISTS(e.jsonObject1, '$.users[0].addresses[0].street') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php index df8a9791..e338ba32 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsIntegerTest.php @@ -21,18 +21,18 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts field as integer' => "SELECT CAST(c0_.object1 ->> 'rank' as BIGINT) AS sclr_0 FROM ContainsJsons c0_", - 'extracts array element as integer' => 'SELECT CAST(c0_.object1 ->> 0 as BIGINT) AS sclr_0 FROM ContainsJsons c0_', - 'extracts nested array element as integer' => "SELECT CAST((c0_.object1 -> 'scores') ->> 1 as BIGINT) AS sclr_0 FROM ContainsJsons c0_", + 'extracts field as integer' => "SELECT CAST(c0_.jsonObject1 ->> 'rank' as BIGINT) AS sclr_0 FROM ContainsJsons c0_", + 'extracts array element as integer' => 'SELECT CAST(c0_.jsonObject1 ->> 0 as BIGINT) AS sclr_0 FROM ContainsJsons c0_', + 'extracts nested array element as integer' => "SELECT CAST((c0_.jsonObject1 -> 'scores') ->> 1 as BIGINT) AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts field as integer' => \sprintf("SELECT JSON_GET_FIELD_AS_INTEGER(e.object1, 'rank') FROM %s e", ContainsJsons::class), - 'extracts array element as integer' => \sprintf('SELECT JSON_GET_FIELD_AS_INTEGER(e.object1, 0) FROM %s e', ContainsJsons::class), - 'extracts nested array element as integer' => \sprintf("SELECT JSON_GET_FIELD_AS_INTEGER(JSON_GET_FIELD(e.object1, 'scores'), 1) FROM %s e", ContainsJsons::class), + 'extracts field as integer' => \sprintf("SELECT JSON_GET_FIELD_AS_INTEGER(e.jsonObject1, 'rank') FROM %s e", ContainsJsons::class), + 'extracts array element as integer' => \sprintf('SELECT JSON_GET_FIELD_AS_INTEGER(e.jsonObject1, 0) FROM %s e', ContainsJsons::class), + 'extracts nested array element as integer' => \sprintf("SELECT JSON_GET_FIELD_AS_INTEGER(JSON_GET_FIELD(e.jsonObject1, 'scores'), 1) FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php index d76866ea..66f150f9 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldAsTextTest.php @@ -21,18 +21,18 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts field as text' => "SELECT (c0_.object1 ->> 'country') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array element as text' => 'SELECT (c0_.object1 ->> 0) AS sclr_0 FROM ContainsJsons c0_', - 'extracts nested array element as text' => "SELECT ((c0_.object1 -> 'tags') ->> 1) AS sclr_0 FROM ContainsJsons c0_", + 'extracts field as text' => "SELECT (c0_.jsonObject1 ->> 'country') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array element as text' => 'SELECT (c0_.jsonObject1 ->> 0) AS sclr_0 FROM ContainsJsons c0_', + 'extracts nested array element as text' => "SELECT ((c0_.jsonObject1 -> 'tags') ->> 1) AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts field as text' => \sprintf("SELECT JSON_GET_FIELD_AS_TEXT(e.object1, 'country') FROM %s e", ContainsJsons::class), - 'extracts array element as text' => \sprintf('SELECT JSON_GET_FIELD_AS_TEXT(e.object1, 0) FROM %s e', ContainsJsons::class), - 'extracts nested array element as text' => \sprintf("SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(e.object1, 'tags'), 1) FROM %s e", ContainsJsons::class), + 'extracts field as text' => \sprintf("SELECT JSON_GET_FIELD_AS_TEXT(e.jsonObject1, 'country') FROM %s e", ContainsJsons::class), + 'extracts array element as text' => \sprintf('SELECT JSON_GET_FIELD_AS_TEXT(e.jsonObject1, 0) FROM %s e', ContainsJsons::class), + 'extracts nested array element as text' => \sprintf("SELECT JSON_GET_FIELD_AS_TEXT(JSON_GET_FIELD(e.jsonObject1, 'tags'), 1) FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php index c629dc28..ba1b44c9 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetFieldTest.php @@ -19,22 +19,22 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts top-level field from json' => "SELECT (c0_.object1 -> 'key') AS sclr_0 FROM ContainsJsons c0_", - 'extracts nested field from json' => "SELECT ((c0_.object1 -> 'nested') -> 'key') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array element by index' => 'SELECT (c0_.object1 -> 0) AS sclr_0 FROM ContainsJsons c0_', - 'extracts nested array element by index' => "SELECT ((c0_.object1 -> 'tags') -> 1) AS sclr_0 FROM ContainsJsons c0_", - 'extracts field from array element by index' => "SELECT ((c0_.object1 -> 0) -> 'name') AS sclr_0 FROM ContainsJsons c0_", + 'extracts top-level field from json' => "SELECT (c0_.jsonObject1 -> 'key') AS sclr_0 FROM ContainsJsons c0_", + 'extracts nested field from json' => "SELECT ((c0_.jsonObject1 -> 'nested') -> 'key') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array element by index' => 'SELECT (c0_.jsonObject1 -> 0) AS sclr_0 FROM ContainsJsons c0_', + 'extracts nested array element by index' => "SELECT ((c0_.jsonObject1 -> 'tags') -> 1) AS sclr_0 FROM ContainsJsons c0_", + 'extracts field from array element by index' => "SELECT ((c0_.jsonObject1 -> 0) -> 'name') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts top-level field from json' => \sprintf("SELECT JSON_GET_FIELD(e.object1, 'key') FROM %s e", ContainsJsons::class), - 'extracts nested field from json' => \sprintf("SELECT JSON_GET_FIELD(JSON_GET_FIELD(e.object1, 'nested'), 'key') FROM %s e", ContainsJsons::class), - 'extracts array element by index' => \sprintf('SELECT JSON_GET_FIELD(e.object1, 0) FROM %s e', ContainsJsons::class), - 'extracts nested array element by index' => \sprintf("SELECT JSON_GET_FIELD(JSON_GET_FIELD(e.object1, 'tags'), 1) FROM %s e", ContainsJsons::class), - 'extracts field from array element by index' => \sprintf("SELECT JSON_GET_FIELD(JSON_GET_FIELD(e.object1, 0), 'name') FROM %s e", ContainsJsons::class), + 'extracts top-level field from json' => \sprintf("SELECT JSON_GET_FIELD(e.jsonObject1, 'key') FROM %s e", ContainsJsons::class), + 'extracts nested field from json' => \sprintf("SELECT JSON_GET_FIELD(JSON_GET_FIELD(e.jsonObject1, 'nested'), 'key') FROM %s e", ContainsJsons::class), + 'extracts array element by index' => \sprintf('SELECT JSON_GET_FIELD(e.jsonObject1, 0) FROM %s e', ContainsJsons::class), + 'extracts nested array element by index' => \sprintf("SELECT JSON_GET_FIELD(JSON_GET_FIELD(e.jsonObject1, 'tags'), 1) FROM %s e", ContainsJsons::class), + 'extracts field from array element by index' => \sprintf("SELECT JSON_GET_FIELD(JSON_GET_FIELD(e.jsonObject1, 0), 'name') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php index 0c8cdcf2..980131cb 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectAsTextTest.php @@ -19,26 +19,26 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts top-level object as text' => "SELECT (c0_.object1 #>> '{metadata}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts nested object as text' => "SELECT (c0_.object1 #>> '{user,address}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array element as text' => "SELECT (c0_.object1 #>> '{items,0}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts deeply nested object as text' => "SELECT (c0_.object1 #>> '{store,departments,main}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts from complex path as text' => "SELECT (c0_.object1 #>> '{data,users,0,profile}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts last array element as text' => "SELECT (c0_.object1 #>> '{records,-1}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts nested array element as text' => "SELECT (c0_.object1 #>> '{categories,2,description}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts top-level object as text' => "SELECT (c0_.jsonObject1 #>> '{metadata}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts nested object as text' => "SELECT (c0_.jsonObject1 #>> '{user,address}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array element as text' => "SELECT (c0_.jsonObject1 #>> '{items,0}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts deeply nested object as text' => "SELECT (c0_.jsonObject1 #>> '{store,departments,main}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts from complex path as text' => "SELECT (c0_.jsonObject1 #>> '{data,users,0,profile}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts last array element as text' => "SELECT (c0_.jsonObject1 #>> '{records,-1}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts nested array element as text' => "SELECT (c0_.jsonObject1 #>> '{categories,2,description}') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts top-level object as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{metadata}') FROM %s e", ContainsJsons::class), - 'extracts nested object as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{user,address}') FROM %s e", ContainsJsons::class), - 'extracts array element as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{items,0}') FROM %s e", ContainsJsons::class), - 'extracts deeply nested object as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{store,departments,main}') FROM %s e", ContainsJsons::class), - 'extracts from complex path as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{data,users,0,profile}') FROM %s e", ContainsJsons::class), - 'extracts last array element as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{records,-1}') FROM %s e", ContainsJsons::class), - 'extracts nested array element as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.object1, '{categories,2,description}') FROM %s e", ContainsJsons::class), + 'extracts top-level object as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{metadata}') FROM %s e", ContainsJsons::class), + 'extracts nested object as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{user,address}') FROM %s e", ContainsJsons::class), + 'extracts array element as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{items,0}') FROM %s e", ContainsJsons::class), + 'extracts deeply nested object as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{store,departments,main}') FROM %s e", ContainsJsons::class), + 'extracts from complex path as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{data,users,0,profile}') FROM %s e", ContainsJsons::class), + 'extracts last array element as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{records,-1}') FROM %s e", ContainsJsons::class), + 'extracts nested array element as text' => \sprintf("SELECT JSON_GET_OBJECT_AS_TEXT(e.jsonObject1, '{categories,2,description}') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php index 3c669e98..3b58a55d 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonGetObjectTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts JSON object at specified path' => "SELECT (c0_.object1 #> '{residency}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts JSON object at specified path' => "SELECT (c0_.jsonObject1 #> '{residency}') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts JSON object at specified path' => \sprintf("SELECT JSON_GET_OBJECT(e.object1, '{residency}') FROM %s e", ContainsJsons::class), + 'extracts JSON object at specified path' => \sprintf("SELECT JSON_GET_OBJECT(e.jsonObject1, '{residency}') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php index 672c7051..395ce18c 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonObjectKeysTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT json_object_keys(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT json_object_keys(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSON_OBJECT_KEYS(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSON_OBJECT_KEYS(e.jsonObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php index f53cddd9..2a665c30 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php @@ -19,30 +19,30 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts all array items' => "SELECT json_query(c0_.object1, '$.items[*]') AS sclr_0 FROM ContainsJsons c0_", - 'extracts nested object' => "SELECT json_query(c0_.object1, '$.address') AS sclr_0 FROM ContainsJsons c0_", - 'extracts all authors from books array' => "SELECT json_query(c0_.object1, '$.store.book[*].author') AS sclr_0 FROM ContainsJsons c0_", - 'extracts specific range of books' => "SELECT json_query(c0_.object1, '$.store.book[0 to 2]') AS sclr_0 FROM ContainsJsons c0_", - 'filters books by price condition' => "SELECT json_query(c0_.object1, '$.store.book[*]?(@.price > 10)') AS sclr_0 FROM ContainsJsons c0_", + 'extracts all array items' => "SELECT json_query(c0_.jsonObject1, '$.items[*]') AS sclr_0 FROM ContainsJsons c0_", + 'extracts nested object' => "SELECT json_query(c0_.jsonObject1, '$.address') AS sclr_0 FROM ContainsJsons c0_", + 'extracts all authors from books array' => "SELECT json_query(c0_.jsonObject1, '$.store.book[*].author') AS sclr_0 FROM ContainsJsons c0_", + 'extracts specific range of books' => "SELECT json_query(c0_.jsonObject1, '$.store.book[0 to 2]') AS sclr_0 FROM ContainsJsons c0_", + 'filters books by price condition' => "SELECT json_query(c0_.jsonObject1, '$.store.book[*]?(@.price > 10)') AS sclr_0 FROM ContainsJsons c0_", // Additional scenarios based on PostgreSQL's json_query capabilities - 'extracts last array element' => "SELECT json_query(c0_.object1, '$.items[last]') AS sclr_0 FROM ContainsJsons c0_", - 'extracts specific keys from objects in array' => "SELECT json_query(c0_.object1, '$.users[*]?(@.active == true).name') AS sclr_0 FROM ContainsJsons c0_", - 'extracts nested array with multiple conditions' => "SELECT json_query(c0_.object1, '$.store.book[*]?(@.price < 30 && @.category == \"fiction\")') AS sclr_0 FROM ContainsJsons c0_", + 'extracts last array element' => "SELECT json_query(c0_.jsonObject1, '$.items[last]') AS sclr_0 FROM ContainsJsons c0_", + 'extracts specific keys from objects in array' => "SELECT json_query(c0_.jsonObject1, '$.users[*]?(@.active == true).name') AS sclr_0 FROM ContainsJsons c0_", + 'extracts nested array with multiple conditions' => "SELECT json_query(c0_.jsonObject1, '$.store.book[*]?(@.price < 30 && @.category == \"fiction\")') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts all array items' => \sprintf("SELECT JSON_QUERY(e.object1, '$.items[*]') FROM %s e", ContainsJsons::class), - 'extracts nested object' => \sprintf("SELECT JSON_QUERY(e.object1, '$.address') FROM %s e", ContainsJsons::class), - 'extracts all authors from books array' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*].author') FROM %s e", ContainsJsons::class), - 'extracts specific range of books' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[0 to 2]') FROM %s e", ContainsJsons::class), - 'filters books by price condition' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*]?(@.price > 10)') FROM %s e", ContainsJsons::class), + 'extracts all array items' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.items[*]') FROM %s e", ContainsJsons::class), + 'extracts nested object' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.address') FROM %s e", ContainsJsons::class), + 'extracts all authors from books array' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.store.book[*].author') FROM %s e", ContainsJsons::class), + 'extracts specific range of books' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.store.book[0 to 2]') FROM %s e", ContainsJsons::class), + 'filters books by price condition' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.store.book[*]?(@.price > 10)') FROM %s e", ContainsJsons::class), // Additional scenarios based on PostgreSQL's json_query capabilities - 'extracts last array element' => \sprintf("SELECT JSON_QUERY(e.object1, '$.items[last]') FROM %s e", ContainsJsons::class), - 'extracts specific keys from objects in array' => \sprintf("SELECT JSON_QUERY(e.object1, '$.users[*]?(@.active == true).name') FROM %s e", ContainsJsons::class), - 'extracts nested array with multiple conditions' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*]?(@.price < 30 && @.category == \"fiction\")') FROM %s e", ContainsJsons::class), + 'extracts last array element' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.items[last]') FROM %s e", ContainsJsons::class), + 'extracts specific keys from objects in array' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.users[*]?(@.active == true).name') FROM %s e", ContainsJsons::class), + 'extracts nested array with multiple conditions' => \sprintf("SELECT JSON_QUERY(e.jsonObject1, '$.store.book[*]?(@.price < 30 && @.category == \"fiction\")') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php index 99ec585a..8542c3ad 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonScalarTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT json_scalar(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT json_scalar(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSON_SCALAR(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSON_SCALAR(e.jsonObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php index 7c5303b0..c70bf454 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonSerializeTest.php @@ -19,8 +19,8 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'serializes json field' => 'SELECT json_serialize(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', - 'serializes json field with expression' => 'SELECT json_serialize(UPPER(c0_.object1)) AS sclr_0 FROM ContainsJsons c0_', + 'serializes json field' => 'SELECT json_serialize(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', + 'serializes json field with expression' => 'SELECT json_serialize(UPPER(c0_.jsonObject1)) AS sclr_0 FROM ContainsJsons c0_', 'serializes json literal' => "SELECT json_serialize('{\"key\": \"value\"}') AS sclr_0 FROM ContainsJsons c0_", ]; } @@ -28,8 +28,8 @@ protected function getExpectedSqlStatements(): array protected function getDqlStatements(): array { return [ - 'serializes json field' => \sprintf('SELECT JSON_SERIALIZE(e.object1) FROM %s e', ContainsJsons::class), - 'serializes json field with expression' => \sprintf('SELECT JSON_SERIALIZE(UPPER(e.object1)) FROM %s e', ContainsJsons::class), + 'serializes json field' => \sprintf('SELECT JSON_SERIALIZE(e.jsonObject1) FROM %s e', ContainsJsons::class), + 'serializes json field with expression' => \sprintf('SELECT JSON_SERIALIZE(UPPER(e.jsonObject1)) FROM %s e', ContainsJsons::class), 'serializes json literal' => \sprintf("SELECT JSON_SERIALIZE('{\"key\": \"value\"}') FROM %s e", ContainsJsons::class), ]; } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php index 5f77b722..bb1eeabe 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonStripNullsTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT json_strip_nulls(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT json_strip_nulls(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSON_STRIP_NULLS(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSON_STRIP_NULLS(e.jsonObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php index d8f19509..c47f04f4 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php @@ -19,7 +19,7 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'determines type of json document' => 'SELECT json_typeof(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'determines type of json document' => 'SELECT json_typeof(c0_.jsonObject1) AS sclr_0 FROM ContainsJsons c0_', 'determines type of literal value' => "SELECT json_typeof('42') AS sclr_0 FROM ContainsJsons c0_", ]; } @@ -27,7 +27,7 @@ protected function getExpectedSqlStatements(): array protected function getDqlStatements(): array { return [ - 'determines type of json document' => \sprintf('SELECT JSON_TYPEOF(e.object1) FROM %s e', ContainsJsons::class), + 'determines type of json document' => \sprintf('SELECT JSON_TYPEOF(e.jsonObject1) FROM %s e', ContainsJsons::class), 'determines type of literal value' => \sprintf("SELECT JSON_TYPEOF('42') FROM %s e", ContainsJsons::class), ]; } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php index 02749f81..b9158a8f 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonValueTest.php @@ -19,18 +19,18 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts simple property value' => "SELECT json_value(c0_.object1, '$.name') AS sclr_0 FROM ContainsJsons c0_", - 'extracts nested property value' => "SELECT json_value(c0_.object1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array element value' => "SELECT json_value(c0_.object1, '$.items[0]') AS sclr_0 FROM ContainsJsons c0_", + 'extracts simple property value' => "SELECT json_value(c0_.jsonObject1, '$.name') AS sclr_0 FROM ContainsJsons c0_", + 'extracts nested property value' => "SELECT json_value(c0_.jsonObject1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array element value' => "SELECT json_value(c0_.jsonObject1, '$.items[0]') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts simple property value' => \sprintf("SELECT JSON_VALUE(e.object1, '$.name') FROM %s e", ContainsJsons::class), - 'extracts nested property value' => \sprintf("SELECT JSON_VALUE(e.object1, '$.address.city') FROM %s e", ContainsJsons::class), - 'extracts array element value' => \sprintf("SELECT JSON_VALUE(e.object1, '$.items[0]') FROM %s e", ContainsJsons::class), + 'extracts simple property value' => \sprintf("SELECT JSON_VALUE(e.jsonObject1, '$.name') FROM %s e", ContainsJsons::class), + 'extracts nested property value' => \sprintf("SELECT JSON_VALUE(e.jsonObject1, '$.address.city') FROM %s e", ContainsJsons::class), + 'extracts array element value' => \sprintf("SELECT JSON_VALUE(e.jsonObject1, '$.items[0]') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php index 198d9b67..14563b58 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'expands jsonb array into separate rows' => 'SELECT jsonb_array_elements(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'expands jsonb array into separate rows' => 'SELECT jsonb_array_elements(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - 'expands jsonb array into separate rows' => \sprintf('SELECT JSONB_ARRAY_ELEMENTS(e.object1) FROM %s e', ContainsJsons::class), + 'expands jsonb array into separate rows' => \sprintf('SELECT JSONB_ARRAY_ELEMENTS(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php index f3a63ced..d9ea56fa 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTextTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT jsonb_array_elements_text(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT jsonb_array_elements_text(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSONB_ARRAY_ELEMENTS_TEXT(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSONB_ARRAY_ELEMENTS_TEXT(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php index dee5b0c3..d560d1c9 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayLengthTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT jsonb_array_length(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT jsonb_array_length(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSONB_ARRAY_LENGTH(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSONB_ARRAY_LENGTH(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php index 2bfbb369..3e044f27 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php @@ -27,24 +27,24 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'builds JSONB object with field value' => "SELECT jsonb_build_object('key1', c0_.object1) AS sclr_0 FROM ContainsJsons c0_", + 'builds JSONB object with field value' => "SELECT jsonb_build_object('key1', c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_", 'builds JSONB object with function result and literal' => "SELECT jsonb_build_object('key1', UPPER('value1'), 'key2', 'value2') AS sclr_0 FROM ContainsJsons c0_", - 'builds JSONB object with multiple field values' => "SELECT jsonb_build_object('key1', c0_.object1, 'key2', c0_.object2) AS sclr_0 FROM ContainsJsons c0_", + 'builds JSONB object with multiple field values' => "SELECT jsonb_build_object('key1', c0_.jsonbObject1, 'key2', c0_.jsonbObject2) AS sclr_0 FROM ContainsJsons c0_", 'builds JSONB object with many key-value pairs' => "SELECT jsonb_build_object('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') AS sclr_0 FROM ContainsJsons c0_", 'builds JSONB object with numeric and boolean values' => "SELECT jsonb_build_object('numeric_key', '123', 'boolean_key', 'true') AS sclr_0 FROM ContainsJsons c0_", - 'builds JSONB object with mixed field and literal values' => "SELECT jsonb_build_object('field_key', c0_.object1, 'literal_key', 'literal_value') AS sclr_0 FROM ContainsJsons c0_", + 'builds JSONB object with mixed field and literal values' => "SELECT jsonb_build_object('field_key', c0_.jsonbObject1, 'literal_key', 'literal_value') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'builds JSONB object with field value' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1) FROM %s e", ContainsJsons::class), + 'builds JSONB object with field value' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.jsonbObject1) FROM %s e", ContainsJsons::class), 'builds JSONB object with function result and literal' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', UPPER('value1'), 'key2', 'value2') FROM %s e", ContainsJsons::class), - 'builds JSONB object with multiple field values' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1, 'key2', e.object2) FROM %s e", ContainsJsons::class), + 'builds JSONB object with multiple field values' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.jsonbObject1, 'key2', e.jsonbObject2) FROM %s e", ContainsJsons::class), 'builds JSONB object with many key-value pairs' => \sprintf("SELECT JSONB_BUILD_OBJECT('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') FROM %s e", ContainsJsons::class), 'builds JSONB object with numeric and boolean values' => \sprintf("SELECT JSONB_BUILD_OBJECT('numeric_key', '123', 'boolean_key', 'true') FROM %s e", ContainsJsons::class), - 'builds JSONB object with mixed field and literal values' => \sprintf("SELECT JSONB_BUILD_OBJECT('field_key', e.object1, 'literal_key', 'literal_value') FROM %s e", ContainsJsons::class), + 'builds JSONB object with mixed field and literal values' => \sprintf("SELECT JSONB_BUILD_OBJECT('field_key', e.jsonbObject1, 'literal_key', 'literal_value') FROM %s e", ContainsJsons::class), ]; } @@ -54,7 +54,7 @@ public function throws_exception_for_odd_number_of_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_build_object() requires an even number of arguments'); - $dql = \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1, 'key2') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.jsonbObject1, 'key2') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php index 3450c7ca..7f78e647 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'expands top-level jsonb object into key-value pairs' => 'SELECT jsonb_each(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'expands top-level jsonb object into key-value pairs' => 'SELECT jsonb_each(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - 'expands top-level jsonb object into key-value pairs' => \sprintf('SELECT JSONB_EACH(e.object1) FROM %s e', ContainsJsons::class), + 'expands top-level jsonb object into key-value pairs' => \sprintf('SELECT JSONB_EACH(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php index 28b7aebf..dfc8b408 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTextTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT jsonb_each_text(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT jsonb_each_text(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSONB_EACH_TEXT(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSONB_EACH_TEXT(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php index 6cbbca8f..e0f21ba0 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if top-level key exists' => "SELECT jsonb_exists(c0_.object1, 'country') AS sclr_0 FROM ContainsJsons c0_", + 'checks if top-level key exists' => "SELECT jsonb_exists(c0_.jsonbObject1, 'country') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if top-level key exists' => \sprintf("SELECT JSONB_EXISTS(e.object1, 'country') FROM %s e", ContainsJsons::class), + 'checks if top-level key exists' => \sprintf("SELECT JSONB_EXISTS(e.jsonbObject1, 'country') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php index eccd47fb..d88dd82f 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbInsertTest.php @@ -22,16 +22,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'basic usage' => "SELECT jsonb_insert(c0_.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", - 'with create-if-missing parameter' => "SELECT jsonb_insert(c0_.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'basic usage' => "SELECT jsonb_insert(c0_.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", + 'with create-if-missing parameter' => "SELECT jsonb_insert(c0_.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'true') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'basic usage' => \sprintf("SELECT JSONB_INSERT(e.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), - 'with create-if-missing parameter' => \sprintf("SELECT JSONB_INSERT(e.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'true') FROM %s e", ContainsJsons::class), + 'basic usage' => \sprintf("SELECT JSONB_INSERT(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), + 'with create-if-missing parameter' => \sprintf("SELECT JSONB_INSERT(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'true') FROM %s e", ContainsJsons::class), ]; } @@ -41,7 +41,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_insert. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_INSERT(e.object1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_INSERT(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -51,7 +51,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_insert() requires at least 3 arguments'); - $dql = \sprintf('SELECT JSONB_INSERT(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_INSERT(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -61,7 +61,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_insert() requires between 3 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_INSERT(e.object1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_INSERT(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php index 6cf9fae3..8412b596 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT jsonb_object_keys(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT jsonb_object_keys(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSONB_OBJECT_KEYS(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSONB_OBJECT_KEYS(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php index 4439ddaa..62f67be5 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathExistsTest.php @@ -28,20 +28,20 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if path exists with condition' => "SELECT jsonb_path_exists(c0_.object1, '$.a[*] ? (@ > 2)') AS sclr_0 FROM ContainsJsons c0_", - 'checks if nested path exists' => "SELECT jsonb_path_exists(c0_.object1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_", - 'checks if nested path exists with vars argument' => "SELECT jsonb_path_exists(c0_.object1, '$.address.city', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", - 'checks if nested path exists with vars and silent arguments' => "SELECT jsonb_path_exists(c0_.object1, '$.address.city', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'checks if path exists with condition' => "SELECT jsonb_path_exists(c0_.jsonbObject1, '$.a[*] ? (@ > 2)') AS sclr_0 FROM ContainsJsons c0_", + 'checks if nested path exists' => "SELECT jsonb_path_exists(c0_.jsonbObject1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_", + 'checks if nested path exists with vars argument' => "SELECT jsonb_path_exists(c0_.jsonbObject1, '$.address.city', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", + 'checks if nested path exists with vars and silent arguments' => "SELECT jsonb_path_exists(c0_.jsonbObject1, '$.address.city', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if path exists with condition' => \sprintf("SELECT JSONB_PATH_EXISTS(e.object1, '$.a[*] ? (@ > 2)') FROM %s e", ContainsJsons::class), - 'checks if nested path exists' => \sprintf("SELECT JSONB_PATH_EXISTS(e.object1, '$.address.city') FROM %s e", ContainsJsons::class), - 'checks if nested path exists with vars argument' => \sprintf("SELECT JSONB_PATH_EXISTS(e.object1, '$.address.city', '{\"strict\": false}') FROM %s e", ContainsJsons::class), - 'checks if nested path exists with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_EXISTS(e.object1, '$.address.city', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), + 'checks if path exists with condition' => \sprintf("SELECT JSONB_PATH_EXISTS(e.jsonbObject1, '$.a[*] ? (@ > 2)') FROM %s e", ContainsJsons::class), + 'checks if nested path exists' => \sprintf("SELECT JSONB_PATH_EXISTS(e.jsonbObject1, '$.address.city') FROM %s e", ContainsJsons::class), + 'checks if nested path exists with vars argument' => \sprintf("SELECT JSONB_PATH_EXISTS(e.jsonbObject1, '$.address.city', '{\"strict\": false}') FROM %s e", ContainsJsons::class), + 'checks if nested path exists with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_EXISTS(e.jsonbObject1, '$.address.city', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), ]; } @@ -51,7 +51,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_path_exists. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_PATH_EXISTS(e.object1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_EXISTS(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -61,7 +61,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_exists() requires at least 2 arguments'); - $dql = \sprintf('SELECT JSONB_PATH_EXISTS(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_PATH_EXISTS(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -71,7 +71,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_exists() requires between 2 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_PATH_EXISTS(e.object1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_EXISTS(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php index 5c3e15f9..1201f256 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathMatchTest.php @@ -28,20 +28,20 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if path matches with exists condition' => "SELECT jsonb_path_match(c0_.object1, 'exists($.a[*] ? (@ >= 2 && @ <= 4))') AS sclr_0 FROM ContainsJsons c0_", - 'checks if path matches with simple condition' => "SELECT jsonb_path_match(c0_.object1, '$.a[*] > 2') AS sclr_0 FROM ContainsJsons c0_", - 'checks if path matches with simple condition and vars argument' => "SELECT jsonb_path_match(c0_.object1, '$.a[*] > 2', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", - 'checks if path matches with simple condition and vars and silent arguments' => "SELECT jsonb_path_match(c0_.object1, '$.a[*] > 2', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'checks if path matches with exists condition' => "SELECT jsonb_path_match(c0_.jsonbObject1, 'exists($.a[*] ? (@ >= 2 && @ <= 4))') AS sclr_0 FROM ContainsJsons c0_", + 'checks if path matches with simple condition' => "SELECT jsonb_path_match(c0_.jsonbObject1, '$.a[*] > 2') AS sclr_0 FROM ContainsJsons c0_", + 'checks if path matches with simple condition and vars argument' => "SELECT jsonb_path_match(c0_.jsonbObject1, '$.a[*] > 2', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", + 'checks if path matches with simple condition and vars and silent arguments' => "SELECT jsonb_path_match(c0_.jsonbObject1, '$.a[*] > 2', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if path matches with exists condition' => \sprintf("SELECT JSONB_PATH_MATCH(e.object1, 'exists($.a[*] ? (@ >= 2 && @ <= 4))') FROM %s e", ContainsJsons::class), - 'checks if path matches with simple condition' => \sprintf("SELECT JSONB_PATH_MATCH(e.object1, '$.a[*] > 2') FROM %s e", ContainsJsons::class), - 'checks if path matches with simple condition and vars argument' => \sprintf("SELECT JSONB_PATH_MATCH(e.object1, '$.a[*] > 2', '{\"strict\": false}') FROM %s e", ContainsJsons::class), - 'checks if path matches with simple condition and vars and silent arguments' => \sprintf("SELECT JSONB_PATH_MATCH(e.object1, '$.a[*] > 2', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), + 'checks if path matches with exists condition' => \sprintf("SELECT JSONB_PATH_MATCH(e.jsonbObject1, 'exists($.a[*] ? (@ >= 2 && @ <= 4))') FROM %s e", ContainsJsons::class), + 'checks if path matches with simple condition' => \sprintf("SELECT JSONB_PATH_MATCH(e.jsonbObject1, '$.a[*] > 2') FROM %s e", ContainsJsons::class), + 'checks if path matches with simple condition and vars argument' => \sprintf("SELECT JSONB_PATH_MATCH(e.jsonbObject1, '$.a[*] > 2', '{\"strict\": false}') FROM %s e", ContainsJsons::class), + 'checks if path matches with simple condition and vars and silent arguments' => \sprintf("SELECT JSONB_PATH_MATCH(e.jsonbObject1, '$.a[*] > 2', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), ]; } @@ -51,7 +51,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_path_match. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_PATH_MATCH(e.object1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_MATCH(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -61,7 +61,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_match() requires at least 2 arguments'); - $dql = \sprintf('SELECT JSONB_PATH_MATCH(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_PATH_MATCH(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -71,7 +71,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_match() requires between 2 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_PATH_MATCH(e.object1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_MATCH(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php index 1b75ae97..711079b2 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryArrayTest.php @@ -28,20 +28,20 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts array with condition' => "SELECT jsonb_path_query_array(c0_.object1, '$.a[*] ? (@ > 2)') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array of items' => "SELECT jsonb_path_query_array(c0_.object1, '$.items[*].id') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array of items with vars argument' => "SELECT jsonb_path_query_array(c0_.object1, '$.items[*].id', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts array of items with vars and silent arguments' => "SELECT jsonb_path_query_array(c0_.object1, '$.items[*].id', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array with condition' => "SELECT jsonb_path_query_array(c0_.jsonbObject1, '$.a[*] ? (@ > 2)') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array of items' => "SELECT jsonb_path_query_array(c0_.jsonbObject1, '$.items[*].id') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array of items with vars argument' => "SELECT jsonb_path_query_array(c0_.jsonbObject1, '$.items[*].id', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts array of items with vars and silent arguments' => "SELECT jsonb_path_query_array(c0_.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts array with condition' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.object1, '$.a[*] ? (@ > 2)') FROM %s e", ContainsJsons::class), - 'extracts array of items' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.object1, '$.items[*].id') FROM %s e", ContainsJsons::class), - 'extracts array of items with vars argument' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.object1, '$.items[*].id', '{\"strict\": false}') FROM %s e", ContainsJsons::class), - 'extracts array of items with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.object1, '$.items[*].id', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), + 'extracts array with condition' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1, '$.a[*] ? (@ > 2)') FROM %s e", ContainsJsons::class), + 'extracts array of items' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1, '$.items[*].id') FROM %s e", ContainsJsons::class), + 'extracts array of items with vars argument' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}') FROM %s e", ContainsJsons::class), + 'extracts array of items with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), ]; } @@ -51,7 +51,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_path_query_array. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.object1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -61,7 +61,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_query_array() requires at least 2 arguments'); - $dql = \sprintf('SELECT JSONB_PATH_QUERY_ARRAY(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -71,7 +71,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_query_array() requires between 2 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.object1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_QUERY_ARRAY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php index e4311d7c..1cb6d126 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryFirstTest.php @@ -28,20 +28,20 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts first item with condition' => "SELECT jsonb_path_query_first(c0_.object1, '$.items[*] ? (@.price > 100)') AS sclr_0 FROM ContainsJsons c0_", - 'extracts first item from path' => "SELECT jsonb_path_query_first(c0_.object1, '$.items[*].id') AS sclr_0 FROM ContainsJsons c0_", - 'with vars argument' => "SELECT jsonb_path_query_first(c0_.object1, '$.items[*].id', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", - 'with vars and silent arguments' => "SELECT jsonb_path_query_first(c0_.object1, '$.items[*].id', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'extracts first item with condition' => "SELECT jsonb_path_query_first(c0_.jsonbObject1, '$.items[*] ? (@.price > 100)') AS sclr_0 FROM ContainsJsons c0_", + 'extracts first item from path' => "SELECT jsonb_path_query_first(c0_.jsonbObject1, '$.items[*].id') AS sclr_0 FROM ContainsJsons c0_", + 'with vars argument' => "SELECT jsonb_path_query_first(c0_.jsonbObject1, '$.items[*].id', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", + 'with vars and silent arguments' => "SELECT jsonb_path_query_first(c0_.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts first item with condition' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.object1, '$.items[*] ? (@.price > 100)') FROM %s e", ContainsJsons::class), - 'extracts first item from path' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.object1, '$.items[*].id') FROM %s e", ContainsJsons::class), - 'with vars argument' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.object1, '$.items[*].id', '{\"strict\": false}') FROM %s e", ContainsJsons::class), - 'with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.object1, '$.items[*].id', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), + 'extracts first item with condition' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1, '$.items[*] ? (@.price > 100)') FROM %s e", ContainsJsons::class), + 'extracts first item from path' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1, '$.items[*].id') FROM %s e", ContainsJsons::class), + 'with vars argument' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}') FROM %s e", ContainsJsons::class), + 'with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), ]; } @@ -51,7 +51,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_path_query_first. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.object1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -61,7 +61,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_query_first() requires at least 2 arguments'); - $dql = \sprintf('SELECT JSONB_PATH_QUERY_FIRST(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -71,7 +71,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_query_first() requires between 2 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.object1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_QUERY_FIRST(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php index dca52dc1..c0046d37 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPathQueryTest.php @@ -28,20 +28,20 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'extracts items with condition' => "SELECT jsonb_path_query(c0_.object1, '$.items[*] ? (@.price > 100)') AS sclr_0 FROM ContainsJsons c0_", - 'extracts items from path' => "SELECT jsonb_path_query(c0_.object1, '$.items[*].id') AS sclr_0 FROM ContainsJsons c0_", - 'extracts items from path with vars argument' => "SELECT jsonb_path_query(c0_.object1, '$.items[*].id', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", - 'extracts items from path with vars and silent arguments' => "SELECT jsonb_path_query(c0_.object1, '$.items[*].id', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'extracts items with condition' => "SELECT jsonb_path_query(c0_.jsonbObject1, '$.items[*] ? (@.price > 100)') AS sclr_0 FROM ContainsJsons c0_", + 'extracts items from path' => "SELECT jsonb_path_query(c0_.jsonbObject1, '$.items[*].id') AS sclr_0 FROM ContainsJsons c0_", + 'extracts items from path with vars argument' => "SELECT jsonb_path_query(c0_.jsonbObject1, '$.items[*].id', '{\"strict\": false}') AS sclr_0 FROM ContainsJsons c0_", + 'extracts items from path with vars and silent arguments' => "SELECT jsonb_path_query(c0_.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'extracts items with condition' => \sprintf("SELECT JSONB_PATH_QUERY(e.object1, '$.items[*] ? (@.price > 100)') FROM %s e", ContainsJsons::class), - 'extracts items from path' => \sprintf("SELECT JSONB_PATH_QUERY(e.object1, '$.items[*].id') FROM %s e", ContainsJsons::class), - 'extracts items from path with vars argument' => \sprintf("SELECT JSONB_PATH_QUERY(e.object1, '$.items[*].id', '{\"strict\": false}') FROM %s e", ContainsJsons::class), - 'extracts items from path with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_QUERY(e.object1, '$.items[*].id', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), + 'extracts items with condition' => \sprintf("SELECT JSONB_PATH_QUERY(e.jsonbObject1, '$.items[*] ? (@.price > 100)') FROM %s e", ContainsJsons::class), + 'extracts items from path' => \sprintf("SELECT JSONB_PATH_QUERY(e.jsonbObject1, '$.items[*].id') FROM %s e", ContainsJsons::class), + 'extracts items from path with vars argument' => \sprintf("SELECT JSONB_PATH_QUERY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}') FROM %s e", ContainsJsons::class), + 'extracts items from path with vars and silent arguments' => \sprintf("SELECT JSONB_PATH_QUERY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true') FROM %s e", ContainsJsons::class), ]; } @@ -51,7 +51,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_path_query. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_PATH_QUERY(e.object1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_QUERY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -61,7 +61,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_query() requires at least 2 arguments'); - $dql = \sprintf('SELECT JSONB_PATH_QUERY(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_PATH_QUERY(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -71,7 +71,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_path_query() requires between 2 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_PATH_QUERY(e.object1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_PATH_QUERY(e.jsonbObject1, '$.items[*].id', '{\"strict\": false}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php index 9efe58f9..d9414984 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php @@ -19,7 +19,7 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'formats jsonb document with proper indentation' => 'SELECT jsonb_pretty(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'formats jsonb document with proper indentation' => 'SELECT jsonb_pretty(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', 'formats literal jsonb value' => "SELECT jsonb_pretty('{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", ]; } @@ -27,7 +27,7 @@ protected function getExpectedSqlStatements(): array protected function getDqlStatements(): array { return [ - 'formats jsonb document with proper indentation' => \sprintf('SELECT JSONB_PRETTY(e.object1) FROM %s e', ContainsJsons::class), + 'formats jsonb document with proper indentation' => \sprintf('SELECT JSONB_PRETTY(e.jsonbObject1) FROM %s e', ContainsJsons::class), 'formats literal jsonb value' => \sprintf("SELECT JSONB_PRETTY('{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), ]; } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php index b7eb3630..3d9cc24f 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetLaxTest.php @@ -19,28 +19,28 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'modifies top-level property' => "SELECT jsonb_set_lax(c0_.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", - 'sets property to null' => "SELECT jsonb_set_lax(c0_.object1, '{country}', null) AS sclr_0 FROM ContainsJsons c0_", - 'modifies nested property' => "SELECT jsonb_set_lax(c0_.object1, '{address,city}', '\"Sofia\"') AS sclr_0 FROM ContainsJsons c0_", - 'modifies array element at index' => "SELECT jsonb_set_lax(c0_.object1, '{phones,0}', '\"+1234567890\"') AS sclr_0 FROM ContainsJsons c0_", - 'uses parameters for path and value' => 'SELECT jsonb_set_lax(c0_.object1, ?, ?) AS sclr_0 FROM ContainsJsons c0_', - 'modifies deeply nested array element' => "SELECT jsonb_set_lax(c0_.object1, '{user,contacts,0,phone}', '\"+1234567890\"') AS sclr_0 FROM ContainsJsons c0_", - 'sets boolean property' => "SELECT jsonb_set_lax(c0_.object1, '{is_active}', 'true') AS sclr_0 FROM ContainsJsons c0_", - 'sets numeric property' => "SELECT jsonb_set_lax(c0_.object1, '{count}', '42') AS sclr_0 FROM ContainsJsons c0_", + 'modifies top-level property' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", + 'sets property to null' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{country}', null) AS sclr_0 FROM ContainsJsons c0_", + 'modifies nested property' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{address,city}', '\"Sofia\"') AS sclr_0 FROM ContainsJsons c0_", + 'modifies array element at index' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{phones,0}', '\"+1234567890\"') AS sclr_0 FROM ContainsJsons c0_", + 'uses parameters for path and value' => 'SELECT jsonb_set_lax(c0_.jsonbObject1, ?, ?) AS sclr_0 FROM ContainsJsons c0_', + 'modifies deeply nested array element' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{user,contacts,0,phone}', '\"+1234567890\"') AS sclr_0 FROM ContainsJsons c0_", + 'sets boolean property' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{is_active}', 'true') AS sclr_0 FROM ContainsJsons c0_", + 'sets numeric property' => "SELECT jsonb_set_lax(c0_.jsonbObject1, '{count}', '42') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'modifies top-level property' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), - 'sets property to null' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{country}', null) FROM %s e", ContainsJsons::class), - 'modifies nested property' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{address,city}', '\"Sofia\"') FROM %s e", ContainsJsons::class), - 'modifies array element at index' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{phones,0}', '\"+1234567890\"') FROM %s e", ContainsJsons::class), - 'uses parameters for path and value' => \sprintf('SELECT JSONB_SET_LAX(e.object1, :path, :value) FROM %s e', ContainsJsons::class), - 'modifies deeply nested array element' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{user,contacts,0,phone}', '\"+1234567890\"') FROM %s e", ContainsJsons::class), - 'sets boolean property' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{is_active}', 'true') FROM %s e", ContainsJsons::class), - 'sets numeric property' => \sprintf("SELECT JSONB_SET_LAX(e.object1, '{count}', '42') FROM %s e", ContainsJsons::class), + 'modifies top-level property' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), + 'sets property to null' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{country}', null) FROM %s e", ContainsJsons::class), + 'modifies nested property' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{address,city}', '\"Sofia\"') FROM %s e", ContainsJsons::class), + 'modifies array element at index' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{phones,0}', '\"+1234567890\"') FROM %s e", ContainsJsons::class), + 'uses parameters for path and value' => \sprintf('SELECT JSONB_SET_LAX(e.jsonbObject1, :path, :value) FROM %s e', ContainsJsons::class), + 'modifies deeply nested array element' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{user,contacts,0,phone}', '\"+1234567890\"') FROM %s e", ContainsJsons::class), + 'sets boolean property' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{is_active}', 'true') FROM %s e", ContainsJsons::class), + 'sets numeric property' => \sprintf("SELECT JSONB_SET_LAX(e.jsonbObject1, '{count}', '42') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php index 65ba36c2..bfb8067a 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbSetTest.php @@ -28,16 +28,16 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'basic usage' => "SELECT jsonb_set(c0_.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", - 'with create-if-missing parameter' => "SELECT jsonb_set(c0_.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'false') AS sclr_0 FROM ContainsJsons c0_", + 'basic usage' => "SELECT jsonb_set(c0_.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_", + 'with create-if-missing parameter' => "SELECT jsonb_set(c0_.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'false') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'basic usage' => \sprintf("SELECT JSONB_SET(e.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), - 'with create-if-missing parameter' => \sprintf("SELECT JSONB_SET(e.object1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'false') FROM %s e", ContainsJsons::class), + 'basic usage' => \sprintf("SELECT JSONB_SET(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class), + 'with create-if-missing parameter' => \sprintf("SELECT JSONB_SET(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"BGR\"}', 'false') FROM %s e", ContainsJsons::class), ]; } @@ -47,7 +47,7 @@ public function throws_exception_for_invalid_boolean(): void $this->expectException(InvalidBooleanException::class); $this->expectExceptionMessage('Invalid boolean value "invalid" provided for jsonb_set. Must be "true" or "false".'); - $dql = \sprintf("SELECT JSONB_SET(e.object1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'invalid') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_SET(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'invalid') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -57,7 +57,7 @@ public function throws_exception_for_too_few_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_set() requires at least 3 arguments'); - $dql = \sprintf('SELECT JSONB_SET(e.object1) FROM %s e', ContainsJsons::class); + $dql = \sprintf('SELECT JSONB_SET(e.jsonbObject1) FROM %s e', ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } @@ -67,7 +67,7 @@ public function throws_exception_for_too_many_arguments(): void $this->expectException(InvalidArgumentForVariadicFunctionException::class); $this->expectExceptionMessage('jsonb_set() requires between 3 and 4 arguments'); - $dql = \sprintf("SELECT JSONB_SET(e.object1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); + $dql = \sprintf("SELECT JSONB_SET(e.jsonbObject1, '{country}', '{\"iso_3166_a3_code\":\"bgr\"}', 'true', 'extra_arg') FROM %s e", ContainsJsons::class); $this->buildEntityManager()->createQuery($dql)->getSQL(); } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php index 1039c27e..03ba2aaf 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbStripNullsTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'SELECT jsonb_strip_nulls(c0_.object1) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT jsonb_strip_nulls(c0_.jsonbObject1) AS sclr_0 FROM ContainsJsons c0_', ]; } protected function getDqlStatements(): array { return [ - \sprintf('SELECT JSONB_STRIP_NULLS(e.object1) FROM %s e', ContainsJsons::class), + \sprintf('SELECT JSONB_STRIP_NULLS(e.jsonbObject1) FROM %s e', ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php index 7649d44f..9b6b7a07 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ReturnsValueForJsonValueTest.php @@ -19,14 +19,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if JSON path expression returns value' => "SELECT (c0_.object1 @?? '$.test[*] ?? (@ > 2)') AS sclr_0 FROM ContainsJsons c0_", + 'checks if JSON path expression returns value' => "SELECT (c0_.jsonObject1 @?? '$.test[*] ?? (@ > 2)') AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if JSON path expression returns value' => \sprintf("SELECT RETURNS_VALUE_FOR_JSON_VALUE(e.object1, '$.test[*] ?? (@ > 2)') FROM %s e", ContainsJsons::class), + 'checks if JSON path expression returns value' => \sprintf("SELECT RETURNS_VALUE_FOR_JSON_VALUE(e.jsonObject1, '$.test[*] ?? (@ > 2)') FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php index acf08016..85c48471 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/RowTest.php @@ -30,7 +30,7 @@ protected function getExpectedSqlStatements(): array return [ 'SELECT ROW(c0_.text1, c0_.text2) AS sclr_0 FROM ContainsTexts c0_', 'SELECT ROW(c0_.date1, c0_.date2) AS sclr_0 FROM ContainsDates c0_', - 'SELECT ROW(c0_.object1, c0_.object2) AS sclr_0 FROM ContainsJsons c0_', + 'SELECT ROW(c0_.jsonbObject1, c0_.jsonbObject2) AS sclr_0 FROM ContainsJsons c0_', "SELECT c0_.id AS id_0 FROM ContainsTexts c0_ WHERE ROW(c0_.text1, c0_.text2) > ROW('test', 'test')", "SELECT c0_.id AS id_0 FROM ContainsIntegers c0_ WHERE ROW(c0_.integer1, c0_.integer2, 'This is a test') > ROW(1, 2, 'This')", ]; @@ -41,7 +41,7 @@ protected function getDqlStatements(): array return [ \sprintf('SELECT ROW(e.text1, e.text2) FROM %s e', ContainsTexts::class), \sprintf('SELECT ROW(e.date1, e.date2) FROM %s e', ContainsDates::class), - \sprintf('SELECT ROW(e.object1, e.object2) FROM %s e', ContainsJsons::class), + \sprintf('SELECT ROW(e.jsonbObject1, e.jsonbObject2) FROM %s e', ContainsJsons::class), \sprintf("SELECT e.id FROM %s e WHERE ROW(e.text1, e.text2) > ROW('test', 'test')", ContainsTexts::class), \sprintf("SELECT e.id FROM %s e WHERE ROW(e.integer1, e.integer2, 'This is a test') > ROW(1, 2, 'This')", ContainsIntegers::class), ]; diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php index 430fa81a..73f892a5 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TestCase.php @@ -109,7 +109,7 @@ public function dql_is_transformed_to_valid_sql(): void protected function assertSqlFromDql(string $expectedSql, string $dql, string $message = ''): void { $query = $this->buildEntityManager()->createQuery($dql); - self::assertEquals($expectedSql, $query->getSQL(), $message); + $this->assertEquals($expectedSql, $query->getSQL(), $message); } protected function buildEntityManager(): EntityManager diff --git a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php index daf7e0a6..282a95bb 100644 --- a/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php +++ b/tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/TheRightExistsOnTheLeftTest.php @@ -21,14 +21,14 @@ protected function getStringFunctions(): array protected function getExpectedSqlStatements(): array { return [ - 'checks if right operand keys exist in left JSON object' => "SELECT (c0_.object1 ?? ARRAY['test']) AS sclr_0 FROM ContainsJsons c0_", + 'checks if right operand keys exist in left JSON object' => "SELECT (c0_.jsonbObject1 ?? ARRAY['test']) AS sclr_0 FROM ContainsJsons c0_", ]; } protected function getDqlStatements(): array { return [ - 'checks if right operand keys exist in left JSON object' => \sprintf("SELECT RIGHT_EXISTS_ON_LEFT(e.object1, ARRAY('test')) FROM %s e", ContainsJsons::class), + 'checks if right operand keys exist in left JSON object' => \sprintf("SELECT RIGHT_EXISTS_ON_LEFT(e.jsonbObject1, ARRAY('test')) FROM %s e", ContainsJsons::class), ]; } } diff --git a/tests/Unit/MartinGeorgiev/Utils/DoctrineOrmTest.php b/tests/Unit/MartinGeorgiev/Utils/DoctrineOrmTest.php index e11cc5b2..018e0602 100644 --- a/tests/Unit/MartinGeorgiev/Utils/DoctrineOrmTest.php +++ b/tests/Unit/MartinGeorgiev/Utils/DoctrineOrmTest.php @@ -17,6 +17,6 @@ public function is_consistent_with_token_type_existence(): void $tokenTypeExists = \class_exists(TokenType::class); $isPre219 = DoctrineOrm::isPre219(); - self::assertSame(!$tokenTypeExists, $isPre219); + $this->assertSame(!$tokenTypeExists, $isPre219); } } diff --git a/tests/Unit/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php b/tests/Unit/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php index 7988b6ab..d3371d12 100644 --- a/tests/Unit/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php +++ b/tests/Unit/MartinGeorgiev/Utils/PHPArrayToPostgresValueTransformerTest.php @@ -19,7 +19,7 @@ class PHPArrayToPostgresValueTransformerTest extends TestCase #[Test] public function can_transform_from_php_value(array $phpValue, string $postgresValue): void { - self::assertEquals($postgresValue, PHPArrayToPostgresValueTransformer::transformToPostgresTextArray($phpValue)); + $this->assertEquals($postgresValue, PHPArrayToPostgresValueTransformer::transformToPostgresTextArray($phpValue)); } /** @@ -159,7 +159,7 @@ public function __toString(): string } }; - self::assertSame('{"object string representation"}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$object])); + $this->assertSame('{"object string representation"}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$object])); } #[Test] @@ -168,7 +168,7 @@ public function can_transform_object_without_to_string_method(): void $object = new class {}; // Should contain the class name - self::assertStringContainsString('class@anonymous', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$object])); + $this->assertStringContainsString('class@anonymous', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$object])); } #[Test] @@ -178,7 +178,7 @@ public function can_transform_closed_resource(): void \assert(\is_resource($resource)); \fclose($resource); - self::assertSame('{"resource (closed)"}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$resource])); + $this->assertSame('{"resource (closed)"}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$resource])); } #[Test] @@ -187,7 +187,7 @@ public function can_transform_open_resource(): void $resource = \fopen('php://temp', 'r'); \assert(\is_resource($resource)); - self::assertSame('{"(resource)"}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$resource])); + $this->assertSame('{"(resource)"}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray([$resource])); } #[Test] @@ -208,7 +208,7 @@ public function __toString(): string '', ]; - self::assertEquals('{"string",123,1.5,true,NULL,"object",""}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray($input)); + $this->assertEquals('{"string",123,1.5,true,NULL,"object",""}', PHPArrayToPostgresValueTransformer::transformToPostgresTextArray($input)); } /** diff --git a/tests/Unit/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php b/tests/Unit/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php index 03f929fd..9a0b8cb1 100644 --- a/tests/Unit/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php +++ b/tests/Unit/MartinGeorgiev/Utils/PostgresArrayToPHPArrayTransformerTest.php @@ -19,7 +19,7 @@ class PostgresArrayToPHPArrayTransformerTest extends TestCase #[Test] public function can_transform_to_php_value(array $phpValue, string $postgresValue): void { - self::assertEquals($phpValue, PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresValue)); + $this->assertEquals($phpValue, PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresValue)); } /** @@ -194,7 +194,7 @@ public static function provideMultiDimensionalArrays(): array #[Test] public function can_recover_from_json_decode_failure_and_transform_value_through_manual_parsing(array $phpValue, string $postgresValue): void { - self::assertEquals($phpValue, PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresValue)); + $this->assertEquals($phpValue, PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresValue)); } /** @@ -222,14 +222,14 @@ public static function provideManualParsingArrays(): array public function can_transform_escaped_quotes_with_backslashes(): void { $postgresArray = '{"\\\"quoted\\\""}'; - self::assertSame(['\"quoted\"'], PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresArray)); + $this->assertSame(['\"quoted\"'], PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresArray)); } #[Test] public function can_preserves_numeric_precision(): void { $postgresArray = '{"9223372036854775808","1.23456789012345"}'; - self::assertSame(['9223372036854775808', '1.23456789012345'], PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresArray)); + $this->assertSame(['9223372036854775808', '1.23456789012345'], PostgresArrayToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresArray)); } #[DataProvider('provideInvalidPostgresArrays')] diff --git a/tests/Unit/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php b/tests/Unit/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php index dd7c8c14..65a4e8c4 100644 --- a/tests/Unit/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php +++ b/tests/Unit/MartinGeorgiev/Utils/PostgresJsonToPHPArrayTransformerTest.php @@ -17,7 +17,7 @@ class PostgresJsonToPHPArrayTransformerTest extends TestCase #[Test] public function can_transform_json_to_php_value(null|array|bool|int|string $phpValue, string $postgresValue): void { - self::assertEquals($phpValue, PostgresJsonToPHPArrayTransformer::transformPostgresJsonEncodedValueToPHPValue($postgresValue)); + $this->assertEquals($phpValue, PostgresJsonToPHPArrayTransformer::transformPostgresJsonEncodedValueToPHPValue($postgresValue)); } /** @@ -61,7 +61,7 @@ public static function provideValidJsonTransformations(): array #[Test] public function can_transform_json_array_to_php_array(array $phpArray, string $postgresArray): void { - self::assertEquals($phpArray, PostgresJsonToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresArray)); + $this->assertEquals($phpArray, PostgresJsonToPHPArrayTransformer::transformPostgresArrayToPHPArray($postgresArray)); } /** @@ -89,7 +89,7 @@ public static function provideValidJsonbArrayTransformations(): array #[Test] public function can_transform_json_array_item_to_php_array(array $phpArray, string $item): void { - self::assertEquals($phpArray, PostgresJsonToPHPArrayTransformer::transformPostgresJsonEncodedValueToPHPArray($item)); + $this->assertEquals($phpArray, PostgresJsonToPHPArrayTransformer::transformPostgresJsonEncodedValueToPHPArray($item)); } /**