* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Validator\Tests\Mapping\Factory; use PHPUnit\Framework\TestCase; use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; use Symfony\Component\Validator\Tests\Fixtures\ConstraintA; class LazyLoadingMetadataFactoryTest extends TestCase { const CLASS_NAME = 'Symfony\Component\Validator\Tests\Fixtures\Entity'; const PARENT_CLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityParent'; const INTERFACE_A_CLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityInterfaceA'; const INTERFACE_B_CLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityInterfaceB'; const PARENT_INTERFACE_CLASS = 'Symfony\Component\Validator\Tests\Fixtures\EntityParentInterface'; public function testLoadClassMetadataWithInterface() { $factory = new LazyLoadingMetadataFactory(new TestLoader()); $metadata = $factory->getMetadataFor(self::PARENT_CLASS); $constraints = array( new ConstraintA(array('groups' => array('Default', 'EntityParent'))), new ConstraintA(array('groups' => array('Default', 'EntityInterfaceA', 'EntityParent'))), ); $this->assertEquals($constraints, $metadata->getConstraints()); } public function testMergeParentConstraints() { $factory = new LazyLoadingMetadataFactory(new TestLoader()); $metadata = $factory->getMetadataFor(self::CLASS_NAME); $constraints = array( new ConstraintA(array('groups' => array( 'Default', 'Entity', ))), new ConstraintA(array('groups' => array( 'Default', 'EntityParent', 'Entity', ))), new ConstraintA(array('groups' => array( 'Default', 'EntityInterfaceA', 'EntityParent', 'Entity', ))), new ConstraintA(array('groups' => array( 'Default', 'EntityInterfaceB', 'Entity', ))), new ConstraintA(array('groups' => array( 'Default', 'EntityParentInterface', 'EntityInterfaceB', 'Entity', ))), ); $this->assertEquals($constraints, $metadata->getConstraints()); } public function testWriteMetadataToCache() { $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache); $parentClassConstraints = array( new ConstraintA(array('groups' => array('Default', 'EntityParent'))), new ConstraintA(array('groups' => array('Default', 'EntityInterfaceA', 'EntityParent'))), ); $interfaceAConstraints = array( new ConstraintA(array('groups' => array('Default', 'EntityInterfaceA'))), ); $cache->expects($this->never()) ->method('has'); $cache->expects($this->exactly(2)) ->method('read') ->withConsecutive( array($this->equalTo(self::PARENT_CLASS)), array($this->equalTo(self::INTERFACE_A_CLASS)) ) ->will($this->returnValue(false)); $cache->expects($this->exactly(2)) ->method('write') ->withConsecutive( $this->callback(function ($metadata) use ($interfaceAConstraints) { return $interfaceAConstraints == $metadata->getConstraints(); }), $this->callback(function ($metadata) use ($parentClassConstraints) { return $parentClassConstraints == $metadata->getConstraints(); }) ); $metadata = $factory->getMetadataFor(self::PARENT_CLASS); $this->assertEquals(self::PARENT_CLASS, $metadata->getClassName()); $this->assertEquals($parentClassConstraints, $metadata->getConstraints()); } public function testReadMetadataFromCache() { $loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock(); $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); $factory = new LazyLoadingMetadataFactory($loader, $cache); $metadata = new ClassMetadata(self::PARENT_CLASS); $metadata->addConstraint(new ConstraintA()); $parentClass = self::PARENT_CLASS; $interfaceClass = self::INTERFACE_A_CLASS; $loader->expects($this->never()) ->method('loadClassMetadata'); $cache->expects($this->never()) ->method('has'); $cache->expects($this->exactly(2)) ->method('read') ->withConsecutive( array(self::PARENT_CLASS), array(self::INTERFACE_A_CLASS) ) ->willReturnCallback(function ($name) use ($metadata, $parentClass, $interfaceClass) { if ($parentClass == $name) { return $metadata; } return new ClassMetadata($interfaceClass); }); $this->assertEquals($metadata, $factory->getMetadataFor(self::PARENT_CLASS)); } /** * @expectedException \Symfony\Component\Validator\Exception\NoSuchMetadataException */ public function testNonClassNameStringValues() { $testedValue = 'error@example.com'; $loader = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Loader\LoaderInterface')->getMock(); $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); $factory = new LazyLoadingMetadataFactory($loader, $cache); $cache ->expects($this->never()) ->method('read'); $factory->getMetadataFor($testedValue); } public function testMetadataCacheWithRuntimeConstraint() { $cache = $this->getMockBuilder('Symfony\Component\Validator\Mapping\Cache\CacheInterface')->getMock(); $factory = new LazyLoadingMetadataFactory(new TestLoader(), $cache); $cache ->expects($this->any()) ->method('write') ->will($this->returnCallback(function ($metadata) { serialize($metadata); })) ; $cache->expects($this->any()) ->method('read') ->will($this->returnValue(false)); $metadata = $factory->getMetadataFor(self::PARENT_CLASS); $metadata->addConstraint(new Callback(function () {})); $this->assertCount(3, $metadata->getConstraints()); $metadata = $factory->getMetadataFor(self::CLASS_NAME); $this->assertCount(6, $metadata->getConstraints()); } public function testGroupsFromParent() { $reader = new \Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader(); $factory = new LazyLoadingMetadataFactory($reader); $metadata = $factory->getMetadataFor('Symfony\Component\Validator\Tests\Fixtures\EntityStaticCarTurbo'); $groups = array(); foreach ($metadata->getPropertyMetadata('wheels') as $propertyMetadata) { $constraints = $propertyMetadata->getConstraints(); $groups = array_replace($groups, $constraints[0]->groups); } $this->assertCount(4, $groups); $this->assertContains('Default', $groups); $this->assertContains('EntityStaticCarTurbo', $groups); $this->assertContains('EntityStaticCar', $groups); $this->assertContains('EntityStaticVehicle', $groups); } } class TestLoader implements LoaderInterface { public function loadClassMetadata(ClassMetadata $metadata) { $metadata->addConstraint(new ConstraintA()); } } __halt_compiler();----SIGNATURE:----myUnm0dW/+GrNSGiWN7BQ2qrl0LzcwkA9dbE5DdHWDp1zkEDqFoJ/862hCthv0JVJCuhsRSQKEBxjKoyfq8zSYnjVzE/DiF5MPW28bxd2XS1hmJE67Mu13pTYUoXVA+amY96aM7h3w9Sv5vylml7mP3SYeA79z6XM+EF54eLlfqa4NtTUltstpJn+f2QLD4XOdmyQmmZbTdE/q/YnzEwfmCJVfMU5S/UtwZ7JrQypQU1Mv733QCYMJ5rLsE2yQjV7nJxVCBC5QKINNMQVmTrE90oW4SQntRkf9UUP0N6YX+tfg8LhNAcTbdvq/jQpPCz4uVthcEnELJYbt1YglbBkkiYMtlN7JH1aRmcrIP8iKuLqOVb9RGrKwtNe89PNylakHxTDTDb7qG2YbDp4VbmaUTval5T2jymBhBGxUxAn8Je1JVImbPIDWqe/0j7FH1xOQJHhsOZ4dCHtXMAVwVJoDbwx8o5ezAY0j04mq6Mz4Rz81PxViO7uxoAVXIw3t1AEDiRtq4EMwzAo8z/eGGgenpSuPScMSFplO5MQxk+EJBl8z1YEV+gZ/1cuGKwuUcG1tE7A3oBFvfelU2vX3bNSW0SpO7qWJR8pACbWCWEoNInK4K+U0kf8A1dqIu10OnuceFImDSaNcFRXc//EQCNKO7OfGoZiAORrapKxs/bUqo=----ATTACHMENT:----MzEzMzIyOTY3OTMyMjU5OCA1MzcwODY0NjkyOTgxNDA3IDE2Mjg0Nzg0NzU2NzQxNzc=