[Validator] GroupSequenceProvider tests improved, configuration changed

This commit is contained in:
Sebastian Hörl 2012-01-30 23:51:45 +01:00
parent c3b04a3336
commit e0d28284fc
14 changed files with 110 additions and 35 deletions

View File

@ -18,14 +18,5 @@ namespace Symfony\Component\Validator\Constraints;
*/ */
class GroupSequenceProvider 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'];
}
} }

View File

@ -307,7 +307,7 @@ class ClassMetadata extends ElementMetadata
*/ */
public function setGroupSequenceProvider($active) 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'); throw new GroupDefinitionException('Defining a group sequence provider is not allowed with a static group sequence');
} }

View File

@ -40,7 +40,7 @@ class AnnotationLoader implements LoaderInterface
if ($constraint instanceof GroupSequence) { if ($constraint instanceof GroupSequence) {
$metadata->setGroupSequence($constraint->groups); $metadata->setGroupSequence($constraint->groups);
} elseif ($constraint instanceof GroupSequenceProvider) { } elseif ($constraint instanceof GroupSequenceProvider) {
$metadata->setGroupSequenceProvider($constraint->active); $metadata->setGroupSequenceProvider(true);
} elseif ($constraint instanceof Constraint) { } elseif ($constraint instanceof Constraint) {
$metadata->addConstraint($constraint); $metadata->addConstraint($constraint);
} }

View File

@ -44,7 +44,7 @@ class XmlFileLoader extends FileLoader
$xml = $this->classes[$metadata->getClassName()]; $xml = $this->classes[$metadata->getClassName()];
foreach ($xml->{'group-sequence-provider'} as $provider) { foreach ($xml->{'group-sequence-provider'} as $provider) {
$metadata->setGroupSequenceProvider((bool)$provider['active']); $metadata->setGroupSequenceProvider(true);
} }
foreach ($this->parseConstraints($xml->constraint) as $constraint) { foreach ($this->parseConstraints($xml->constraint) as $constraint) {

View File

@ -66,7 +66,6 @@
Defines the name of the group sequence provider for a class. Defines the name of the group sequence provider for a class.
]]></xsd:documentation> ]]></xsd:documentation>
</xsd:annotation> </xsd:annotation>
<xsd:attribute name="active" type="xsd:boolean" use="required" />
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="property"> <xsd:complexType name="property">

View File

