Skip to content

Commit 21dc61a

Browse files
no message
1 parent 076c1e1 commit 21dc61a

File tree

3 files changed

+67
-34
lines changed

3 files changed

+67
-34
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ protected function getExpectedSqlStatements(): array
3232
'finds numeric element' => 'SELECT array_position(c0_.integerArray, 42) AS sclr_0 FROM ContainsArrays c0_',
3333
'finds element using parameter' => 'SELECT array_position(c0_.textArray, ?) AS sclr_0 FROM ContainsArrays c0_',
3434
'with start position' => "SELECT array_position(c0_.textArray, 'new-value', 2) AS sclr_0 FROM ContainsArrays c0_",
35+
'with zero start position' => "SELECT array_position(c0_.textArray, 'value', 0) AS sclr_0 FROM ContainsArrays c0_",
36+
'with negative start position' => "SELECT array_position(c0_.textArray, 'value', -1) AS sclr_0 FROM ContainsArrays c0_",
37+
'with arithmetic expression as start position' => "SELECT array_position(c0_.textArray, 'value', 1 + 1) AS sclr_0 FROM ContainsArrays c0_",
3538
];
3639
}
3740

@@ -42,6 +45,9 @@ protected function getDqlStatements(): array
4245
'finds numeric element' => \sprintf('SELECT ARRAY_POSITION(e.integerArray, 42) FROM %s e', ContainsArrays::class),
4346
'finds element using parameter' => \sprintf('SELECT ARRAY_POSITION(e.textArray, :dql_parameter) FROM %s e', ContainsArrays::class),
4447
'with start position' => \sprintf("SELECT ARRAY_POSITION(e.textArray, 'new-value', 2) FROM %s e", ContainsArrays::class),
48+
'with zero start position' => \sprintf("SELECT ARRAY_POSITION(e.textArray, 'value', 0) FROM %s e", ContainsArrays::class),
49+
'with negative start position' => \sprintf("SELECT ARRAY_POSITION(e.textArray, 'value', -1) FROM %s e", ContainsArrays::class),
50+
'with arithmetic expression as start position' => \sprintf("SELECT ARRAY_POSITION(e.textArray, 'value', 1+1) FROM %s e", ContainsArrays::class),
4551
];
4652
}
4753

tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateAddTest.php

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\DateAdd;
1010
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Exception\InvalidArgumentForVariadicFunctionException;
1111
use MartinGeorgiev\Doctrine\ORM\Query\AST\Functions\Exception\InvalidTimezoneException;
12+
use PHPUnit\Framework\Attributes\DataProvider;
1213
use PHPUnit\Framework\Attributes\Test;
1314

1415
class DateAddTest extends BaseVariadicFunctionTestCase
@@ -28,33 +29,21 @@ protected function getStringFunctions(): array
2829
protected function getExpectedSqlStatements(): array
2930
{
3031
return [
31-
'adds 1 day with timezone' => "SELECT date_add(c0_.datetimetz1, '1 day', 'Europe/Sofia') AS sclr_0 FROM ContainsDates c0_",
32-
'adds 2 hours with timezone' => "SELECT date_add(c0_.datetimetz1, '2 hours', 'UTC') AS sclr_0 FROM ContainsDates c0_",
33-
'adds 3 days without timezone' => "SELECT date_add(c0_.datetimetz1, '3 days') AS sclr_0 FROM ContainsDates c0_",
34-
'adds with WHERE clause' => "SELECT c0_.datetimetz1 AS datetimetz1_0 FROM ContainsDates c0_ WHERE date_add(c0_.datetimetz1, '1 day') = '2023-01-02 00:00:00'",
32+
'with timezone (3 arguments)' => "SELECT date_add(c0_.datetimetz1, '1 day', 'Europe/Sofia') AS sclr_0 FROM ContainsDates c0_",
33+
'without timezone (2 arguments)' => "SELECT date_add(c0_.datetimetz1, '3 days') AS sclr_0 FROM ContainsDates c0_",
34+
'used in WHERE clause' => "SELECT c0_.datetimetz1 AS datetimetz1_0 FROM ContainsDates c0_ WHERE date_add(c0_.datetimetz1, '1 day') = '2023-01-02 00:00:00'",
3535
];
3636
}
3737

