Skip to content

Commit b653dce

Browse files
chore: test functions against a real PostgreSQL server (#378)
1 parent 293b79d commit b653dce

29 files changed

+1035
-106
lines changed

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayAppendTest.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayAppend;
88

9-
class ArrayAppendTest extends TestCase
9+
class ArrayAppendTest extends ArrayTestCase
1010
{
1111
protected function getStringFunctions(): array
1212
{
@@ -15,13 +15,15 @@ protected function getStringFunctions(): array
1515

1616
public function test_array_append_with_text_array(): void
1717
{
18-
$dql = "SELECT ARRAY_APPEND(t.textArray, 'orange') as result
19-
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
20-
WHERE t.id = 1";
18+
$dql = 'SELECT ARRAY_APPEND(t.textArray, \'orange\') as result
19+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
20+
WHERE t.id = 1';
2121

2222
$result = $this->executeDqlQuery($dql);
23+
$this->assertIsString($result[0]['result']);
2324
$actual = $this->transformPostgresArray($result[0]['result']);
24-
$this->assertEquals(['apple', 'banana', 'orange', 'orange'], $actual);
25+
$this->assertIsArray($actual);
26+
$this->assertSame(['apple', 'banana', 'orange', 'orange'], $actual);
2527
}
2628

2729
public function test_array_append_with_integer_array(): void
@@ -31,8 +33,10 @@ public function test_array_append_with_integer_array(): void
3133
WHERE t.id = 1';
3234

3335
$result = $this->executeDqlQuery($dql);
36+
$this->assertIsString($result[0]['result']);
3437
$actual = $this->transformPostgresArray($result[0]['result']);
35-
$this->assertEquals([1, 2, 3, 3], $actual);
38+
$this->assertIsArray($actual);
39+
$this->assertSame([1, 2, 3, 3], $actual);
3640
}
3741

3842
public function test_array_append_with_boolean_array(): void
@@ -42,7 +46,9 @@ public function test_array_append_with_boolean_array(): void
4246
WHERE t.id = 1';
4347

4448
$result = $this->executeDqlQuery($dql);
49+
$this->assertIsString($result[0]['result']);
4550
$actual = $this->transformPostgresArray($result[0]['result']);
46-
$this->assertEquals([true, false, true, true], $actual);
51+
$this->assertIsArray($actual);
52+
$this->assertSame([true, false, true, true], $actual);
4753
}
4854
}

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayCardinalityTest.php

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCardinality;
88

9-
class ArrayCardinalityTest extends TestCase
9+
class ArrayCardinalityTest extends ArrayTestCase
1010
{
1111
protected function getStringFunctions(): array
1212
{
@@ -15,40 +15,34 @@ protected function getStringFunctions(): array
1515

1616
public function test_array_cardinality_with_text_array(): void
1717
{
18-
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.textArray) as result
18+
$dql = 'SELECT ARRAY_CARDINALITY(t.textArray) as result
1919
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
20-
ORDER BY t.id';
20+
WHERE t.id = 1';
2121

2222
$result = $this->executeDqlQuery($dql);
23-
24-
$this->assertEquals(3, $result[0]['result']); // First row should have 3 elements
25-
$this->assertEquals(2, $result[1]['result']); // Second row should have 2 elements
26-
$this->assertEquals(4, $result[2]['result']); // Third row should have 4 elements
23+
$this->assertIsInt($result[0]['result']);
24+
$this->assertSame(3, $result[0]['result']);
2725
}
2826

2927
public function test_array_cardinality_with_integer_array(): void
3028
{
31-
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.integerArray) as result
29+
$dql = 'SELECT ARRAY_CARDINALITY(t.integerArray) as result
3230
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
33-
ORDER BY t.id';
31+
WHERE t.id = 1';
3432

3533
$result = $this->executeDqlQuery($dql);
36-
37-
$this->assertEquals(3, $result[0]['result']); // First row should have 3 elements
38-
$this->assertEquals(2, $result[1]['result']); // Second row should have 2 elements
39-
$this->assertEquals(4, $result[2]['result']); // Third row should have 4 elements
34+
$this->assertIsInt($result[0]['result']);
35+
$this->assertSame(3, $result[0]['result']);
4036
}
4137

4238
public function test_array_cardinality_with_boolean_array(): void
4339
{
44-
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.boolArray) as result
40+
$dql = 'SELECT ARRAY_CARDINALITY(t.boolArray) as result
4541
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
46-
ORDER BY t.id';
42+
WHERE t.id = 1';
4743

