Skip to content

Commit 293b79d

Browse files
chore: add integration tests for more array* functions against a real PostgreSQL server (#376)
1 parent 3bdc83f commit 293b79d

12 files changed

+382
-48
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,34 @@ 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 appended
18+
$dql = "SELECT ARRAY_APPEND(t.textArray, 'orange') as result
1919
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
2020
WHERE t.id = 1";
2121

2222
$result = $this->executeDqlQuery($dql);
23-
$actual = $this->transformPostgresArray($result[0]['appended']);
23+
$actual = $this->transformPostgresArray($result[0]['result']);
2424
$this->assertEquals(['apple', 'banana', 'orange', 'orange'], $actual);
2525
}
2626

2727
public function test_array_append_with_integer_array(): void
2828
{
29-
$dql = 'SELECT ARRAY_APPEND(t.integerArray, 3) as appended
29+
$dql = 'SELECT ARRAY_APPEND(t.integerArray, 3) as result
3030
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
3131
WHERE t.id = 1';
3232

3333
$result = $this->executeDqlQuery($dql);
34-
$actual = $this->transformPostgresArray($result[0]['appended']);
34+
$actual = $this->transformPostgresArray($result[0]['result']);
3535
$this->assertEquals([1, 2, 3, 3], $actual);
3636
}
3737

3838
public function test_array_append_with_boolean_array(): void
3939
{
40-
$dql = 'SELECT ARRAY_APPEND(t.boolArray, true) as appended
40+
$dql = 'SELECT ARRAY_APPEND(t.boolArray, true) as result
4141
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
4242
WHERE t.id = 1';
4343

4444
$result = $this->executeDqlQuery($dql);
45-
$actual = $this->transformPostgresArray($result[0]['appended']);
45+
$actual = $this->transformPostgresArray($result[0]['result']);
4646
$this->assertEquals([true, false, true, true], $actual);
4747
}
4848
}

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,40 @@ 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 cardinality
18+
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.textArray) as result
1919
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
2020
ORDER BY t.id';
2121

2222
$result = $this->executeDqlQuery($dql);
2323

24-
$this->assertEquals(3, $result[0]['cardinality']); // First row should have 3 elements
25-
$this->assertEquals(2, $result[1]['cardinality']); // Second row should have 2 elements
26-
$this->assertEquals(4, $result[2]['cardinality']); // Third row should have 4 elements
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
2727
}
2828

2929
public function test_array_cardinality_with_integer_array(): void
3030
{
31-
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.integerArray) as cardinality
31+
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.integerArray) as result
3232
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
3333
ORDER BY t.id';
3434

3535
$result = $this->executeDqlQuery($dql);
3636

37-
$this->assertEquals(3, $result[0]['cardinality']); // First row should have 3 elements
38-
$this->assertEquals(2, $result[1]['cardinality']); // Second row should have 2 elements
39-
$this->assertEquals(4, $result[2]['cardinality']); // Third row should have 4 elements
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
4040
}
4141

4242
public function test_array_cardinality_with_boolean_array(): void
4343
{
44-
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.boolArray) as cardinality
44+
$dql = 'SELECT t.id, ARRAY_CARDINALITY(t.boolArray) as result
4545
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
4646
ORDER BY t.id';
4747

4848
$result = $this->executeDqlQuery($dql);
4949

