diff --git a/src/Bundle/ChillPersonBundle/Tests/Validator/BirthdateValidatorTest.php b/src/Bundle/ChillPersonBundle/Tests/Validator/BirthdateValidatorTest.php deleted file mode 100644 index 57b4c2577..000000000 --- a/src/Bundle/ChillPersonBundle/Tests/Validator/BirthdateValidatorTest.php +++ /dev/null @@ -1,112 +0,0 @@ - - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -namespace Chill\PersonBundle\Tests\Validator; - -use Chill\PersonBundle\Validator\Constraints\BirthdateValidator; -use Chill\PersonBundle\Validator\Constraints\Birthdate; -use Prophecy\Argument; -use Prophecy\Prophet; - -/** - * Test the behaviour of BirthdayValidator - * - * @author Julien Fastré - */ -class BirthdateValidatorTest extends \PHPUnit\Framework\TestCase -{ - /** - * A prophecy for \Symfony\Component\Validator\Context\ExecutionContextInterface - * - * Will reveal \Symfony\Component\Validator\Context\ExecutionContextInterface - */ - private $context; - - private $prophet; - - /** - * - * @var Birthdate - */ - private $constraint; - - public function setUp() - { - $this->prophet = new Prophet; - - $constraintViolationBuilder = $this->prophet->prophesize(); - $constraintViolationBuilder->willImplement('Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface'); - - $constraintViolationBuilder->setParameter(Argument::any(), Argument::any()) - ->willReturn($constraintViolationBuilder->reveal()); - $constraintViolationBuilder->addViolation() - ->willReturn($constraintViolationBuilder->reveal()); - - $this->context = $this->prophet->prophesize(); - $this->context->willImplement('Symfony\Component\Validator\Context\ExecutionContextInterface'); - $this->context->buildViolation(Argument::type('string')) - ->willReturn($constraintViolationBuilder->reveal()); - - $this->constraint = new Birthdate(); - } - - public function testValidBirthDate() - { - - $date = new \DateTime('2015-01-01'); - - $birthdateValidator = new BirthdateValidator(); - $birthdateValidator->initialize($this->context->reveal()); - - $birthdateValidator->validate($date, $this->constraint); - - $this->context->buildViolation(Argument::any())->shouldNotHaveBeenCalled(); - } - - public function testInvalidBirthDate() - { - $date = new \DateTime('tomorrow'); - - $birthdateValidator = new BirthdateValidator(); - $birthdateValidator->initialize($this->context->reveal()); - - $birthdateValidator->validate($date, $this->constraint); - - $this->context->buildViolation(Argument::type('string'))->shouldHaveBeenCalled(); - } - - public function testInvalidBirthDateWithParameter() - { - $date = (new \DateTime('today'))->sub(new \DateInterval('P1M')); - - $birthdateValidator = new BirthdateValidator('P1Y'); - $birthdateValidator->initialize($this->context->reveal()); - - $birthdateValidator->validate($date, $this->constraint); - - $this->context->buildViolation(Argument::type('string'))->shouldHaveBeenCalled(); - } - - public function tearDown() - { - $this->prophet->checkPredictions(); - } - - -} diff --git a/src/Bundle/ChillPersonBundle/Tests/Validator/Person/BirthdateValidatorTest.php b/src/Bundle/ChillPersonBundle/Tests/Validator/Person/BirthdateValidatorTest.php new file mode 100644 index 000000000..2e7df4817 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Tests/Validator/Person/BirthdateValidatorTest.php @@ -0,0 +1,72 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +namespace Chill\PersonBundle\Tests\Validator\Person; + +use Chill\PersonBundle\Validator\Constraints\Person\BirthdateValidator; +use Chill\PersonBundle\Validator\Constraints\Person\Birthdate; +use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; +use Chill\PersonBundle\Entity\Person; + +/** + * Test the behaviour of BirthdayValidator + * + * @author Julien Fastré + */ +class BirthdateValidatorTest extends ConstraintValidatorTestCase +{ + + public function testValidateTodayInvalid() + { + $bornToday = new \DateTime('now'); + $this->validator->validate($bornToday, $this->createConstraint()); + $this->buildViolation('msg') + ->setParameter('%date%', (new \DateTime('yesterday'))->format('d-m-Y')) + ->assertRaised(); + } + + public function testValidateYesterdayValid() + { + $bornYesterday = new \DateTime('yesterday'); + $this->validator->validate($bornYesterday, $this->createConstraint()); + $this->assertNoViolation(); + } + + public function testTomorrowInvalid() + { + $bornAfter = new \DateTime('+2 days'); + $this->validator->validate($bornAfter, $this->createConstraint()); + $this->buildViolation('msg') + ->setParameter('%date%', (new \DateTime('yesterday'))->format('d-m-Y')) + ->assertRaised(); + } + + private function createConstraint() + { + return new Birthdate([ + 'message' => 'msg' + ]); + } + + + protected function createValidator() + { + return new BirthdateValidator('P1D'); + } +} diff --git a/src/Bundle/ChillPersonBundle/Validator/Constraints/Birthdate.php b/src/Bundle/ChillPersonBundle/Validator/Constraints/Person/Birthdate.php similarity index 89% rename from src/Bundle/ChillPersonBundle/Validator/Constraints/Birthdate.php rename to src/Bundle/ChillPersonBundle/Validator/Constraints/Person/Birthdate.php index d09d549fd..b8cf6d8c2 100644 --- a/src/Bundle/ChillPersonBundle/Validator/Constraints/Birthdate.php +++ b/src/Bundle/ChillPersonBundle/Validator/Constraints/Person/Birthdate.php @@ -17,14 +17,14 @@ * along with this program. If not, see . */ -namespace Chill\PersonBundle\Validator\Constraints; +namespace Chill\PersonBundle\Validator\Constraints\Person; use Symfony\Component\Validator\Constraint; /** * Create a constraint on birth date: the birthdate after today are not allowed. - * - * It is possible to add a delay before today, expressed as described in + * + * It is possible to add a delay before today, expressed as described in * interval_spec : http://php.net/manual/en/dateinterval.construct.php * (this interval_spec itself is based on ISO8601 : * https://en.wikipedia.org/wiki/ISO_8601#Durations) @@ -34,9 +34,4 @@ use Symfony\Component\Validator\Constraint; class Birthdate extends Constraint { public $message = "The birthdate must be before %date%"; - - public function validatedBy() - { - return 'birthdate_not_before'; - } } diff --git a/src/Bundle/ChillPersonBundle/Validator/Constraints/BirthdateValidator.php b/src/Bundle/ChillPersonBundle/Validator/Constraints/Person/BirthdateValidator.php similarity index 94% rename from src/Bundle/ChillPersonBundle/Validator/Constraints/BirthdateValidator.php rename to src/Bundle/ChillPersonBundle/Validator/Constraints/Person/BirthdateValidator.php index cba955ef6..5d16be230 100644 --- a/src/Bundle/ChillPersonBundle/Validator/Constraints/BirthdateValidator.php +++ b/src/Bundle/ChillPersonBundle/Validator/Constraints/Person/BirthdateValidator.php @@ -17,49 +17,49 @@ * along with this program. If not, see . */ -namespace Chill\PersonBundle\Validator\Constraints; +namespace Chill\PersonBundle\Validator\Constraints\Person; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; /** - * + * * * @author Julien Fastré */ class BirthdateValidator extends ConstraintValidator { private $interval_spec = null; - + public function __construct($interval_spec = null) { $this->interval_spec = $interval_spec; } - + public function validate($value, Constraint $constraint) { if ($value === NULL) { - + return; } - + if (!$value instanceof \DateTime) { throw new \LogicException('The input should a be a \DateTime interface,' . (is_object($value) ? get_class($value) : gettype($value))); } - + $limitDate = $this->getLimitDate(); - + if ($limitDate < $value) { $this->context->buildViolation($constraint->message) ->setParameter('%date%', $limitDate->format('d-m-Y')) ->addViolation(); } - + } - + /** - * + * * @return \DateTime */ private function getLimitDate()