4844
$result = $this->executeDqlQuery($dql);
49-
50-
$this->assertEquals(3, $result[0]['result']); // First row should have 3 elements
51-
$this->assertEquals(2, $result[1]['result']); // Second row should have 2 elements
52-
$this->assertEquals(4, $result[2]['result']); // Third row should have 4 elements
45+
$this->assertIsInt($result[0]['result']);
46+
$this->assertSame(3, $result[0]['result']);
5347
}
5448
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
6+
7+
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayCat;
8+
9+
class ArrayCatTest extends ArrayTestCase
10+
{
11+
protected function getStringFunctions(): array
12+
{
13+
return ['ARRAY_CAT' => ArrayCat::class];
14+
}
15+
16+
public function test_array_cat_with_text_arrays(): void
17+
{
18+
$dql = 'SELECT ARRAY_CAT(:array1, :array2) as result
19+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
20+
WHERE t.id = 1';
21+
$result = $this->executeDqlQuery($dql, [
22+
'array1' => ['apple', 'banana'],
23+
'array2' => ['orange', 'kiwi'],
24+
]);
25+
$actual = $this->transformPostgresArray($result[0]['result']);
26+
$this->assertIsArray($actual);
27+
$this->assertSame(['apple', 'banana', 'orange', 'kiwi'], $actual);
28+
}
29+
30+
public function test_array_cat_with_integer_arrays(): void
31+
{
32+
$dql = 'SELECT ARRAY_CAT(:array1, :array2) as result
33+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
34+
WHERE t.id = 1';
35+
$result = $this->executeDqlQuery($dql, [
36+
'array1' => [1, 2],
37+
'array2' => [3, 4],
38+
]);
39+
$actual = $this->transformPostgresArray($result[0]['result']);
40+
$this->assertIsArray($actual);
41+
$this->assertSame([1, 2, 3, 4], $actual);
42+
}
43+
44+
public function test_array_cat_with_boolean_arrays(): void
45+
{
46+
$dql = 'SELECT ARRAY_CAT(:array1, :array2) as result
47+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
48+
WHERE t.id = 1';
49+
$result = $this->executeDqlQuery($dql, [
50+
'array1' => [true, false],
51+
'array2' => [true, true],
52+
]);
53+
$actual = $this->transformPostgresArray($result[0]['result']);
54+
$this->assertIsArray($actual);
55+
$this->assertSame([true, false, true, true], $actual);
56+
}
57+
58+
public function test_array_cat_with_array_columns(): void
59+
{
60+
$dql = 'SELECT ARRAY_CAT(t.textArray, t.textArray) as result
61+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
62+
WHERE t.id = 1';
63+
$result = $this->executeDqlQuery($dql);
64+
$actual = $this->transformPostgresArray($result[0]['result']);
65+
$this->assertIsArray($actual);
66+
$this->assertSame(['apple', 'banana', 'orange', 'apple', 'banana', 'orange'], $actual);
67+
}
68+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Integration\MartinGeorgiev\Doctrine\ORM\Query\AST\Functions;
6+
7+
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayDimensions;
8+
9+
class ArrayDimensionsTest extends ArrayTestCase
10+
{
11+
protected function getStringFunctions(): array
12+
{
13+
return ['ARRAY_DIMENSIONS' => ArrayDimensions::class];
14+
}
15+
16+
public function test_array_dimensions_with_text_array(): void
17+
{
18+
$dql = 'SELECT ARRAY_DIMENSIONS(t.textArray) as result
19+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
20+
WHERE t.id = 1';
21+
22+
$result = $this->executeDqlQuery($dql);
23+
$this->assertIsString($result[0]['result']);
24+
$this->assertSame('[1:3]', $result[0]['result']);
25+
}
26+
27+
public function test_array_dimensions_with_integer_array(): void
28+
{
29+
$dql = 'SELECT ARRAY_DIMENSIONS(t.integerArray) as result
30+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
31+
WHERE t.id = 1';
32+
33+
$result = $this->executeDqlQuery($dql);
34+
$this->assertIsString($result[0]['result']);
35+
$this->assertSame('[1:3]', $result[0]['result']);
36+
}
37+
38+
public function test_array_dimensions_with_boolean_array(): void
39+
{
40+
$dql = 'SELECT ARRAY_DIMENSIONS(t.boolArray) as result
41+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
42+
WHERE t.id = 1';
43+
44+
$result = $this->executeDqlQuery($dql);
45+
$this->assertIsString($result[0]['result']);
46+
$this->assertSame('[1:3]', $result[0]['result']);
47+
}
48+
}

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayLengthTest.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayLength;
88

9-
class ArrayLengthTest extends TestCase
9+
class ArrayLengthTest extends ArrayTestCase
1010
{
1111
protected function getStringFunctions(): array
1212
{
@@ -20,7 +20,8 @@ public function test_array_length_with_text_array(): void
2020
WHERE t.id = 1';
2121

2222
$result = $this->executeDqlQuery($dql);
23-
$this->assertEquals(3, $result[0]['result']);
23+
$this->assertIsInt($result[0]['result']);
24+
$this->assertSame(3, $result[0]['result']);
2425
}
2526

2627
public function test_array_length_with_integer_array(): void
@@ -30,7 +31,8 @@ public function test_array_length_with_integer_array(): void
3031
WHERE t.id = 1';
3132

3233
$result = $this->executeDqlQuery($dql);
33-
$this->assertEquals(3, $result[0]['result']);
34+
$this->assertIsInt($result[0]['result']);
35+
$this->assertSame(3, $result[0]['result']);
3436
}
3537

3638
public function test_array_length_with_boolean_array(): void
@@ -40,7 +42,8 @@ public function test_array_length_with_boolean_array(): void
4042
WHERE t.id = 1';
4143

4244
$result = $this->executeDqlQuery($dql);
43-
$this->assertEquals(3, $result[0]['result']);
45+
$this->assertIsInt($result[0]['result']);
46+
$this->assertSame(3, $result[0]['result']);
4447
}
4548

