Browse Source

Fixing array to string conversion for dates. Adding tests

Jose Lorenzo Rodriguez 11 years ago
parent
commit
8fcf95d3c7
2 changed files with 38 additions and 1 deletions
  1. 3 1
      src/Validation/Validation.php
  2. 35 0
      tests/TestCase/Validation/ValidationTest.php

+ 3 - 1
src/Validation/Validation.php

@@ -987,7 +987,9 @@ class Validation
                 $value['hour'] = strtolower($value['meridian']) === 'am' ? $value['hour'] : $value['hour'] + 12;
             }
             $value += ['minute' => 0, 'second' => 0];
-            $formatted .= sprintf('%02d:%02d:%02d', $value['hour'], $value['minute'], $value['second']);
+            if (is_numeric($value['hour']) && is_numeric($value['minute']) && is_numeric($value['second'])) {
+                $formatted .= sprintf('%02d:%02d:%02d', $value['hour'], $value['minute'], $value['second']);
+            }
         }
 
         return trim($formatted);

+ 35 - 0
tests/TestCase/Validation/ValidationTest.php

@@ -1483,6 +1483,41 @@ class ValidationTest extends TestCase
     }
 
     /**
+     * test date validation when passing an array
+     *
+     * @return void
+     */
+    public function testDateArray() {
+        $date = ['year' => 2014, 'month' => 2, 'day' => 14];
+        $this->assertTrue(Validation::date($date));
+        $date = ['year' => 'farts', 'month' => 'derp', 'day' => 'farts'];
+        $this->assertFalse(Validation::date($date));
+    }
+
+    /**
+     * test datetime validation when passing an array
+     *
+     * @return void
+     */
+    public function testDateTimeArray() {
+        $date = ['year' => 2014, 'month' => 2, 'day' => 14, 'hour' => 13, 'minute' => 14, 'second' => 15];
+        $this->assertTrue(Validation::datetime($date));
+
+        $date = [
+            'year' => 2014, 'month' => 2, 'day' => 14,
+            'hour' => 1, 'minute' => 14, 'second' => 15,
+            'meridian' => 'am'
+        ];
+        $this->assertTrue(Validation::datetime($date));
+
+        $date = [
+            'year' => '2014', 'month' => '02', 'day' => '14',
+            'hour' => 'farts', 'minute' => 'farts'
+        ];
+        $this->assertFalse(Validation::datetime($date));
+    }
+
+    /**
      * Test validating dates with multiple formats
      *
      * @return void