Skip to content

Commit

Permalink
Merge pull request #30 from igordrnobrega/master
Browse files Browse the repository at this point in the history
Fixed datetime input validation
  • Loading branch information
klaussilveira authored Aug 29, 2017
2 parents 6bc3da5 + 2f2e2b0 commit 19be9de
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 1 deletion.
19 changes: 19 additions & 0 deletions src/Constraint/DateTime.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

declare(strict_types=1);

namespace Linio\Component\Input\Constraint;

class DateTime extends Constraint
{
public function validate($content): bool
{
if (!is_string($content)) {
return false;
}

$date = date_parse($content);

return $date['error_count'] ? false : true;
}
}
3 changes: 2 additions & 1 deletion src/Node/DateTimeNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@

namespace Linio\Component\Input\Node;

use Linio\Component\Input\Constraint\DateTime;
use Linio\Component\Input\Transformer\DateTimeTransformer;

class DateTimeNode extends BaseNode
{
public function __construct()
{
$this->type = 'datetime';
$this->addConstraint(new DateTime());
$this->transformer = new DateTimeTransformer();
}
}
66 changes: 66 additions & 0 deletions tests/InputHandlerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace Linio\Component\Input;

use Linio\Component\Input\Constraint\Range;
use Linio\Component\Input\Instantiator\InstantiatorInterface;
use Linio\Component\Input\Instantiator\PropertyInstantiator;
use PHPUnit\Framework\TestCase;
Expand Down Expand Up @@ -440,4 +441,69 @@ public function testIsHandlingInputWithRecursiveHandler()
$fanC->setBirthday(new \DateTime('2000-01-03'));
$this->assertEquals([$fanA, $fanB, $fanC], $child->fans);
}

public function testOverride()
{
$input = [
'price' => 'igor',
];

$inputHandler = new TestConstraintOverrideType();
$inputHandler->bind($input);
$this->assertFalse($inputHandler->isValid());
}

public function invalidDateProvider(): \Generator
{
yield [''];

yield ['Invalid%20date'];

yield [123];

yield [false];

yield [true];

yield [[]];

yield [null];
}

/**
* @dataProvider invalidDateProvider
*
* @param mixed $datetime
*/
public function testDatetimeInvalidDatetimeInput($datetime)
{
$input = [
'date' => $datetime,
];

$inputHandler = new TestDatetimeNotValidatingDate();
$inputHandler->bind($input);
$this->assertFalse($inputHandler->isValid());
}
}

class TestConstraintOverrideType extends InputHandler
{
public function define()
{
$this->add('price', 'int', [
'required' => true,
'constraints' => [new Range(0)],
]);
}
}

class TestDatetimeNotValidatingDate extends InputHandler
{
public function define()
{
$this->add('date', 'datetime', [
'required' => true,
]);
}
}

0 comments on commit 19be9de

Please sign in to comment.