4649
public function test_array_length_with_invalid_dimension(): void

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayNumberOfDimensionsTest.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayNumberOfDimensions;
88

9-
class ArrayNumberOfDimensionsTest extends TestCase
9+
class ArrayNumberOfDimensionsTest extends ArrayTestCase
1010
{
1111
protected function getStringFunctions(): array
1212
{
@@ -20,7 +20,8 @@ public function test_array_number_of_dimensions_with_text_array(): void
2020
WHERE t.id = 1';
2121

2222
$result = $this->executeDqlQuery($dql);
23-
$this->assertEquals(1, $result[0]['result']);
23+
$this->assertIsInt($result[0]['result']);
24+
$this->assertSame(1, $result[0]['result']);
2425
}
2526

2627
public function test_array_number_of_dimensions_with_integer_array(): void
@@ -30,7 +31,8 @@ public function test_array_number_of_dimensions_with_integer_array(): void
3031
WHERE t.id = 1';
3132

3233
$result = $this->executeDqlQuery($dql);
33-
$this->assertEquals(1, $result[0]['result']);
34+
$this->assertIsInt($result[0]['result']);
35+
$this->assertSame(1, $result[0]['result']);
3436
}
3537

3638
public function test_array_number_of_dimensions_with_boolean_array(): void
@@ -40,6 +42,7 @@ public function test_array_number_of_dimensions_with_boolean_array(): void
4042
WHERE t.id = 1';
4143

4244
$result = $this->executeDqlQuery($dql);
43-
$this->assertEquals(1, $result[0]['result']);
45+
$this->assertIsInt($result[0]['result']);
46+
$this->assertSame(1, $result[0]['result']);
4447
}
4548
}

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayPositionTest.php

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\ArrayPosition;
88

9-
class ArrayPositionTest extends TestCase
9+
class ArrayPositionTest extends ArrayTestCase
1010
{
1111
protected function getStringFunctions(): array
1212
{
@@ -15,12 +15,13 @@ protected function getStringFunctions(): array
1515

1616
public function test_array_position_with_text_array(): void
1717
{
18-
$dql = "SELECT ARRAY_POSITION(t.textArray, 'banana') as result
19-
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
20-
WHERE t.id = 1";
18+
$dql = 'SELECT ARRAY_POSITION(t.textArray, \'banana\') as result
19+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
20+
WHERE t.id = 1';
2121

2222
$result = $this->executeDqlQuery($dql);
23-
$this->assertEquals(2, $result[0]['result']);
23+
$this->assertIsInt($result[0]['result']);
24+
$this->assertSame(2, $result[0]['result']);
2425
}
2526

2627
public function test_array_position_with_integer_array(): void
@@ -30,7 +31,8 @@ public function test_array_position_with_integer_array(): void
3031
WHERE t.id = 1';
3132

3233
$result = $this->executeDqlQuery($dql);
33-
$this->assertEquals(2, $result[0]['result']);
34+
$this->assertIsInt($result[0]['result']);
35+
$this->assertSame(2, $result[0]['result']);
3436
}
3537

3638
public function test_array_position_with_boolean_array(): void
@@ -40,14 +42,15 @@ public function test_array_position_with_boolean_array(): void
4042
WHERE t.id = 1';
4143

4244
$result = $this->executeDqlQuery($dql);
43-
$this->assertEquals(2, $result[0]['result']);
45+
$this->assertIsInt($result[0]['result']);
46+
$this->assertSame(2, $result[0]['result']);
4447
}
4548

46-
public function test_array_position_with_not_found(): void
49+
public function test_array_position_with_not_found_element(): void
4750
{
48-
$dql = "SELECT ARRAY_POSITION(t.textArray, 'mango') as result
49-
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
50-
WHERE t.id = 1";
51+
$dql = 'SELECT ARRAY_POSITION(t.textArray, \'mango\') as result
52+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
53+
WHERE t.id = 1';
5154

5255
$result = $this->executeDqlQuery($dql);
5356
$this->assertNull($result[0]['result']);

0 commit comments

Comments
 (0)