Skip to content

Commit

Permalink
Fixed tests for Magento\Framework\Stdlib\DateTime\DateTime
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrii Beziazychnyi authored and Andrii Beziazychnyi committed Mar 30, 2020
1 parent 176ba2b commit b20f9eb
Showing 1 changed file with 41 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,33 @@
*/
namespace Magento\Framework\Stdlib\Test\Unit\DateTime;

use DateTimeImmutable;
use DateTimeInterface;
use Exception;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

/**
* Magento\Framework\Stdlib\DateTimeTest test case
* Tests for @see DateTime
*/
class DateTimeTest extends \PHPUnit\Framework\TestCase
class DateTimeTest extends TestCase
{
/**
* @var string
*/
private $testDate = '2015-04-02 21:03:00';

/**
* @param int|string|\DateTimeInterface $input
* @param int|string|DateTimeInterface $input
* @throws Exception
*
* @dataProvider dateTimeInputDataProvider
*/
public function testGmtTimestamp($input)
{
/** @var TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject $timezone */
/** @var TimezoneInterface|MockObject $timezone */
$timezone = $this->getMockBuilder(TimezoneInterface::class)->getMock();
$timezone->method('date')->willReturn(new \DateTime($this->testDate));

Expand All @@ -33,12 +40,14 @@ public function testGmtTimestamp($input)
}

/**
* @param int|string|\DateTimeInterface $input
* @param int|string|DateTimeInterface $input
* @throws Exception
*
* @dataProvider dateTimeInputDataProvider
*/
public function testTimestamp($input)
{
/** @var TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject $timezone */
/** @var TimezoneInterface|MockObject $timezone */
$timezone = $this->getMockBuilder(TimezoneInterface::class)->getMock();
$timezone->method('date')->willReturn(new \DateTime($this->testDate));

Expand All @@ -48,28 +57,50 @@ public function testTimestamp($input)

public function testGtmOffset()
{
/** @var TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject $timezone */
/** @var TimezoneInterface|MockObject $timezone */
$timezone = $this->getMockBuilder(TimezoneInterface::class)->getMock();
$timezone->method('getConfigTimezone')->willReturn('Europe/Amsterdam');

/** @var DateTime|\PHPUnit_Framework_MockObject_MockObject $dateTime */
/** @var DateTime|MockObject $dateTime */
$dateTime = $this->getMockBuilder(DateTime::class)
->setConstructorArgs([$timezone])
->setMethods(null)
->getMock();

$this->assertEquals(3600, $dateTime->getGmtOffset());
$this->assertEquals(
$this->getExpectedGtmOffset($timezone->getConfigTimezone()),
$dateTime->getGmtOffset()
);
}

/**
* Returns expected offset according to Daylight Saving Time in timezone
*
* @param string $timezoneIdentifier
* @return int
*/
private function getExpectedGtmOffset(string $timezoneIdentifier): int
{
$timeZoneToReturn = date_default_timezone_get();
date_default_timezone_set($timezoneIdentifier);
$expectedOffset = (date('I', time()) + 1) * 3600;
date_default_timezone_set($timeZoneToReturn);

return (int) $expectedOffset;
}

/**
* Data provider
*
* @return array
* @throws Exception
*/
public function dateTimeInputDataProvider()
{
return [
'string' => [$this->testDate],
'int' => [strtotime($this->testDate)],
\DateTimeInterface::class => [new \DateTimeImmutable($this->testDate)],
DateTimeInterface::class => [new DateTimeImmutable($this->testDate)],
];
}
}

0 comments on commit b20f9eb

Please sign in to comment.