149 lines
4.6 KiB
PHP
149 lines
4.6 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
* This file is part of the Symfony package.
|
||
|
*
|
||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
namespace Symfony\Component\Validator\Tests\Constraints;
|
||
|
|
||
|
use PHPUnit\Framework\TestCase;
|
||
|
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';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||
|
*/
|
||
|
class CompositeTest extends 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);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
|
||
|
*/
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
|
||
|
*/
|
||
|
public function testFailIfNoConstraint()
|
||
|
{
|
||
|
new ConcreteComposite(array(
|
||
|
new NotNull(array('groups' => 'Default')),
|
||
|
'NotBlank',
|
||
|
));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
|
||
|
*/
|
||
|
public function testFailIfNoConstraintObject()
|
||
|
{
|
||
|
new ConcreteComposite(array(
|
||
|
new NotNull(array('groups' => 'Default')),
|
||
|
new \ArrayObject(),
|
||
|
));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
|
||
|
*/
|
||
|
public function testValidCantBeNested()
|
||
|
{
|
||
|
new ConcreteComposite(array(
|
||
|
new Valid(),
|
||
|
));
|
||
|
}
|
||
|
}
|