19 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
31 protected function setUp()
33 $this->converter = new \TYPO3\CMS\Extbase\Property\TypeConverter\DateTimeConverter();
41 $this->assertEquals([
'string',
'integer',
'array'], $this->converter->getSupportedSourceTypes(),
'Source types do not match');
42 $this->assertEquals(
'DateTime', $this->converter->getSupportedTargetType(),
'Target type does not match');
43 $this->assertEquals(10, $this->converter->getPriority(),
'Priority does not match');
53 $this->assertFalse($this->converter->canConvertFrom(
'Foo',
'SomeOtherType'));
61 $this->assertTrue($this->converter->canConvertFrom(
'Foo',
'DateTime'));
69 $this->assertTrue($this->converter->canConvertFrom(
'',
'DateTime'));
77 $error = $this->converter->convertFrom(
'1980-12-13',
'DateTime');
78 $this->assertInstanceOf(\
TYPO3\CMS\
Extbase\Error\Error::class, $error);
86 $expectedResult =
'1980-12-13T20:15:07+01:23';
87 $date = $this->converter->convertFrom($expectedResult,
'DateTime');
88 $actualResult = $date->format(
'Y-m-d\\TH:i:sP');
89 $this->assertSame($expectedResult, $actualResult);
97 $expectedResult =
'1980-12-13T20:15:07+01:23';
98 $mockMappingConfiguration = $this->createMock(\
TYPO3\CMS\
Extbase\Property\PropertyMappingConfigurationInterface::class);
99 $mockMappingConfiguration
100 ->expects($this->atLeastOnce())
101 ->method(
'getConfigurationValue')
102 ->with(\
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::class, \
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT)
103 ->will($this->returnValue(
null));
105 $date = $this->converter->convertFrom($expectedResult,
'DateTime', [], $mockMappingConfiguration);
106 $actualResult = $date->format(\
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::DEFAULT_DATE_FORMAT);
107 $this->assertSame($expectedResult, $actualResult);
115 $date = $this->converter->convertFrom(
'',
'DateTime', [],
null);
116 $this->assertNull($date);
126 [
'1308174051',
'',
false],
127 [
'13-12-1980',
'd.m.Y',
false],
128 [
'1308174051',
'Y-m-d',
false],
129 [
'12:13',
'H:i',
true],
130 [
'13.12.1980',
'd.m.Y',
true],
131 [
'2005-08-15T15:52:01+00:00',
null,
true],
132 [
'2005-08-15T15:52:01+00:00', \DateTime::ATOM,
true],
133 [
'1308174051',
'U',
true],
146 if ($dateFormat !==
null) {
147 $mockMappingConfiguration = $this->createMock(\
TYPO3\CMS\
Extbase\Property\PropertyMappingConfigurationInterface::class);
148 $mockMappingConfiguration
149 ->expects($this->atLeastOnce())
150 ->method(
'getConfigurationValue')
151 ->with(\
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::class, \
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT)
152 ->will($this->returnValue($dateFormat));
154 $mockMappingConfiguration =
null;
156 $date = $this->converter->convertFrom($source,
'DateTime', [], $mockMappingConfiguration);
157 if ($isValid !==
true) {
158 $this->assertInstanceOf(\
TYPO3\CMS\
Extbase\Error\Error::class, $date);
161 $this->assertInstanceOf(
'DateTime', $date);
163 if ($dateFormat ===
null) {
166 $this->assertSame($source, $date->format($dateFormat));
189 $date = $this->converter->convertFrom($source,
'DateTime', [],
null);
190 $this->assertInstanceOf(
'DateTime', $date);
191 $this->assertSame(strval($source), $date->format(
'U'));
203 $date = $this->converter->convertFrom([
'date' => $source],
'DateTime', [],
null);
204 $this->assertInstanceOf(
'DateTime', $date);
205 $this->assertSame(strval($source), $date->format(
'U'));
213 $this->assertTrue($this->converter->canConvertFrom([],
'DateTime'));
221 $error = $this->converter->convertFrom([
'date' =>
'1980-12-13'],
'DateTime');
222 $this->assertInstanceOf(\
TYPO3\CMS\
Extbase\Error\Error::class, $error);
230 $this->expectException(TypeConverterException::class);
231 $this->expectExceptionCode(1308003914);
232 $this->converter->convertFrom([
'hour' =>
'12',
'minute' =>
'30'],
'DateTime');
240 $expectedResult =
'1980-12-13T20:15:07+01:23';
241 $date = $this->converter->convertFrom([
'date' => $expectedResult],
'DateTime');
242 $actualResult = $date->format(
'Y-m-d\\TH:i:sP');
243 $this->assertSame($expectedResult, $actualResult);
253 [[
'day' =>
'13.0',
'month' =>
'10',
'year' =>
'2010']],
254 [[
'day' =>
'13',
'month' =>
'10.0',
'year' =>
'2010']],
255 [[
'day' =>
'13',
'month' =>
'10',
'year' =>
'2010.0']],
256 [[
'day' =>
'-13',
'month' =>
'10',
'year' =>
'2010']],
257 [[
'day' =>
'13',
'month' =>
'-10',
'year' =>
'2010']],
258 [[
'day' =>
'13',
'month' =>
'10',
'year' =>
'-2010']],
268 $this->expectException(TypeConverterException::class);
269 $this->expectExceptionCode(1308003914);
270 $this->converter->convertFrom($source,
'DateTime');
278 $source = [
'day' =>
'13',
'month' =>
'10',
'year' =>
'2010'];
279 $mappingConfiguration = new \TYPO3\CMS\Extbase\Property\PropertyMappingConfiguration();
280 $mappingConfiguration->setTypeConverterOption(
281 \
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::class,
282 \
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT,
286 $date = $this->converter->convertFrom($source,
'DateTime', [], $mappingConfiguration);
287 $actualResult = $date->format(
'Y-m-d');
288 $this->assertSame(
'2010-10-13', $actualResult);
297 'date' =>
'2011-06-16',
298 'dateFormat' =>
'Y-m-d',
303 $date = $this->converter->convertFrom($source,
'DateTime');
304 $this->assertSame(
'2011-06-16', $date->format(
'Y-m-d'));
305 $this->assertSame(
'12', $date->format(
'H'));
306 $this->assertSame(
'30', $date->format(
'i'));
307 $this->assertSame(
'59', $date->format(
's'));
316 'date' =>
'2011-06-16 12:30:59',
317 'dateFormat' =>
'Y-m-d H:i:s',
318 'timezone' =>
'Atlantic/Reykjavik',
320 $date = $this->converter->convertFrom($source,
'DateTime');
321 $this->assertSame(
'2011-06-16', $date->format(
'Y-m-d'));
322 $this->assertSame(
'12', $date->format(
'H'));
323 $this->assertSame(
'30', $date->format(
'i'));
324 $this->assertSame(
'59', $date->format(
's'));
325 $this->assertSame(
'Atlantic/Reykjavik', $date->getTimezone()->getName());
333 $this->expectException(TypeConverterException::class);
334 $this->expectExceptionCode(1308240974);
336 'date' =>
'2011-06-16',
337 'dateFormat' =>
'Y-m-d',
338 'timezone' =>
'Invalid/Timezone',
340 $this->converter->convertFrom($source,
'DateTime');
348 $this->expectException(TypeConverterException::class);
349 $this->expectExceptionCode(1308003914);
350 $this->converter->convertFrom([],
'DateTime', [],
null);
358 $this->assertNull($this->converter->convertFrom([
'date' =>
''],
'DateTime', [],
null));
368 [[
'date' =>
'2005-08-15T15:52:01+01:00'],
true],
369 [[
'date' =>
'1308174051',
'dateFormat' =>
''],
false],
370 [[
'date' =>
'13-12-1980',
'dateFormat' =>
'd.m.Y'],
false],
371 [[
'date' =>
'1308174051',
'dateFormat' =>
'Y-m-d'],
false],
372 [[
'date' =>
'12:13',
'dateFormat' =>
'H:i'],
true],
373 [[
'date' =>
'13.12.1980',
'dateFormat' =>
'd.m.Y'],
true],
374 [[
'date' =>
'2005-08-15T15:52:01+00:00',
'dateFormat' =>
''],
true],
375 [[
'date' =>
'2005-08-15T15:52:01+00:00',
'dateFormat' => \DateTime::ATOM],
true],
376 [[
'date' =>
'1308174051',
'dateFormat' =>
'U'],
true],
377 [[
'date' => 1308174051,
'dateFormat' =>
'U'],
true],
389 $dateFormat = isset($source[
'dateFormat']) && $source[
'dateFormat'] !==
'' ? $source[
'dateFormat'] :
null;
390 if ($dateFormat !==
null) {
391 $mockMappingConfiguration = $this->createMock(\
TYPO3\CMS\
Extbase\Property\PropertyMappingConfigurationInterface::class);
392 $mockMappingConfiguration
393 ->expects($this->atLeastOnce())
394 ->method(
'getConfigurationValue')
395 ->with(\
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::class, \
TYPO3\CMS\
Extbase\Property\TypeConverter\DateTimeConverter::CONFIGURATION_DATE_FORMAT)
396 ->will($this->returnValue($dateFormat));
398 $mockMappingConfiguration =
null;
400 $date = $this->converter->convertFrom($source,
'DateTime', [], $mockMappingConfiguration);
402 if ($isValid !==
true) {
403 $this->assertInstanceOf(\
TYPO3\CMS\
Extbase\Error\Error::class, $date);
407 $this->assertInstanceOf(
'DateTime', $date);
408 if ($dateFormat ===
null) {
411 $dateAsString = isset($source[
'date']) ? strval($source[
'date']) :
'';
412 $this->assertSame($dateAsString, $date->format($dateFormat));
420 $className = DateTimeSubFixture::class;
421 $date = $this->converter->convertFrom(
'2005-08-15T15:52:01+00:00', $className);
423 $this->assertInstanceOf($className, $date);
424 $this->assertSame(
'Bar', $date->foo());