From 46c0861f4542324061fa650545e389dd1a21d859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Fri, 9 Feb 2018 16:32:28 +0100 Subject: [PATCH 1/2] Fix date calculation in tests (again) Now using PHP to calculate the expected date manipulation, keeping a day as delta since PHP resets the hour when performing operations with days/weeks/months/years. February is a wonderful month, isn't it? --- .../ORM/Functional/QueryDqlFunctionTest.php | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php index e04ce1be4..cca2a3713 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php @@ -5,6 +5,7 @@ namespace Doctrine\Tests\ORM\Functional; use Doctrine\ORM\AbstractQuery; use Doctrine\Tests\Models\Company\CompanyManager; use Doctrine\Tests\OrmFunctionalTestCase; +use function sprintf; /** * Functional Query tests. @@ -292,7 +293,7 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase * * @dataProvider dateAddSubProvider */ - public function testDateAdd(string $unit, int $amount, int $expectedValue, int $delta = 0) : void + public function testDateAdd(string $unit, int $amount, int $delta = 0) : void { $query = sprintf( 'SELECT CURRENT_TIMESTAMP() as now, DATE_ADD(CURRENT_TIMESTAMP(), %d, \'%s\') AS add FROM %s m', @@ -308,9 +309,12 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase self::assertArrayHasKey('now', $result); self::assertArrayHasKey('add', $result); - $diff = strtotime($result['add']) - strtotime($result['now']); - - self::assertEquals($expectedValue, $diff, '', $delta); + self::assertEquals( + (new \DateTimeImmutable($result['now']))->modify(sprintf('+%d %s', $amount, $unit)), + new \DateTimeImmutable($result['add']), + '', + $delta + ); } /** @@ -319,7 +323,7 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase * * @dataProvider dateAddSubProvider */ - public function testDateSub(string $unit, int $amount, int $expectedValue, int $delta = 0) : void + public function testDateSub(string $unit, int $amount, int $delta = 0) : void { $query = sprintf( 'SELECT CURRENT_TIMESTAMP() as now, DATE_SUB(CURRENT_TIMESTAMP(), %d, \'%s\') AS sub FROM %s m', @@ -335,9 +339,12 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase self::assertArrayHasKey('now', $result); self::assertArrayHasKey('sub', $result); - $diff = strtotime($result['now']) - strtotime($result['sub']); - - self::assertEquals($expectedValue, $diff, '', $delta); + self::assertEquals( + (new \DateTimeImmutable($result['now']))->modify(sprintf('-%d %s', $amount, $unit)), + new \DateTimeImmutable($result['sub']), + '', + $delta + ); } public function dateAddSubProvider() : array @@ -345,9 +352,9 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase $secondsInDay = 86400; return [ - 'year' => ['year', 1, 365 * $secondsInDay, 3 * $secondsInDay], - 'month' => ['month', 1, 30 * $secondsInDay, 2.5 * $secondsInDay], - 'week' => ['week', 1, 7 * $secondsInDay, $secondsInDay], + 'year' => ['year', 1, $secondsInDay], + 'month' => ['month', 1, $secondsInDay], + 'week' => ['week', 1, $secondsInDay], 'hour' => ['hour', 1, 3600], 'minute' => ['minute', 1, 60], 'second' => ['second', 10, 10], From 7873f700b0d2bd2a04becb883a5cc59e71dd3c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Cobucci?= Date: Fri, 9 Feb 2018 16:57:37 +0100 Subject: [PATCH 2/2] Add missing tests for day calculation For the DATE_SUB() and DATE_ADD() functions. --- tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php index cca2a3713..50008eb69 100644 --- a/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/QueryDqlFunctionTest.php @@ -355,6 +355,7 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase 'year' => ['year', 1, $secondsInDay], 'month' => ['month', 1, $secondsInDay], 'week' => ['week', 1, $secondsInDay], + 'day' => ['day', 2, $secondsInDay], 'hour' => ['hour', 1, 3600], 'minute' => ['minute', 1, 60], 'second' => ['second', 10, 10],