50-
$this->assertEquals(3, $result[0]['cardinality']); // First row should have 3 elements
51-
$this->assertEquals(2, $result[1]['cardinality']); // Second row should have 2 elements
52-
$this->assertEquals(4, $result[2]['cardinality']); // Third row should have 4 elements
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
5353
}
5454
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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\ArrayLength;
8+
9+
class ArrayLengthTest extends TestCase
10+
{
11+
protected function getStringFunctions(): array
12+
{
13+
return ['ARRAY_LENGTH' => ArrayLength::class];
14+
}
15+
16+
public function test_array_length_with_text_array(): void
17+
{
18+
$dql = 'SELECT ARRAY_LENGTH(t.textArray, 1) as result
19+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
20+
WHERE t.id = 1';
21+
22+
$result = $this->executeDqlQuery($dql);
23+
$this->assertEquals(3, $result[0]['result']);
24+
}
25+
26+
public function test_array_length_with_integer_array(): void
27+
{
28+
$dql = 'SELECT ARRAY_LENGTH(t.integerArray, 1) as result
29+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
30+
WHERE t.id = 1';
31+
32+
$result = $this->executeDqlQuery($dql);
33+
$this->assertEquals(3, $result[0]['result']);
34+
}
35+
36+
public function test_array_length_with_boolean_array(): void
37+
{
38+
$dql = 'SELECT ARRAY_LENGTH(t.boolArray, 1) as result
39+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
40+
WHERE t.id = 1';
41+
42+
$result = $this->executeDqlQuery($dql);
43+
$this->assertEquals(3, $result[0]['result']);
44+
}
45+
46+
public function test_array_length_with_invalid_dimension(): void
47+
{
48+
$dql = 'SELECT ARRAY_LENGTH(t.textArray, 2) as result
49+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
50+
WHERE t.id = 1';
51+
52+
$result = $this->executeDqlQuery($dql);
53+
$this->assertNull($result[0]['result']);
54+
}
55+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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\ArrayNumberOfDimensions;
8+
9+
class ArrayNumberOfDimensionsTest extends TestCase
10+
{
11+
protected function getStringFunctions(): array
12+
{
13+
return ['ARRAY_NUMBER_OF_DIMENSIONS' => ArrayNumberOfDimensions::class];
14+
}
15+
16+
public function test_array_number_of_dimensions_with_text_array(): void
17+
{
18+
$dql = 'SELECT ARRAY_NUMBER_OF_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->assertEquals(1, $result[0]['result']);
24+
}
25+
26+
public function test_array_number_of_dimensions_with_integer_array(): void
27+
{
28+
$dql = 'SELECT ARRAY_NUMBER_OF_DIMENSIONS(t.integerArray) as result
29+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
30+
WHERE t.id = 1';
31+
32+
$result = $this->executeDqlQuery($dql);
33+
$this->assertEquals(1, $result[0]['result']);
34+
}
35+
36+
public function test_array_number_of_dimensions_with_boolean_array(): void
37+
{
38+
$dql = 'SELECT ARRAY_NUMBER_OF_DIMENSIONS(t.boolArray) as result
39+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
40+
WHERE t.id = 1';
41+
42+
$result = $this->executeDqlQuery($dql);
43+
$this->assertEquals(1, $result[0]['result']);
44+
}
45+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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\ArrayPosition;
8+
9+
class ArrayPositionTest extends TestCase
10+
{
11+
protected function getStringFunctions(): array
12+
{
13+
return ['ARRAY_POSITION' => ArrayPosition::class];
14+
}
15+
16+
public function test_array_position_with_text_array(): void
17+
{
18+
$dql = "SELECT ARRAY_POSITION(t.textArray, 'banana') as result
19+
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
20+
WHERE t.id = 1";
21+
22+
$result = $this->executeDqlQuery($dql);
23+
$this->assertEquals(2, $result[0]['result']);
24+
}
25+
26+
public function test_array_position_with_integer_array(): void
27+
{
28+
$dql = 'SELECT ARRAY_POSITION(t.integerArray, 2) as result
29+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
30+
WHERE t.id = 1';
31+
32+
$result = $this->executeDqlQuery($dql);
33+
$this->assertEquals(2, $result[0]['result']);
34+
}
35+
36+
public function test_array_position_with_boolean_array(): void
37+
{
38+
$dql = 'SELECT ARRAY_POSITION(t.boolArray, false) as result
39+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
40+
WHERE t.id = 1';
41+
42+
$result = $this->executeDqlQuery($dql);
43+
$this->assertEquals(2, $result[0]['result']);
44+
}
45+
46+
public function test_array_position_with_not_found(): void
47+
{
48+
$dql = "SELECT ARRAY_POSITION(t.textArray, 'mango') as result
49+
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
50+
WHERE t.id = 1";
51+
52+
$result = $this->executeDqlQuery($dql);
53+
$this->assertNull($result[0]['result']);
54+
}
55+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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\ArrayPositions;
8+
9+
class ArrayPositionsTest extends TestCase
10+
{
11+
protected function getStringFunctions(): array
12+
{
13+
return ['ARRAY_POSITIONS' => ArrayPositions::class];
14+
}
15+
16+
public function test_array_positions_with_text_array(): void
17+
{
18+
$dql = "SELECT ARRAY_POSITIONS(t.textArray, 'apple') as result
19+
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
20+
WHERE t.id = 2";
21+
22+
$result = $this->executeDqlQuery($dql);
23+
$actual = $this->transformPostgresArray($result[0]['result']);
24+
$this->assertEquals([2], $actual);
25+
}
26+
27+
public function test_array_positions_with_integer_array(): void
28+
{
29+
$dql = 'SELECT ARRAY_POSITIONS(t.integerArray, 1) as result
30+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
31+
WHERE t.id = 2';
32+
33+
$result = $this->executeDqlQuery($dql);
34+
$actual = $this->transformPostgresArray($result[0]['result']);
35+
$this->assertEquals([2], $actual);
36+
}
37+
38+
public function test_array_positions_with_boolean_array(): void
39+
{
40+
$dql = 'SELECT ARRAY_POSITIONS(t.boolArray, true) as result
41+
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
42+
WHERE t.id = 2';
43+
44+
$result = $this->executeDqlQuery($dql);
45+
$actual = $this->transformPostgresArray($result[0]['result']);
46+
$this->assertEquals([2], $actual);
47+
}
48+
49+
public function test_array_positions_with_not_found(): void
50+
{
51+
$dql = "SELECT ARRAY_POSITIONS(t.textArray, 'mango') as result
52+
FROM Fixtures\\MartinGeorgiev\\Doctrine\\Entity\\ContainsArrays t
53+
WHERE t.id = 2";
54+
55+
$result = $this->executeDqlQuery($dql);
56+
$actual = $this->transformPostgresArray($result[0]['result']);
57+
$this->assertEquals([], $actual);
58+
}
59+
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,34 @@ protected function getStringFunctions(): array
1515

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

2222
$result = $this->executeDqlQuery($dql);
23-
$actual = $this->transformPostgresArray($result[0]['prepended']);
23+
$actual = $this->transformPostgresArray($result[0]['result']);
2424
$this->assertEquals(['orange', 'apple', 'banana', 'orange'], $actual);
2525
}
2626

2727
public function test_array_prepend_with_integer_array(): void
2828
{
29-
$dql = 'SELECT ARRAY_PREPEND(3, t.integerArray) as prepended
29+
$dql = 'SELECT ARRAY_PREPEND(3, t.integerArray) as result
3030
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
3131
WHERE t.id = 1';
3232

3333
$result = $this->executeDqlQuery($dql);
34-
$actual = $this->transformPostgresArray($result[0]['prepended']);
34+
$actual = $this->transformPostgresArray($result[0]['result']);
3535
$this->assertEquals([3, 1, 2, 3], $actual);
3636
}
3737

3838
public function test_array_prepend_with_boolean_array(): void
3939
{
40-
$dql = 'SELECT ARRAY_PREPEND(true, t.boolArray) as prepended
40+
$dql = 'SELECT ARRAY_PREPEND(true, t.boolArray) as result
4141
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsArrays t
4242
WHERE t.id = 1';
4343

4444
$result = $this->executeDqlQuery($dql);
45-
$actual = $this->transformPostgresArray($result[0]['prepended']);
45+
$actual = $this->transformPostgresArray($result[0]['result']);
4646
$this->assertEquals([true, true, false, true], $actual);
4747
}
4848
}

0 commit comments

Comments
 (0)