@ -11,9 +11,8 @@ use Symfony\Component\Validator\GroupSequenceProviderInterface;
/** /**
* @Symfony\Tests\Component\Validator\Fixtures\ConstraintA * @Symfony\Tests\Component\Validator\Fixtures\ConstraintA
* @Assert\GroupSequence({"Foo", "Entity"}) * @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 * @Assert\NotNull
@ -51,14 +50,4 @@ class Entity extends EntityParent implements EntityInterface, GroupSequenceProvi
{ {
return $this->lastName; return $this->lastName;
} }
public function setGroups($groups)
{
$this->groups = $groups;
}
public function getValidationGroups()
{
return $this->groups;
}
} }

View File

@ -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;
}
}

View File

@ -30,6 +30,7 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
{ {
const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity'; const CLASSNAME = 'Symfony\Tests\Component\Validator\Fixtures\Entity';
const PARENTCLASS = 'Symfony\Tests\Component\Validator\Fixtures\EntityParent'; const PARENTCLASS = 'Symfony\Tests\Component\Validator\Fixtures\EntityParent';
const PROVIDERCLASS = 'Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity';
protected $metadata; protected $metadata;
@ -192,7 +193,29 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
$this->metadata->setGroupSequence(array('Foo', $this->metadata->getDefaultGroup(), Constraint::DEFAULT_GROUP)); $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'); $metadata = new ClassMetadata('stdClass');
@ -200,8 +223,12 @@ class ClassMetadataTest extends \PHPUnit_Framework_TestCase
$metadata->setGroupSequenceProvider(true); $metadata->setGroupSequenceProvider(true);
$this->fail(); $this->fail();
} catch(GroupDefinitionException $e) {} } catch(GroupDefinitionException $e) {}
}
$this->metadata->setGroupSequenceProvider(true); public function testGroupSequenceProvider()
$this->assertTrue($this->metadata->hasGroupSequenceProvider()); {
$metadata = new ClassMetadata(self::PROVIDERCLASS);
$metadata->setGroupSequenceProvider(true);
$this->assertTrue($metadata->hasGroupSequenceProvider());
} }
} }

View File

@ -73,7 +73,6 @@ class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
'choices' => array('A', 'B'), 'choices' => array('A', 'B'),
))); )));
$expected->addGetterConstraint('lastName', new NotNull()); $expected->addGetterConstraint('lastName', new NotNull());
$expected->setGroupSequenceProvider(true);
// load reflection class so that the comparison passes // load reflection class so that the comparison passes
$expected->getReflectionClass(); $expected->getReflectionClass();
@ -138,7 +137,6 @@ class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
'choices' => array('A', 'B'), 'choices' => array('A', 'B'),
))); )));
$expected->addGetterConstraint('lastName', new NotNull()); $expected->addGetterConstraint('lastName', new NotNull());
$expected->setGroupSequenceProvider(true);
// load reflection class so that the comparison passes // load reflection class so that the comparison passes
$expected->getReflectionClass(); $expected->getReflectionClass();
@ -146,4 +144,17 @@ class AnnotationLoaderTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expected, $metadata); $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);
}
} }

View File

@ -67,6 +67,18 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
'choices' => array('A', 'B'), 'choices' => array('A', 'B'),
))); )));
$expected->addGetterConstraint('lastName', new NotNull()); $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); $expected->setGroupSequenceProvider(true);
$this->assertEquals($expected, $metadata); $this->assertEquals($expected, $metadata);

View File

@ -85,6 +85,18 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
'choices' => array('A', 'B'), 'choices' => array('A', 'B'),
))); )));
$expected->addGetterConstraint('lastName', new NotNull()); $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); $expected->setGroupSequenceProvider(true);
$this->assertEquals($expected, $metadata); $this->assertEquals($expected, $metadata);

View File

@ -8,9 +8,6 @@
<class name="Symfony\Tests\Component\Validator\Fixtures\Entity"> <class name="Symfony\Tests\Component\Validator\Fixtures\Entity">
<!-- GROUP SEQUENCE PROVIDER -->
<group-sequence-provider active="true" />
<!-- CLASS CONSTRAINTS --> <!-- CLASS CONSTRAINTS -->
<!-- Custom constraint --> <!-- Custom constraint -->
@ -80,4 +77,11 @@
<constraint name="NotNull" /> <constraint name="NotNull" />
</getter> </getter>
</class> </class>
<class name="Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity">
<!-- GROUP SEQUENCE PROVIDER -->
<group-sequence-provider />
</class>
</constraint-mapping> </constraint-mapping>

View File

@ -2,7 +2,6 @@ namespaces:
custom: Symfony\Tests\Component\Validator\Fixtures\ custom: Symfony\Tests\Component\Validator\Fixtures\
Symfony\Tests\Component\Validator\Fixtures\Entity: Symfony\Tests\Component\Validator\Fixtures\Entity:
group_sequence_provider: true
constraints: constraints:
# Custom constraint # Custom constraint
- Symfony\Tests\Component\Validator\Fixtures\ConstraintA: ~ - Symfony\Tests\Component\Validator\Fixtures\ConstraintA: ~
@ -40,3 +39,6 @@ Symfony\Tests\Component\Validator\Fixtures\Entity:
getters: getters:
lastName: lastName:
- NotNull: ~ - NotNull: ~
Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity:
group_sequence_provider: true

View File

@ -17,6 +17,7 @@ require_once __DIR__.'/Fixtures/FailingConstraintValidator.php';
require_once __DIR__.'/Fixtures/FakeClassMetadataFactory.php'; require_once __DIR__.'/Fixtures/FakeClassMetadataFactory.php';
use Symfony\Tests\Component\Validator\Fixtures\Entity; 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\FakeClassMetadataFactory;
use Symfony\Tests\Component\Validator\Fixtures\FailingConstraint; use Symfony\Tests\Component\Validator\Fixtures\FailingConstraint;
use Symfony\Component\Validator\Validator; use Symfony\Component\Validator\Validator;
@ -124,7 +125,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
public function testValidate_groupSequenceProvider() public function testValidate_groupSequenceProvider()
{ {
$entity = new Entity(); $entity = new GroupSequenceProviderEntity();
$metadata = new ClassMetadata(get_class($entity)); $metadata = new ClassMetadata(get_class($entity));
$metadata->addPropertyConstraint('firstName', new FailingConstraint(array( $metadata->addPropertyConstraint('firstName', new FailingConstraint(array(
'groups' => 'First', 'groups' => 'First',