From 92d0783fa266373c286b2459169ba56aabb31c36 Mon Sep 17 00:00:00 2001 From: Mathias Brodala <mbrodala@pagemachine.de> Date: Fri, 25 May 2018 15:10:21 +0200 Subject: [PATCH] [BUGFIX] Properly validate DateTimeImmutable objects Change-Id: I29159e835d362e3f0e06c2145e84c1119df152cf Resolves: #85083 Releases: master, 8.7 Reviewed-on: https://review.typo3.org/57054 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl> Tested-by: Wouter Wolters <typo3@wouterwolters.nl> Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de> Tested-by: Mathias Brodala <mbrodala@pagemachine.de> --- .../Validator/DateTimeValidator.php | 4 +- .../Validator/DateTimeValidatorTest.php | 80 +++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php index 5847164c95e6..3b5194a8981b 100644 --- a/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php +++ b/typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php @@ -15,7 +15,7 @@ namespace TYPO3\CMS\Extbase\Validation\Validator; */ /** - * Validator for DateTime objects. + * Validator for DateTime/DateTimeImmutable objects. * * @api */ @@ -30,7 +30,7 @@ class DateTimeValidator extends AbstractValidator public function isValid($value) { $this->result->clear(); - if ($value instanceof \DateTime) { + if ($value instanceof \DateTimeInterface) { return; } $this->addError( diff --git a/typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php new file mode 100644 index 000000000000..d1a14c40a4be --- /dev/null +++ b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php @@ -0,0 +1,80 @@ +<?php +declare(strict_types = 1); +namespace TYPO3\CMS\Extbase\Tests\Unit\Validation\Validator; + +/* * + * This script belongs to the Extbase framework. * + * * + * It is free software; you can redistribute it and/or modify it under * + * the terms of the GNU Lesser General Public License as published by the * + * Free Software Foundation, either version 3 of the License, or (at your * + * option) any later version. * + * * + * This script is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- * + * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * + * General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with the script. * + * If not, see http://www.gnu.org/licenses/lgpl.html * + * * + * The TYPO3 project - inspiring people to share! * + * */ + +use TYPO3\CMS\Extbase\Validation\Validator\DateTimeValidator; +use TYPO3\TestingFramework\Core\Unit\UnitTestCase; + +/** + * Test case + */ +class DateTimeValidatorTest extends UnitTestCase +{ + /** + * @test + * @dataProvider dateTimeValues + */ + public function acceptsDateTimeValues($value) + { + $validator = new DateTimeValidator(); + $result = $validator->validate($value); + + $this->assertFalse($result->hasErrors()); + } + + /** + * @return array + */ + public function dateTimeValues(): array + { + return [ + \DateTime::class => [ + new \DateTime(), + ], + 'Extended ' . \DateTime::class => [ + new class extends \DateTime { + }, + ], + \DateTimeImmutable::class => [ + new \DateTimeImmutable(), + ], + 'Extended ' . \DateTimeImmutable::class => [ + new class extends \DateTimeImmutable { + }, + ], + ]; + } + + /** + * @test + */ + public function addsErrorForInvalidValue() + { + $validator = $this->getMockBuilder(DateTimeValidator::class) + ->setMethods(['translateErrorMessage']) + ->getMock(); + $result = $validator->validate(false); + + $this->assertTrue($result->hasErrors()); + } +} -- GitLab