View source
<?php
namespace Symfony\Component\Validator\Tests\Constraints;
use Symfony\Component\Validator\Constraints\Composite;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\NotNull;
use Symfony\Component\Validator\Constraints\Valid;
class ConcreteComposite extends Composite {
public $constraints;
protected function getCompositeOption() {
return 'constraints';
}
public function getDefaultOption() {
return 'constraints';
}
}
class CompositeTest extends \PHPUnit_Framework_TestCase {
public function testMergeNestedGroupsIfNoExplicitParentGroup() {
$constraint = new ConcreteComposite(array(
new NotNull(array(
'groups' => 'Default',
)),
new NotBlank(array(
'groups' => array(
'Default',
'Strict',
),
)),
));
$this
->assertEquals(array(
'Default',
'Strict',
), $constraint->groups);
$this
->assertEquals(array(
'Default',
), $constraint->constraints[0]->groups);
$this
->assertEquals(array(
'Default',
'Strict',
), $constraint->constraints[1]->groups);
}
public function testSetImplicitNestedGroupsIfExplicitParentGroup() {
$constraint = new ConcreteComposite(array(
'constraints' => array(
new NotNull(),
new NotBlank(),
),
'groups' => array(
'Default',
'Strict',
),
));
$this
->assertEquals(array(
'Default',
'Strict',
), $constraint->groups);
$this
->assertEquals(array(
'Default',
'Strict',
), $constraint->constraints[0]->groups);
$this
->assertEquals(array(
'Default',
'Strict',
), $constraint->constraints[1]->groups);
}
public function testExplicitNestedGroupsMustBeSubsetOfExplicitParentGroups() {
$constraint = new ConcreteComposite(array(
'constraints' => array(
new NotNull(array(
'groups' => 'Default',
)),
new NotBlank(array(
'groups' => 'Strict',
)),
),
'groups' => array(
'Default',
'Strict',
),
));
$this
->assertEquals(array(
'Default',
'Strict',
), $constraint->groups);
$this
->assertEquals(array(
'Default',
), $constraint->constraints[0]->groups);
$this
->assertEquals(array(
'Strict',
), $constraint->constraints[1]->groups);
}
public function testFailIfExplicitNestedGroupsNotSubsetOfExplicitParentGroups() {
new ConcreteComposite(array(
'constraints' => array(
new NotNull(array(
'groups' => array(
'Default',
'Foobar',
),
)),
),
'groups' => array(
'Default',
'Strict',
),
));
}
public function testImplicitGroupNamesAreForwarded() {
$constraint = new ConcreteComposite(array(
new NotNull(array(
'groups' => 'Default',
)),
new NotBlank(array(
'groups' => 'Strict',
)),
));
$constraint
->addImplicitGroupName('ImplicitGroup');
$this
->assertEquals(array(
'Default',
'Strict',
'ImplicitGroup',
), $constraint->groups);
$this
->assertEquals(array(
'Default',
'ImplicitGroup',
), $constraint->constraints[0]->groups);
$this
->assertEquals(array(
'Strict',
), $constraint->constraints[1]->groups);
}
public function testSingleConstraintsAccepted() {
$nestedConstraint = new NotNull();
$constraint = new ConcreteComposite($nestedConstraint);
$this
->assertEquals(array(
$nestedConstraint,
), $constraint->constraints);
}
public function testFailIfNoConstraint() {
new ConcreteComposite(array(
new NotNull(array(
'groups' => 'Default',
)),
'NotBlank',
));
}
public function testValidCantBeNested() {
new ConcreteComposite(array(
new Valid(),
));
}
}