[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
{
/**
* 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)
{
if ($this->hasGroupSequenceProvider()) {
if ($this->hasGroupSequence()) {
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) {
$metadata->setGroupSequence($constraint->groups);
} elseif ($constraint instanceof GroupSequenceProvider) {
$metadata->setGroupSequenceProvider($constraint->active);
$metadata->setGroupSequenceProvider(true);
} elseif ($constraint instanceof Constraint) {
$metadata->addConstraint($constraint);
}

View File

@ -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) {

View File

@ -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">

View File

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

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 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());
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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',