[BUGFIX] Properly validate DateTimeImmutable objects 58/57058/2
authorMathias Brodala <mbrodala@pagemachine.de>
Fri, 25 May 2018 13:10:21 +0000 (15:10 +0200)
committerMathias Brodala <mbrodala@pagemachine.de>
Wed, 6 Jun 2018 13:34:53 +0000 (15:34 +0200)
Change-Id: I29159e835d362e3f0e06c2145e84c1119df152cf
Resolves: #85083
Releases: master, 8.7
Reviewed-on: https://review.typo3.org/57058
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de>
Tested-by: Mathias Brodala <mbrodala@pagemachine.de>
typo3/sysext/extbase/Classes/Validation/Validator/DateTimeValidator.php
typo3/sysext/extbase/Tests/Unit/Validation/Validator/DateTimeValidatorTest.php [new file with mode: 0644]

index 5847164..3b5194a 100644 (file)
@@ -15,7 +15,7 @@ namespace TYPO3\CMS\Extbase\Validation\Validator;
  */
 
 /**
  */
 
 /**
- * Validator for DateTime objects.
+ * Validator for DateTime/DateTimeImmutable objects.
  *
  * @api
  */
  *
  * @api
  */
@@ -30,7 +30,7 @@ class DateTimeValidator extends AbstractValidator
     public function isValid($value)
     {
         $this->result->clear();
     public function isValid($value)
     {
         $this->result->clear();
-        if ($value instanceof \DateTime) {
+        if ($value instanceof \DateTimeInterface) {
             return;
         }
         $this->addError(
             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 (file)
index 0000000..d1a14c4
--- /dev/null
@@ -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());
+    }
+}