|
11 | 11 |
|
12 | 12 | namespace Symfony\Component\Validator\Tests;
|
13 | 13 |
|
| 14 | +use Symfony\Component\Validator\Constraints\Callback; |
| 15 | +use Symfony\Component\Validator\ExecutionContextInterface; |
14 | 16 | use Symfony\Component\Validator\Tests\Fixtures\FakeMetadataFactory;
|
15 | 17 | use Symfony\Component\Validator\Constraints\Valid;
|
16 | 18 | use Symfony\Component\Validator\Tests\Fixtures\Reference;
|
@@ -561,4 +563,50 @@ public function testValidateCascadedPropertyRequiresObjectOrArray()
|
561 | 563 |
|
562 | 564 | $this->visitor->validate($entity, 'Default', '');
|
563 | 565 | }
|
| 566 | + |
| 567 | + public function testInitializeObjectsOnFirstValidation() |
| 568 | + { |
| 569 | + $test = $this; |
| 570 | + $entity = new Entity(); |
| 571 | + $entity->initialized = false; |
| 572 | + |
| 573 | + // prepare initializers that set "initialized" to true |
| 574 | + $initializer1 = $this->getMock('Symfony\\Component\\Validator\\ObjectInitializerInterface'); |
| 575 | + $initializer2 = $this->getMock('Symfony\\Component\\Validator\\ObjectInitializerInterface'); |
| 576 | + |
| 577 | + $initializer1->expects($this->once()) |
| 578 | + ->method('initialize') |
| 579 | + ->with($entity) |
| 580 | + ->will($this->returnCallback(function ($object) { |
| 581 | + $object->initialized = true; |
| 582 | + })); |
| 583 | + |
| 584 | + $initializer2->expects($this->once()) |
| 585 | + ->method('initialize') |
| 586 | + ->with($entity); |
| 587 | + |
| 588 | + $this->visitor = new ValidationVisitor('Root', $this->metadataFactory, new ConstraintValidatorFactory(), new DefaultTranslator(), null, array( |
| 589 | + $initializer1, |
| 590 | + $initializer2 |
| 591 | + )); |
| 592 | + |
| 593 | + // prepare constraint which |
| 594 | + // * checks that "initialized" is set to true |
| 595 | + // * validates the object again |
| 596 | + $callback = function ($object, ExecutionContextInterface $context) use ($test) { |
| 597 | + $test->assertTrue($object->initialized); |
| 598 | + |
| 599 | + // validate again in same group |
| 600 | + $context->validate($object); |
| 601 | + |
| 602 | + // validate again in other group |
| 603 | + $context->validate($object, '', 'SomeGroup'); |
| 604 | + }; |
| 605 | + |
| 606 | + $this->metadata->addConstraint(new Callback(array($callback))); |
| 607 | + |
| 608 | + $this->visitor->validate($entity, 'Default', ''); |
| 609 | + |
| 610 | + $this->assertTrue($entity->initialized); |
| 611 | + } |
564 | 612 | }
|
0 commit comments