[Validator] GroupSequenceProvider tests improved, configuration changed
This commit is contained in:
parent
c3b04a3336
commit
e0d28284fc
@ -18,14 +18,5 @@ namespace Symfony\Component\Validator\Constraints;
|
||||
*/
|
||||
class GroupSequenceProvider
|
||||
{
|
||||
/**
|
||||
* True if the group sequence provider should be used
|
||||
* @var boolean
|
||||
*/
|
||||
public $active;
|
||||
|
||||
public function __construct(array $options)
|
||||
{
|
||||
$this->active = (bool)$options['value'];
|
||||
}
|
||||
}
|
||||
|
@ -307,7 +307,7 @@ class ClassMetadata extends ElementMetadata
|
||||
*/
|
||||
public function setGroupSequenceProvider($active)
|
||||
{
|
||||
if ($this->hasGroupSequenceProvider()) {
|
||||
if ($this->hasGroupSequence()) {
|
||||
throw new GroupDefinitionException('Defining a group sequence provider is not allowed with a static group sequence');
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ class AnnotationLoader implements LoaderInterface
|
||||
if ($constraint instanceof GroupSequence) {
|
||||
$metadata->setGroupSequence($constraint->groups);
|
||||
} elseif ($constraint instanceof GroupSequenceProvider) {
|
||||
$metadata->setGroupSequenceProvider($constraint->active);
|
||||
$metadata->setGroupSequenceProvider(true);
|
||||
} elseif ($constraint instanceof Constraint) {
|
||||
$metadata->addConstraint($constraint);
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ class XmlFileLoader extends FileLoader
|
||||
$xml = $this->classes[$metadata->getClassName()];
|
||||
|
||||
foreach ($xml->{'group-sequence-provider'} as $provider) {
|
||||
$metadata->setGroupSequenceProvider((bool)$provider['active']);
|
||||
$metadata->setGroupSequenceProvider(true);
|
||||
}
|
||||
|
||||
foreach ($this->parseConstraints($xml->constraint) as $constraint) {
|
||||
|
@ -66,7 +66,6 @@
|
||||
Defines the name of the group sequence provider for a class.
|
||||
]]></xsd:documentation>
|
||||
</xsd:annotation>
|
||||
<xsd:attribute name="active" type="xsd:boolean" use="required" />
|
||||
</xsd:complexType>
|
||||
|
||||
<xsd:complexType name="property">
|
||||
|
@ -11,9 +11,8 @@ use Symfony\Component\Validator\GroupSequenceProviderInterface;
|
||||
/**
|
||||
* @Symfony\Tests\Component\Validator\Fixtures\ConstraintA
|
||||
* @Assert\GroupSequence({"Foo", "Entity"})
|
||||
* @Assert\GroupSequenceProvider("Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProvider")
|
||||
*/
|
||||
class Entity extends EntityParent implements EntityInterface, GroupSequenceProviderInterface
|
||||
class Entity extends EntityParent implements EntityInterface
|
||||
{
|
||||
/**
|
||||
* @Assert\NotNull
|
||||
@ -51,14 +50,4 @@ class Entity extends EntityParent implements EntityInterface, GroupSequenceProvi
|
||||
{
|
||||
return $this->lastName;
|
||||
}
|
||||
|
||||
public function setGroups($groups)
|
||||
{
|
||||
$this->groups = $groups;
|
||||
}
|
||||
|
||||
public function getValidationGroups()
|
||||
{
|
||||
return $this->groups;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Tests\Component\Validator\Fixtures;
|
||||
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
use Symfony\Component\Validator\GroupSequenceProviderInterface;
|
||||
|
||||
/**
|
||||
* @Assert\GroupSequenceProvider
|
||||
*/
|
||||
class GroupSequenceProviderEntity implements GroupSequenceProviderInterface
|
||||
{
|
||||
public $firstName;
|
||||
public $lastName;
|
||||
|
||||
protected $groups = array();
|
||||
|
||||
public function setGroups($groups)
|
||||
{
|
||||
$this->groups = $groups;
|
||||
}
|
||||
|
||||
public function getValidationGroups()
|
||||
{
|
||||
return $this->groups;
|
||||
}
|
||||
}
|
@ -30,6 +30,7 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity';
|
||||
const PARENTCLASS = 'Symfony\Tests\Component\Validator\Fixtures\EntityParent';
|
||||
const PROVIDERCLASS = 'Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity';
|
||||
|
||||
protected $metadata;
|
||||
|
||||
@ -192,7 +193,29 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
|
||||
$this->metadata->setGroupSequence(array('Foo', $this->metadata->getDefaultGroup(), Constraint::DEFAULT_GROUP));
|
||||
}
|
||||
|
||||
public function testGroupSequenceProvider()
|
||||
public function testGroupSequenceFailesIfGroupSequenceProviderIsSet()
|
||||
{
|
||||
$metadata = new ClassMetadata(self::PROVIDERCLASS);
|
||||
$metadata->setGroupSequenceProvider(true);
|
||||
|
||||
try {
|
||||
$metadata->setGroupSequence(array('GroupSequenceProviderEntity', 'Foo'));
|
||||
$this->fail();
|
||||
} catch(GroupDefinitionException $e) {}
|
||||
}
|
||||
|
||||
public function testGroupSequenceProviderFailesIfGroupSequenceIsSet()
|
||||
{
|
||||
$metadata = new ClassMetadata(self::PROVIDERCLASS);
|
||||
$metadata->setGroupSequence(array('GroupSequenceProviderEntity', 'Foo'));
|
||||
|
||||
try {
|
||||
$metadata->setGroupSequenceProvider(true);
|
||||
$this->fail();
|
||||
} catch(GroupDefinitionException $e) {}
|
||||
}
|
||||
|
||||
public function testGroupSequenceProviderFailesIfDomainClassIsInvalid()
|
||||
{
|
||||
$metadata = new ClassMetadata('stdClass');
|
||||
|
||||
@ -200,8 +223,12 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
|
||||
$metadata->setGroupSequenceProvider(true);
|
||||
$this->fail();
|
||||
} catch(GroupDefinitionException $e) {}
|
||||
}
|
||||
|
||||
$this->metadata->setGroupSequenceProvider(true);
|
||||
$this->assertTrue($this->metadata->hasGroupSequenceProvider());
|
||||
public function testGroupSequenceProvider()
|
||||
{
|
||||
$metadata = new ClassMetadata(self::PROVIDERCLASS);
|
||||
$metadata->setGroupSequenceProvider(true);
|
||||
$this->assertTrue($metadata->hasGroupSequenceProvider());
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,6 @@ class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
'choices' => array('A', 'B'),
|
||||
)));
|
||||
$expected->addGetterConstraint('lastName', new NotNull());
|
||||
$expected->setGroupSequenceProvider(true);
|
||||
|
||||
// load reflection class so that the comparison passes
|
||||
$expected->getReflectionClass();
|
||||
@ -138,7 +137,6 @@ class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
'choices' => array('A', 'B'),
|
||||
)));
|
||||
$expected->addGetterConstraint('lastName', new NotNull());
|
||||
$expected->setGroupSequenceProvider(true);
|
||||
|
||||
// load reflection class so that the comparison passes
|
||||
$expected->getReflectionClass();
|
||||
@ -146,4 +144,17 @@ class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals($expected, $metadata);
|
||||
}
|
||||
|
||||
public function testLoadGroupSequenceProviderAnnotation()
|
||||
{
|
||||
$loader = new AnnotationLoader(new AnnotationReader());
|
||||
|
||||
$metadata = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity');
|
||||
$loader->loadClassMetadata($metadata);
|
||||
|
||||
$expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity');
|
||||
$expected->setGroupSequenceProvider(true);
|
||||
$expected->getReflectionClass();
|
||||
|
||||
$this->assertEquals($expected, $metadata);
|
||||
}
|
||||
}
|
||||
|
@ -67,6 +67,18 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
'choices' => array('A', 'B'),
|
||||
)));
|
||||
$expected->addGetterConstraint('lastName', new NotNull());
|
||||
|
||||
$this->assertEquals($expected, $metadata);
|
||||
}
|
||||
|
||||
public function testLoadGroupSequenceProvider()
|
||||
{
|
||||
$loader = new XmlFileLoader(__DIR__.'/constraint-mapping.xml');
|
||||
$metadata = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity');
|
||||
|
||||
$loader->loadClassMetadata($metadata);
|
||||
|
||||
$expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity');
|
||||
$expected->setGroupSequenceProvider(true);
|
||||
|
||||
$this->assertEquals($expected, $metadata);
|
||||
|
@ -85,6 +85,18 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
'choices' => array('A', 'B'),
|
||||
)));
|
||||
$expected->addGetterConstraint('lastName', new NotNull());
|
||||
|
||||
$this->assertEquals($expected, $metadata);
|
||||
}
|
||||
|
||||
public function testLoadGroupSequenceProvider()
|
||||
{
|
||||
$loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml');
|
||||
$metadata = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity');
|
||||
|
||||
$loader->loadClassMetadata($metadata);
|
||||
|
||||
$expected = new ClassMetadata('Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity');
|
||||
$expected->setGroupSequenceProvider(true);
|
||||
|
||||
$this->assertEquals($expected, $metadata);
|
||||
|
@ -8,9 +8,6 @@
|
||||
|
||||
<class name="Symfony\Tests\Component\Validator\Fixtures\Entity">
|
||||
|
||||
<!-- GROUP SEQUENCE PROVIDER -->
|
||||
<group-sequence-provider active="true" />
|
||||
|
||||
<!-- CLASS CONSTRAINTS -->
|
||||
|
||||
<!-- Custom constraint -->
|
||||
@ -80,4 +77,11 @@
|
||||
<constraint name="NotNull" />
|
||||
</getter>
|
||||
</class>
|
||||
|
||||
<class name="Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity">
|
||||
|
||||
<!-- GROUP SEQUENCE PROVIDER -->
|
||||
<group-sequence-provider />
|
||||
|
||||
</class>
|
||||
</constraint-mapping>
|
||||
|
@ -2,7 +2,6 @@ namespaces:
|
||||
custom: Symfony\Tests\Component\Validator\Fixtures\
|
||||
|
||||
Symfony\Tests\Component\Validator\Fixtures\Entity:
|
||||
group_sequence_provider: true
|
||||
constraints:
|
||||
# Custom constraint
|
||||
- Symfony\Tests\Component\Validator\Fixtures\ConstraintA: ~
|
||||
@ -40,3 +39,6 @@ Symfony\Tests\Component\Validator\Fixtures\Entity:
|
||||
getters:
|
||||
lastName:
|
||||
- NotNull: ~
|
||||
|
||||
Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity:
|
||||
group_sequence_provider: true
|
||||
|
@ -17,6 +17,7 @@ require_once __DIR__.'/Fixtures/FailingConstraintValidator.php';
|
||||
require_once __DIR__.'/Fixtures/FakeClassMetadataFactory.php';
|
||||
|
||||
use Symfony\Tests\Component\Validator\Fixtures\Entity;
|
||||
use Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity;
|
||||
use Symfony\Tests\Component\Validator\Fixtures\FakeClassMetadataFactory;
|
||||
use Symfony\Tests\Component\Validator\Fixtures\FailingConstraint;
|
||||
use Symfony\Component\Validator\Validator;
|
||||
@ -124,7 +125,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testValidate_groupSequenceProvider()
|
||||
{
|
||||
$entity = new Entity();
|
||||
$entity = new GroupSequenceProviderEntity();
|
||||
$metadata = new ClassMetadata(get_class($entity));
|
||||
$metadata->addPropertyConstraint('firstName', new FailingConstraint(array(
|
||||
'groups' => 'First',
|
||||
|
Reference in New Issue
Block a user