3838
protected function getDqlStatements(): array
3939
{
4040
return [
41-
'adds 1 day with timezone' => \sprintf("SELECT DATE_ADD(e.datetimetz1, '1 day', 'Europe/Sofia') FROM %s e", ContainsDates::class),
42-
'adds 2 hours with timezone' => \sprintf("SELECT DATE_ADD(e.datetimetz1, '2 hours', 'UTC') FROM %s e", ContainsDates::class),
43-
'adds 3 days without timezone' => \sprintf("SELECT DATE_ADD(e.datetimetz1, '3 days') FROM %s e", ContainsDates::class),
44-
'adds with WHERE clause' => \sprintf("SELECT e.datetimetz1 FROM %s e WHERE DATE_ADD(e.datetimetz1, '1 day') = '2023-01-02 00:00:00'", ContainsDates::class),
41+
'with timezone (3 arguments)' => \sprintf("SELECT DATE_ADD(e.datetimetz1, '1 day', 'Europe/Sofia') FROM %s e", ContainsDates::class),
42+
'without timezone (2 arguments)' => \sprintf("SELECT DATE_ADD(e.datetimetz1, '3 days') FROM %s e", ContainsDates::class),
43+
'used in WHERE clause' => \sprintf("SELECT e.datetimetz1 FROM %s e WHERE DATE_ADD(e.datetimetz1, '1 day') = '2023-01-02 00:00:00'", ContainsDates::class),
4544
];
4645
}
4746

48-
#[Test]
49-
public function throws_exception_for_invalid_timezone(): void
50-
{
51-
$this->expectException(InvalidTimezoneException::class);
52-
$this->expectExceptionMessage('Invalid timezone "Invalid/Timezone" provided for date_add');
53-
54-
$dql = \sprintf("SELECT DATE_ADD(e.datetimetz1, '1 day', 'Invalid/Timezone') FROM %s e", ContainsDates::class);
55-
$this->buildEntityManager()->createQuery($dql)->getSQL();
56-
}
57-
5847
#[Test]
5948
public function throws_exception_for_too_few_arguments(): void
6049
{
@@ -74,4 +63,28 @@ public function throws_exception_for_too_many_arguments(): void
7463
$dql = \sprintf("SELECT DATE_ADD(e.datetimetz1, '1 day', 'Europe/Sofia', 'extra_arg') FROM %s e", ContainsDates::class);
7564
$this->buildEntityManager()->createQuery($dql)->getSQL();
7665
}
66+
67+
#[DataProvider('provideInvalidTimezoneValues')]
68+
#[Test]
69+
public function throws_exception_for_invalid_timezone(string $invalidTimezone): void
70+
{
71+
$this->expectException(InvalidTimezoneException::class);
72+
$this->expectExceptionMessage(\sprintf('Invalid timezone "%s" provided for date_add. Must be a valid PHP timezone identifier.', $invalidTimezone));
73+
74+
$dql = \sprintf("SELECT DATE_ADD(e.datetimetz1, '1 day', '%s') FROM %s e", $invalidTimezone, ContainsDates::class);
75+
$this->buildEntityManager()->createQuery($dql)->getSQL();
76+
}
77+
78+
/**
79+
* @return array<string, array{string}>
80+
*/
81+
public static function provideInvalidTimezoneValues(): array
82+
{
83+
return [
84+
'empty string' => [''],
85+
'whitespace only' => [' '],
86+
'numeric value' => ['123'],
87+
'invalid timezone' => ['Invalid/Timezone'],
88+
];
89+
}
7790
}

tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/DateSubtractTest.php

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,31 +29,21 @@ protected function getStringFunctions(): array
2929
protected function getExpectedSqlStatements(): array
3030
{
3131
return [
32-
'subtracts 1 day with timezone' => "SELECT date_subtract(c0_.datetimetz1, '1 day', 'Europe/Sofia') AS sclr_0 FROM ContainsDates c0_",
33-
'subtracts 2 hours with timezone' => "SELECT date_subtract(c0_.datetimetz1, '2 hours', 'UTC') AS sclr_0 FROM ContainsDates c0_",
34-
'subtracts 3 days without timezone' => "SELECT date_subtract(c0_.datetimetz1, '3 days') AS sclr_0 FROM ContainsDates c0_",
32+
'with timezone (3 arguments)' => "SELECT date_subtract(c0_.datetimetz1, '1 day', 'Europe/Sofia') AS sclr_0 FROM ContainsDates c0_",
33+
'without timezone (2 arguments)' => "SELECT date_subtract(c0_.datetimetz1, '3 days') AS sclr_0 FROM ContainsDates c0_",
34+
'used in WHERE clause' => "SELECT c0_.datetimetz1 AS datetimetz1_0 FROM ContainsDates c0_ WHERE date_subtract(c0_.datetimetz1, '1 day') = '2023-01-02 00:00:00'",
3535
];
3636
}
3737

3838
protected function getDqlStatements(): array
3939
{
4040
return [
41-
'subtracts 1 day with timezone' => \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '1 day', 'Europe/Sofia') FROM %s e", ContainsDates::class),
42-
'subtracts 2 hours with timezone' => \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '2 hours', 'UTC') FROM %s e", ContainsDates::class),
43-
'subtracts 3 days without timezone' => \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '3 days') FROM %s e", ContainsDates::class),
41+
'with timezone (3 arguments)' => \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '1 day', 'Europe/Sofia') FROM %s e", ContainsDates::class),
42+
'without timezone (2 arguments)' => \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '3 days') FROM %s e", ContainsDates::class),
43+
'used in WHERE clause' => \sprintf("SELECT e.datetimetz1 FROM %s e WHERE DATE_SUBTRACT(e.datetimetz1, '1 day') = '2023-01-02 00:00:00'", ContainsDates::class),
4444
];
4545
}
4646

47-
#[Test]
48-
public function throws_exception_for_invalid_timezone(): void
49-
{
50-
$this->expectException(InvalidTimezoneException::class);
51-
$this->expectExceptionMessage('Invalid timezone "Invalid/Timezone" provided for date_subtract');
52-
53-
$dql = \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '1 day', 'Invalid/Timezone') FROM %s e", ContainsDates::class);
54-
$this->buildEntityManager()->createQuery($dql)->getSQL();
55-
}
56-
5747
#[DataProvider('provideInvalidArgumentCountCases')]
5848
#[Test]
5949
public function throws_exception_for_invalid_argument_count(string $dql, string $expectedMessage): void
@@ -80,4 +70,28 @@ public static function provideInvalidArgumentCountCases(): array
8070
],
8171
];
8272
}
73+
74+
#[DataProvider('provideInvalidTimezoneValues')]
75+
#[Test]
76+
public function throws_exception_for_invalid_timezone(string $invalidTimezone): void
77+
{
78+
$this->expectException(InvalidTimezoneException::class);
79+
$this->expectExceptionMessage(\sprintf('Invalid timezone "%s" provided for date_subtract. Must be a valid PHP timezone identifier.', $invalidTimezone));
80+
81+
$dql = \sprintf("SELECT DATE_SUBTRACT(e.datetimetz1, '1 day', '%s') FROM %s e", $invalidTimezone, ContainsDates::class);
82+
$this->buildEntityManager()->createQuery($dql)->getSQL();
83+
}
84+
85+
/**
86+
* @return array<string, array{string}>
87+
*/
88+
public static function provideInvalidTimezoneValues(): array
89+
{
90+
return [
91+
'empty string' => [''],
92+
'whitespace only' => [' '],
93+
'numeric value' => ['123'],
94+
'invalid timezone' => ['Invalid/Timezone'],
95+
];
96+
}
8397
}

0 commit comments

Comments
 (0)