Skip to content

Commit

Permalink
[Validator] GroupSequenceProvider tests improved, configuration changed
Browse files Browse the repository at this point in the history
  • Loading branch information
sebhoerl committed Feb 2, 2012
1 parent c3b04a3 commit e0d2828
Show file tree
Hide file tree
Showing 14 changed files with 110 additions and 35 deletions.
Expand Up @@ -18,14 +18,5 @@
*/
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'];
}
}
2 changes: 1 addition & 1 deletion src/Symfony/Component/Validator/Mapping/ClassMetadata.php
Expand Up @@ -307,7 +307,7 @@ public function getReflectionClass()
*/
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');
}

Expand Down
Expand Up @@ -40,7 +40,7 @@ public function loadClassMetadata(ClassMetadata $metadata)
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);
}
Expand Down
Expand Up @@ -44,7 +44,7 @@ public function loadClassMetadata(ClassMetadata $metadata)
$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) {
Expand Down
Expand Up @@ -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">
Expand Down
13 changes: 1 addition & 12 deletions tests/Symfony/Tests/Component/Validator/Fixtures/Entity.php
Expand Up @@ -11,9 +11,8 @@
/**
* @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
Expand Down Expand Up @@ -51,14 +50,4 @@ public function getLastName()
{
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;
}
}
Expand Up @@ -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;

Expand Down Expand Up @@ -192,16 +193,42 @@ public function testGroupSequencesFailIfContainingDefault()
$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');

try {
$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());
}
}
Expand Up @@ -73,7 +73,6 @@ public function testLoadClassMetadata()
'choices' => array('A', 'B'),
)));
$expected->addGetterConstraint('lastName', new NotNull());
$expected->setGroupSequenceProvider(true);

// load reflection class so that the comparison passes
$expected->getReflectionClass();
Expand Down Expand Up @@ -138,12 +137,24 @@ public function testLoadClassMetadataAndMerge()
'choices' => array('A', 'B'),
)));
$expected->addGetterConstraint('lastName', new NotNull());
$expected->setGroupSequenceProvider(true);

// load reflection class so that the comparison passes
$expected->getReflectionClass();

$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);
}
}
Expand Up @@ -67,6 +67,18 @@ public function testLoadClassMetadata()
'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);
Expand Down
Expand Up @@ -85,6 +85,18 @@ public function testLoadClassMetadata()
'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);
Expand Down
Expand Up @@ -8,9 +8,6 @@

<class name="Symfony\Tests\Component\Validator\Fixtures\Entity">

<!-- GROUP SEQUENCE PROVIDER -->
<group-sequence-provider active="true" />

<!-- CLASS CONSTRAINTS -->

<!-- Custom constraint -->
Expand Down Expand Up @@ -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>
Expand Up @@ -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: ~
Expand Down Expand Up @@ -40,3 +39,6 @@ Symfony\Tests\Component\Validator\Fixtures\Entity:
getters:
lastName:
- NotNull: ~

Symfony\Tests\Component\Validator\Fixtures\GroupSequenceProviderEntity:
group_sequence_provider: true
3 changes: 2 additions & 1 deletion tests/Symfony/Tests/Component/Validator/ValidatorTest.php
Expand Up @@ -17,6 +17,7 @@
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;
Expand Down Expand Up @@ -124,7 +125,7 @@ public function testValidate_multipleGroups()

public function testValidate_groupSequenceProvider()
{
$entity = new Entity();
$entity = new GroupSequenceProviderEntity();
$metadata = new ClassMetadata(get_class($entity));
$metadata->addPropertyConstraint('firstName', new FailingConstraint(array(
'groups' => 'First',
Expand Down

0 comments on commit e0d2828

Please sign in to comment.