Skip to content

Commit

Permalink
Add tests for invalid data.
Browse files Browse the repository at this point in the history
  • Loading branch information
markstory committed Jan 28, 2014
1 parent d4bf1d0 commit 5ee6ff1
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 13 deletions.
30 changes: 17 additions & 13 deletions src/View/Input/DateTime.php
Original file line number Diff line number Diff line change
Expand Up @@ -186,20 +186,24 @@ protected function _deconstructDate($value, $options) {
'meridian' => '',
];
}
if (is_string($value)) {
$date = new \DateTime($value);
} elseif (is_int($value)) {
$date = new \DateTime('@' . $value);
} elseif (is_array($value)) {
$date = new \DateTime();
if (isset($value['year'], $value['month'], $value['day'])) {
$date->setDate($value['year'], $value['month'], $value['day']);
}
if (isset($value['hour'], $value['minute'], $value['second'])) {
$date->setTime($value['hour'], $value['minute'], $value['second']);
try {
if (is_string($value)) {
$date = new \DateTime($value);
} elseif (is_int($value)) {
$date = new \DateTime('@' . $value);
} elseif (is_array($value)) {
$date = new \DateTime();
if (isset($value['year'], $value['month'], $value['day'])) {
$date->setDate($value['year'], $value['month'], $value['day']);
}
if (isset($value['hour'], $value['minute'], $value['second'])) {
$date->setTime($value['hour'], $value['minute'], $value['second']);
}
} else {
$date = clone $value;
}
} else {
$date = clone $value;
} catch (\Exception $e) {
$date = new \DateTime();
}

if (isset($options['minute']['interval'])) {
Expand Down
32 changes: 32 additions & 0 deletions tests/TestCase/View/Input/DateTimeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,38 @@ public function setUp() {
$this->DateTime = new DateTime($this->templates, $this->selectBox);
}

/**
* Data provider for testing various types of invalid selected values.
*
* @return array
*/
public static function invalidSelectedValuesProvider() {
$date = new \DateTime('2014-01-20 12:30:45');
return [
'string' => ['Bag of poop'],
'int' => [-1],
'array' => [[
'derp' => 'hurt'
]]
];
}

/**
* test rendering selected values.
*
* @dataProvider selectedValuesProvider
* @return void
*/
public function testRenderSelectedInvalid($selected) {
$result = $this->DateTime->render(['val' => $selected]);
$now = new \DateTime();
$format = '<option value="%s" selected="selected">%s</option>';
$this->assertContains(
sprintf($format, $now->format('Y'), $now->format('Y')),
$result
);
}

/**
* Data provider for testing various acceptable selected values.
*
Expand Down

0 comments on commit 5ee6ff1

Please sign in to comment.