‪TYPO3CMS  10.4
DateTimeConverterTest.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
29 class ‪DateTimeConverterTest extends UnitTestCase
30 {
34  protected ‪$converter;
35 
36  protected function ‪setUp(): void
37  {
38  parent::setUp();
39  $this->converter = new ‪DateTimeConverter();
40  }
41 
45  public function ‪checkMetadata()
46  {
47  self::assertEquals(['string', 'integer', 'array'], $this->converter->getSupportedSourceTypes(), 'Source types do not match');
48  self::assertEquals('DateTime', $this->converter->getSupportedTargetType(), 'Target type does not match');
49  self::assertEquals(10, $this->converter->getPriority(), 'Priority does not match');
50  }
51 
58  {
59  self::assertFalse($this->converter->canConvertFrom('Foo', 'SomeOtherType'));
60  }
61 
66  {
67  self::assertTrue($this->converter->canConvertFrom('Foo', 'DateTime'));
68  }
69 
74  {
75  self::assertTrue($this->converter->canConvertFrom('', 'DateTime'));
76  }
77 
82  {
83  $error = $this->converter->convertFrom('1980-12-13', 'DateTime');
84  self::assertInstanceOf(Error::class, $error);
85  }
86 
91  {
92  $expectedResult = '1980-12-13T20:15:07+01:23';
93  $date = $this->converter->convertFrom($expectedResult, 'DateTime');
94  $actualResult = $date->format('Y-m-d\\TH:i:sP');
95  self::assertSame($expectedResult, $actualResult);
96  }
97 
102  {
103  $expectedResult = '1980-12-13T20:15:07+01:23';
104  $mockMappingConfiguration = $this->createMock(PropertyMappingConfigurationInterface::class);
105  $mockMappingConfiguration
106  ->expects(self::atLeastOnce())
107  ->method('getConfigurationValue')
108  ->with(DateTimeConverter::class, ‪DateTimeConverter::CONFIGURATION_DATE_FORMAT)
109  ->willReturn(null);
110 
111  $date = $this->converter->convertFrom($expectedResult, 'DateTime', [], $mockMappingConfiguration);
112  $actualResult = $date->format(‪DateTimeConverter::DEFAULT_DATE_FORMAT);
113  self::assertSame($expectedResult, $actualResult);
114  }
115 
119  public function ‪convertFromEmptyStringReturnsNull()
120  {
121  $date = $this->converter->convertFrom('', 'DateTime', [], null);
122  self::assertNull($date);
123  }
124 
129  public function ‪convertFromStringDataProvider()
130  {
131  return [
132  ['1308174051', '', false],
133  ['13-12-1980', 'd.m.Y', false],
134  ['1308174051', 'Y-m-d', false],
135  ['12:13', 'H:i', true],
136  ['13.12.1980', 'd.m.Y', true],
137  ['2005-08-15T15:52:01+00:00', null, true],
138  ['2005-08-15T15:52:01+00:00', \DateTime::ATOM, true],
139  ['1308174051', 'U', true],
140  ];
141  }
142 
150  public function ‪convertFromStringTests($source, $dateFormat, $isValid)
151  {
152  if ($dateFormat !== null) {
153  $mockMappingConfiguration = $this->createMock(PropertyMappingConfigurationInterface::class);
154  $mockMappingConfiguration
155  ->expects(self::atLeastOnce())
156  ->method('getConfigurationValue')
157  ->with(DateTimeConverter::class, ‪DateTimeConverter::CONFIGURATION_DATE_FORMAT)
158  ->willReturn($dateFormat);
159  } else {
160  $mockMappingConfiguration = null;
161  }
162  $date = $this->converter->convertFrom($source, 'DateTime', [], $mockMappingConfiguration);
163  if ($isValid !== true) {
164  self::assertInstanceOf(Error::class, $date);
165  return;
166  }
167  self::assertInstanceOf('DateTime', $date);
168 
169  if ($dateFormat === null) {
171  }
172  self::assertSame($source, $date->format($dateFormat));
173  }
174 
181  {
182  return [
183  ['1308174051'],
184  [1308174051],
185  ];
186  }
187 
194  {
195  $date = $this->converter->convertFrom($source, 'DateTime', [], null);
196  self::assertInstanceOf('DateTime', $date);
197  self::assertSame((string)$source, $date->format('U'));
198  }
199 
208  {
209  $date = $this->converter->convertFrom(['date' => $source], 'DateTime', [], null);
210  self::assertInstanceOf('DateTime', $date);
211  self::assertSame((string)$source, $date->format('U'));
212  }
213 
218  {
219  self::assertTrue($this->converter->canConvertFrom([], 'DateTime'));
220  }
221 
226  {
227  $error = $this->converter->convertFrom(['date' => '1980-12-13'], 'DateTime');
228  self::assertInstanceOf(Error::class, $error);
229  }
230 
235  {
236  $this->expectException(TypeConverterException::class);
237  $this->expectExceptionCode(1308003914);
238  $this->converter->convertFrom(['hour' => '12', 'minute' => '30'], 'DateTime');
239  }
240 
245  {
246  $expectedResult = '1980-12-13T20:15:07+01:23';
247  $date = $this->converter->convertFrom(['date' => $expectedResult], 'DateTime');
248  $actualResult = $date->format('Y-m-d\\TH:i:sP');
249  self::assertSame($expectedResult, $actualResult);
250  }
251 
257  {
258  return [
259  [['day' => '13.0', 'month' => '10', 'year' => '2010']],
260  [['day' => '13', 'month' => '10.0', 'year' => '2010']],
261  [['day' => '13', 'month' => '10', 'year' => '2010.0']],
262  [['day' => '-13', 'month' => '10', 'year' => '2010']],
263  [['day' => '13', 'month' => '-10', 'year' => '2010']],
264  [['day' => '13', 'month' => '10', 'year' => '-2010']],
265  ];
266  }
267 
273  {
274  $this->expectException(TypeConverterException::class);
275  $this->expectExceptionCode(1308003914);
276  $this->converter->convertFrom($source, 'DateTime');
277  }
278 
283  {
284  $source = ['day' => '13', 'month' => '10', 'year' => '2010'];
285  $mappingConfiguration = new PropertyMappingConfiguration();
286  $mappingConfiguration->setTypeConverterOption(
287  DateTimeConverter::class,
289  'Y-m-d'
290  );
291 
292  $date = $this->converter->convertFrom($source, 'DateTime', [], $mappingConfiguration);
293  $actualResult = $date->format('Y-m-d');
294  self::assertSame('2010-10-13', $actualResult);
295  }
296 
300  public function ‪convertFromAllowsToOverrideTheTime()
301  {
302  $source = [
303  'date' => '2011-06-16',
304  'dateFormat' => 'Y-m-d',
305  'hour' => '12',
306  'minute' => '30',
307  'second' => '59',
308  ];
309  $date = $this->converter->convertFrom($source, 'DateTime');
310  self::assertSame('2011-06-16', $date->format('Y-m-d'));
311  self::assertSame('12', $date->format('H'));
312  self::assertSame('30', $date->format('i'));
313  self::assertSame('59', $date->format('s'));
314  }
315 
320  {
321  $source = [
322  'date' => '2011-06-16 12:30:59',
323  'dateFormat' => 'Y-m-d H:i:s',
324  'timezone' => 'Atlantic/Reykjavik',
325  ];
326  $date = $this->converter->convertFrom($source, 'DateTime');
327  self::assertSame('2011-06-16', $date->format('Y-m-d'));
328  self::assertSame('12', $date->format('H'));
329  self::assertSame('30', $date->format('i'));
330  self::assertSame('59', $date->format('s'));
331  self::assertSame('Atlantic/Reykjavik', $date->getTimezone()->getName());
332  }
333 
338  {
339  $this->expectException(TypeConverterException::class);
340  $this->expectExceptionCode(1308240974);
341  $source = [
342  'date' => '2011-06-16',
343  'dateFormat' => 'Y-m-d',
344  'timezone' => 'Invalid/Timezone',
345  ];
346  $this->converter->convertFrom($source, 'DateTime');
347  }
348 
353  {
354  $this->expectException(TypeConverterException::class);
355  $this->expectExceptionCode(1308003914);
356  $this->converter->convertFrom([], 'DateTime', [], null);
357  }
358 
363  {
364  self::assertNull($this->converter->convertFrom(['date' => ''], 'DateTime', [], null));
365  }
366 
371  public function ‪convertFromArrayDataProvider()
372  {
373  return [
374  [['date' => '2005-08-15T15:52:01+01:00'], true, '2005-08-15T15:52:01+01:00'],
375  [['date' => '1308174051', 'dateFormat' => ''], false, null],
376  [['date' => '13-12-1980', 'dateFormat' => 'd.m.Y'], false, null],
377  [['date' => '1308174051', 'dateFormat' => 'Y-m-d'], false, null],
378  [['date' => '12:13', 'dateFormat' => 'H:i'], true, null],
379  [['date' => '13.12.1980', 'dateFormat' => 'd.m.Y'], true, null],
380  [['date' => '2005-08-15T15:52:01+00:00', 'dateFormat' => ''], true, '2005-08-15T15:52:01+00:00'],
381  [['date' => '2005-08-15T15:52:01+00:00', 'dateFormat' => \DateTime::ATOM], true, '2005-08-15T15:52:01+00:00'],
382  [['date' => '1308174051', 'dateFormat' => 'U'], true, '2011-06-15T21:40:51+00:00'],
383  [['date' => 1308174051, 'dateFormat' => 'U'], true, '2011-06-15T21:40:51+00:00'],
384  [['date' => -1308174051, 'dateFormat' => 'U'], true, '1928-07-19T02:19:09+00:00'],
385  ];
386  }
387 
395  public function ‪convertFromArrayTests(array $source, $isValid, ?string $expectedResult)
396  {
397  $dateFormat = isset($source['dateFormat']) && $source['dateFormat'] !== '' ? $source['dateFormat'] : null;
398  if ($dateFormat !== null) {
399  $mockMappingConfiguration = $this->createMock(PropertyMappingConfigurationInterface::class);
400  $mockMappingConfiguration
401  ->expects(self::atLeastOnce())
402  ->method('getConfigurationValue')
403  ->with(DateTimeConverter::class, ‪DateTimeConverter::CONFIGURATION_DATE_FORMAT)
404  ->willReturn($dateFormat);
405  } else {
406  $mockMappingConfiguration = null;
407  }
408  $date = $this->converter->convertFrom($source, 'DateTime', [], $mockMappingConfiguration);
409 
410  if ($isValid !== true) {
411  self::assertInstanceOf(Error::class, $date);
412  return;
413  }
414 
415  self::assertInstanceOf('DateTime', $date);
416  if ($dateFormat === null) {
418  }
419  $dateAsString = isset($source['date']) ? (string)$source['date'] : '';
420  self::assertSame($dateAsString, $date->format($dateFormat));
421  if ($expectedResult !== null) {
422  self::assertSame($expectedResult, $date->format('c'));
423  }
424  }
425 
430  {
431  $className = DateTimeSubFixture::class;
432  $date = $this->converter->convertFrom('2005-08-15T15:52:01+00:00', $className);
433 
434  self::assertInstanceOf($className, $date);
435  self::assertSame('Bar', $date->foo());
436  }
437 }
‪TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter\DEFAULT_DATE_FORMAT
‪const DEFAULT_DATE_FORMAT
Definition: DateTimeConverter.php:76
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromReturnsErrorIfGivenArrayCantBeConverted
‪convertFromReturnsErrorIfGivenArrayCantBeConverted()
Definition: DateTimeConverterTest.php:224
‪TYPO3\CMS\Extbase\Property\Exception\TypeConverterException
Definition: TypeConverterException.php:26
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromAllowsToOverrideTheTimezone
‪convertFromAllowsToOverrideTheTimezone()
Definition: DateTimeConverterTest.php:318
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromIntegerOrDigitStringInArrayWithoutConfigurationTests
‪convertFromIntegerOrDigitStringInArrayWithoutConfigurationTests($source)
Definition: DateTimeConverterTest.php:206
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromArrayDataProvider
‪array convertFromArrayDataProvider()
Definition: DateTimeConverterTest.php:370
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromReturnsErrorIfGivenStringCantBeConverted
‪convertFromReturnsErrorIfGivenStringCantBeConverted()
Definition: DateTimeConverterTest.php:80
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter
Definition: ArrayConverterTest.php:16
‪TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter
Definition: DateTimeConverter.php:64
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\checkMetadata
‪checkMetadata()
Definition: DateTimeConverterTest.php:44
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromUsesDefaultDateFormatIfItIsNotConfigured
‪convertFromUsesDefaultDateFormatIfItIsNotConfigured()
Definition: DateTimeConverterTest.php:100
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\invalidDatePartKeyValuesDataProvider
‪array invalidDatePartKeyValuesDataProvider()
Definition: DateTimeConverterTest.php:255
‪TYPO3\CMS\Extbase\Property\PropertyMappingConfigurationInterface
Definition: PropertyMappingConfigurationInterface.php:22
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromProperlyConvertsArrayWithDefaultDateFormat
‪convertFromProperlyConvertsArrayWithDefaultDateFormat()
Definition: DateTimeConverterTest.php:243
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest
Definition: DateTimeConverterTest.php:30
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromArrayReturnsNullForEmptyDate
‪convertFromArrayReturnsNullForEmptyDate()
Definition: DateTimeConverterTest.php:361
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\canConvertFromReturnsFalseIfTargetTypeIsNotDateTime
‪canConvertFromReturnsFalseIfTargetTypeIsNotDateTime()
Definition: DateTimeConverterTest.php:56
‪TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter\CONFIGURATION_DATE_FORMAT
‪const CONFIGURATION_DATE_FORMAT
Definition: DateTimeConverter.php:68
‪TYPO3\CMS\Extbase\Error\Error
Definition: Error.php:25
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromArrayTests
‪convertFromArrayTests(array $source, $isValid, ?string $expectedResult)
Definition: DateTimeConverterTest.php:394
‪TYPO3\CMS\Extbase\Property\PropertyMappingConfiguration
Definition: PropertyMappingConfiguration.php:22
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromStringTests
‪convertFromStringTests($source, $dateFormat, $isValid)
Definition: DateTimeConverterTest.php:149
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromProperlyConvertsArrayWithDateAsArray
‪convertFromProperlyConvertsArrayWithDateAsArray()
Definition: DateTimeConverterTest.php:281
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\$converter
‪TYPO3 CMS Extbase Property TypeConverter DateTimeConverter $converter
Definition: DateTimeConverterTest.php:33
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromThrowsExceptionIfGivenArrayDoesNotSpecifyTheDate
‪convertFromThrowsExceptionIfGivenArrayDoesNotSpecifyTheDate()
Definition: DateTimeConverterTest.php:233
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromIntegerOrDigitStringsWithoutConfigurationDataProvider
‪array convertFromIntegerOrDigitStringsWithoutConfigurationDataProvider()
Definition: DateTimeConverterTest.php:179
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromEmptyStringReturnsNull
‪convertFromEmptyStringReturnsNull()
Definition: DateTimeConverterTest.php:118
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\canConvertFromReturnsTrueIfSourceTypeIsAnArray
‪canConvertFromReturnsTrueIfSourceTypeIsAnArray()
Definition: DateTimeConverterTest.php:216
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromStringDataProvider
‪array convertFromStringDataProvider()
Definition: DateTimeConverterTest.php:128
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromProperlyConvertsStringWithDefaultDateFormat
‪convertFromProperlyConvertsStringWithDefaultDateFormat()
Definition: DateTimeConverterTest.php:89
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromIntegerOrDigitStringWithoutConfigurationTests
‪convertFromIntegerOrDigitStringWithoutConfigurationTests($source)
Definition: DateTimeConverterTest.php:192
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\canConvertFromReturnsTrueIfSourceTypeIsAString
‪canConvertFromReturnsTrueIfSourceTypeIsAString()
Definition: DateTimeConverterTest.php:64
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromThrowsExceptionIfDatePartKeysHaveInvalidValuesSpecified
‪convertFromThrowsExceptionIfDatePartKeysHaveInvalidValuesSpecified($source)
Definition: DateTimeConverterTest.php:271
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromAllowsToOverrideTheTime
‪convertFromAllowsToOverrideTheTime()
Definition: DateTimeConverterTest.php:299
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\canConvertFromReturnsTrueIfSourceTypeIsAnEmptyString
‪canConvertFromReturnsTrueIfSourceTypeIsAnEmptyString()
Definition: DateTimeConverterTest.php:72
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromThrowsExceptionIfSpecifiedTimezoneIsInvalid
‪convertFromThrowsExceptionIfSpecifiedTimezoneIsInvalid()
Definition: DateTimeConverterTest.php:336
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\setUp
‪setUp()
Definition: DateTimeConverterTest.php:35
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\Fixtures\DateTimeSubFixture
Definition: DateTimeSubFixture.php:22
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromArrayThrowsExceptionForEmptyArray
‪convertFromArrayThrowsExceptionForEmptyArray()
Definition: DateTimeConverterTest.php:351
‪TYPO3\CMS\Extbase\Tests\Unit\Property\TypeConverter\DateTimeConverterTest\convertFromSupportsDateTimeSubClasses
‪convertFromSupportsDateTimeSubClasses()
Definition: DateTimeConverterTest.php:428