123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Stdlib\Test\Unit\DateTime;
- use Magento\Framework\App\Config\ScopeConfigInterface;
- use Magento\Framework\App\ScopeResolverInterface;
- use Magento\Framework\Locale\ResolverInterface;
- use Magento\Framework\Stdlib\DateTime;
- use Magento\Framework\Stdlib\DateTime\Timezone;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
- /**
- * Test for @see Timezone
- */
- class TimezoneTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var string|null
- */
- private $defaultTimeZone;
- /**
- * @var ObjectManager
- */
- private $objectManager;
- /**
- * @var ScopeResolverInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $scopeResolver;
- /**
- * @var ResolverInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $localeResolver;
- /**
- * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $scopeConfig;
- /**
- * @inheritdoc
- */
- protected function setUp()
- {
- $this->defaultTimeZone = date_default_timezone_get();
- date_default_timezone_set('UTC');
- $this->objectManager = new ObjectManager($this);
- $this->scopeResolver = $this->getMockBuilder(ScopeResolverInterface::class)->getMock();
- $this->localeResolver = $this->getMockBuilder(ResolverInterface::class)->getMock();
- $this->scopeConfig = $this->getMockBuilder(ScopeConfigInterface::class)->getMock();
- }
- /**
- * @inheritdoc
- */
- protected function tearDown()
- {
- date_default_timezone_set($this->defaultTimeZone);
- }
- /**
- * Test date parsing with different includeTime options
- *
- * @param string $date
- * @param string $locale
- * @param bool $includeTime
- * @param int $expectedTimestamp
- * @dataProvider dateIncludeTimeDataProvider
- */
- public function testDateIncludeTime($date, $locale, $includeTime, $expectedTimestamp)
- {
- $this->scopeConfig->method('getValue')->willReturn('America/Chicago');
- /** @var Timezone $timezone */
- $timezone = $this->objectManager->getObject(Timezone::class, ['scopeConfig' => $this->scopeConfig]);
- /** @var \DateTime $dateTime */
- $dateTime = $timezone->date($date, $locale, true, $includeTime);
- $this->assertEquals($expectedTimestamp, $dateTime->getTimestamp());
- }
- /**
- * DataProvider for testDateIncludeTime
- * @return array
- */
- public function dateIncludeTimeDataProvider()
- {
- return [
- 'Parse d/m/y date without time' => [
- '19/05/2017', // date
- 'ar_KW', // locale
- false, // include time
- 1495170000 // expected timestamp
- ],
- 'Parse d/m/y date with time' => [
- '19/05/2017 00:01 صباحاً', // datetime (00:01 am)
- 'ar_KW', // locale
- true, // include time
- 1495170060 // expected timestamp
- ],
- 'Parse m/d/y date without time' => [
- '05/19/2017', // date
- 'en_US', // locale
- false, // include time
- 1495170000 // expected timestamp
- ],
- 'Parse m/d/y date with time' => [
- '05/19/2017 00:01 am', // datetime
- 'en_US', // locale
- true, // include time
- 1495170060 // expected timestamp
- ],
- ];
- }
- /**
- * @param string $date
- * @param string $configuredTimezone
- * @param string $expectedResult
- * @dataProvider getConvertConfigTimeToUtcFixtures
- */
- public function testConvertConfigTimeToUtc($date, $configuredTimezone, $expectedResult)
- {
- $this->scopeConfigWillReturnConfiguredTimezone($configuredTimezone);
- $this->assertEquals($expectedResult, $this->getTimezone()->convertConfigTimeToUtc($date));
- }
- /**
- * Data provider for testConvertConfigTimeToUtc
- * @return array
- */
- public function getConvertConfigTimeToUtcFixtures()
- {
- return [
- 'string' => [
- '2016-10-10 10:00:00',
- 'UTC',
- '2016-10-10 10:00:00'
- ],
- 'datetime' => [
- new \DateTime('2016-10-10 10:00:00', new \DateTimeZone('UTC')),
- 'UTC',
- '2016-10-10 10:00:00'
- ],
- 'datetimeimmutable' => [
- new \DateTimeImmutable('2016-10-10 10:00:00', new \DateTimeZone('UTC')),
- 'UTC',
- '2016-10-10 10:00:00'
- ]
- ];
- }
- /**
- * Test configuration of the different timezones.
- */
- public function testDate()
- {
- $dateFixtures = $this->getDateFixtures();
- foreach ($dateFixtures as $dateFixture) {
- $expectedResult = $dateFixture[0];
- $timezone = $dateFixture[1];
- $date = $dateFixture[2];
- $this->localeResolver->method('getLocale')->willReturn('en_GB');
- $this->scopeConfigWillReturnConfiguredTimezone($timezone);
- $this->assertEquals(
- $expectedResult(),
- $this->getTimezone()->date($date, null, true),
- '',
- 1
- );
- }
- }
- /**
- * DataProvider for testDate
- * @return array
- */
- private function getDateFixtures()
- {
- return [
- 'now_datetime_utc' => [
- function () {
- return new \DateTime('now', new \DateTimeZone('UTC'));
- },
- 'UTC',
- null
- ],
- 'fixed_datetime_utc' => [
- function () {
- return new \DateTime('2017-01-01 10:00:00', new \DateTimeZone('UTC'));
- },
- 'UTC',
- new \DateTime('2017-01-01 10:00:00')
- ],
- 'now_datetime_vancouver' => [
- function () {
- return new \DateTime('now', new \DateTimeZone('America/Vancouver'));
- },
- 'America/Vancouver',
- null
- ],
- 'now_datetimeimmutable_utc' => [
- function () {
- return new \DateTimeImmutable('now', new \DateTimeZone('UTC'));
- },
- 'UTC',
- null
- ],
- 'fixed_datetimeimmutable_utc' => [
- function () {
- return new \DateTime('2017-01-01 10:00:00', new \DateTimeZone('UTC'));
- },
- 'UTC',
- new \DateTimeImmutable('2017-01-01 10:00:00')
- ],
- 'now_datetimeimmutable_vancouver' => [
- function () {
- return new \DateTimeImmutable('now', new \DateTimeZone('America/Vancouver'));
- },
- 'America/Vancouver',
- null
- ],
- ];
- }
- /**
- * @return Timezone
- */
- private function getTimezone()
- {
- return new Timezone(
- $this->scopeResolver,
- $this->localeResolver,
- $this->getMockBuilder(DateTime::class)->getMock(),
- $this->scopeConfig,
- '',
- ''
- );
- }
- /**
- * @param string $configuredTimezone
- */
- private function scopeConfigWillReturnConfiguredTimezone($configuredTimezone)
- {
- $this->scopeConfig->method('getValue')->with('', '', null)->willReturn($configuredTimezone);
- }
- }
|