Improve tests for DATE_ADD and DATE_SUB
So that we can do proper assertions and cover all the possibilities of the functions.
This commit is contained in:
parent
f277eef6ea
commit
59792654c0
@ -2,6 +2,7 @@
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional;
|
||||
|
||||
use Doctrine\ORM\AbstractQuery;
|
||||
use Doctrine\Tests\Models\Company\CompanyManager;
|
||||
use Doctrine\Tests\OrmFunctionalTestCase;
|
||||
|
||||
@ -176,7 +177,7 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase
|
||||
$this->assertEquals('Gui', $result[1]['str1']);
|
||||
$this->assertEquals('Jon', $result[2]['str1']);
|
||||
$this->assertEquals('Rom', $result[3]['str1']);
|
||||
|
||||
|
||||
$this->assertEquals('amin E.', $result[0]['str2']);
|
||||
$this->assertEquals('herme B.', $result[1]['str2']);
|
||||
$this->assertEquals('than W.', $result[2]['str2']);
|
||||
@ -287,87 +288,70 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase
|
||||
|
||||
/**
|
||||
* @group DDC-1014
|
||||
*/
|
||||
public function testDateAdd()
|
||||
{
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
|
||||
$this->assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
|
||||
$this->assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-2938
|
||||
*
|
||||
* @dataProvider dateAddSubProvider
|
||||
*/
|
||||
public function testDateAddTime(): void
|
||||
public function testDateAdd(string $unit, int $amount, int $expectedValue, int $delta = 0) : void
|
||||
{
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
$query = sprintf(
|
||||
'SELECT CURRENT_TIMESTAMP() as now, DATE_ADD(CURRENT_TIMESTAMP(), %d, \'%s\') AS add FROM %s m',
|
||||
$amount,
|
||||
$unit,
|
||||
CompanyManager::class
|
||||
);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'minute') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
$result = $this->_em->createQuery($query)
|
||||
->setMaxResults(1)
|
||||
->getSingleResult(AbstractQuery::HYDRATE_ARRAY);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'hour') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
}
|
||||
self::assertArrayHasKey('now', $result);
|
||||
self::assertArrayHasKey('add', $result);
|
||||
|
||||
public function testDateAddSecond()
|
||||
{
|
||||
$dql = "SELECT CURRENT_TIMESTAMP() now, DATE_ADD(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m";
|
||||
$query = $this->_em->createQuery($dql)->setMaxResults(1);
|
||||
$result = $query->getArrayResult();
|
||||
$diff = strtotime($result['add']) - strtotime($result['now']);
|
||||
|
||||
$this->assertCount(1, $result);
|
||||
$this->assertArrayHasKey('now', $result[0]);
|
||||
$this->assertArrayHasKey('add', $result[0]);
|
||||
|
||||
$now = strtotime($result[0]['now']);
|
||||
$add = strtotime($result[0]['add']);
|
||||
$diff = $add - $now;
|
||||
|
||||
$this->assertSQLEquals(10, $diff);
|
||||
self::assertEquals($expectedValue, $diff, '', $delta);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-1014
|
||||
* @group DDC-2938
|
||||
*
|
||||
* @dataProvider dateAddSubProvider
|
||||
*/
|
||||
public function testDateSub()
|
||||
public function testDateSub(string $unit, int $amount, int $expectedValue, int $delta = 0) : void
|
||||
{
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'day') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
$query = sprintf(
|
||||
'SELECT CURRENT_TIMESTAMP() as now, DATE_SUB(CURRENT_TIMESTAMP(), %d, \'%s\') AS sub FROM %s m',
|
||||
$amount,
|
||||
$unit,
|
||||
CompanyManager::class
|
||||
);
|
||||
|
||||
$this->assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
$result = $this->_em->createQuery($query)
|
||||
->setMaxResults(1)
|
||||
->getSingleResult(AbstractQuery::HYDRATE_ARRAY);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'month') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertArrayHasKey('now', $result);
|
||||
self::assertArrayHasKey('sub', $result);
|
||||
|
||||
$this->assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
$diff = strtotime($result['now']) - strtotime($result['sub']);
|
||||
|
||||
self::assertEquals($expectedValue, $diff, '', $delta);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-2938
|
||||
*/
|
||||
public function testDateSubTime(): void
|
||||
public function dateAddSubProvider() : array
|
||||
{
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
$secondsInDay = 86400;
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'minute') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'hour') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
return [
|
||||
'year' => ['year', 1, 365 * $secondsInDay, 3 * $secondsInDay],
|
||||
'month' => ['month', 1, 30 * $secondsInDay, 2 * $secondsInDay],
|
||||
'week' => ['week', 1, 7 * $secondsInDay, $secondsInDay],
|
||||
'hour' => ['hour', 1, 3600],
|
||||
'minute' => ['minute', 1, 60],
|
||||
'second' => ['second', 10, 10],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user