671296e90ca0f5f85e41c3713f27c42fba94df9b
[yaffs-website] / vendor / symfony / validator / Tests / Mapping / Loader / YamlFileLoaderTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Validator\Tests\Mapping\Loader;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Validator\Constraints\All;
16 use Symfony\Component\Validator\Constraints\Callback;
17 use Symfony\Component\Validator\Constraints\Choice;
18 use Symfony\Component\Validator\Constraints\Collection;
19 use Symfony\Component\Validator\Constraints\NotNull;
20 use Symfony\Component\Validator\Constraints\Range;
21 use Symfony\Component\Validator\Constraints\IsTrue;
22 use Symfony\Component\Validator\Mapping\ClassMetadata;
23 use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader;
24 use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
25 use Symfony\Component\Validator\Tests\Fixtures\ConstraintB;
26
27 class YamlFileLoaderTest extends TestCase
28 {
29     public function testLoadClassMetadataReturnsFalseIfEmpty()
30     {
31         $loader = new YamlFileLoader(__DIR__.'/empty-mapping.yml');
32         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
33
34         $this->assertFalse($loader->loadClassMetadata($metadata));
35
36         $r = new \ReflectionProperty($loader, 'classes');
37         $r->setAccessible(true);
38         $this->assertSame(array(), $r->getValue($loader));
39     }
40
41     /**
42      * @dataProvider provideInvalidYamlFiles
43      * @expectedException \InvalidArgumentException
44      */
45     public function testInvalidYamlFiles($path)
46     {
47         $loader = new YamlFileLoader(__DIR__.'/'.$path);
48         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
49
50         $loader->loadClassMetadata($metadata);
51     }
52
53     public function provideInvalidYamlFiles()
54     {
55         return array(
56             array('nonvalid-mapping.yml'),
57             array('bad-format.yml'),
58         );
59     }
60
61     /**
62      * @see https://github.com/symfony/symfony/pull/12158
63      */
64     public function testDoNotModifyStateIfExceptionIsThrown()
65     {
66         $loader = new YamlFileLoader(__DIR__.'/nonvalid-mapping.yml');
67         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
68         try {
69             $loader->loadClassMetadata($metadata);
70         } catch (\InvalidArgumentException $e) {
71             // Call again. Again an exception should be thrown
72             $this->{method_exists($this, $_ = 'expectException') ? $_ : 'setExpectedException'}('\InvalidArgumentException');
73             $loader->loadClassMetadata($metadata);
74         }
75     }
76
77     public function testLoadClassMetadataReturnsTrueIfSuccessful()
78     {
79         $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml');
80         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
81
82         $this->assertTrue($loader->loadClassMetadata($metadata));
83     }
84
85     public function testLoadClassMetadataReturnsFalseIfNotSuccessful()
86     {
87         $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml');
88         $metadata = new ClassMetadata('\stdClass');
89
90         $this->assertFalse($loader->loadClassMetadata($metadata));
91     }
92
93     public function testLoadClassMetadata()
94     {
95         $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml');
96         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
97
98         $loader->loadClassMetadata($metadata);
99
100         $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\Entity');
101         $expected->setGroupSequence(array('Foo', 'Entity'));
102         $expected->addConstraint(new ConstraintA());
103         $expected->addConstraint(new ConstraintB());
104         $expected->addConstraint(new Callback('validateMe'));
105         $expected->addConstraint(new Callback('validateMeStatic'));
106         $expected->addConstraint(new Callback(array('Symfony\Component\Validator\Tests\Fixtures\CallbackClass', 'callback')));
107         $expected->addPropertyConstraint('firstName', new NotNull());
108         $expected->addPropertyConstraint('firstName', new Range(array('min' => 3)));
109         $expected->addPropertyConstraint('firstName', new Choice(array('A', 'B')));
110         $expected->addPropertyConstraint('firstName', new All(array(new NotNull(), new Range(array('min' => 3)))));
111         $expected->addPropertyConstraint('firstName', new All(array('constraints' => array(new NotNull(), new Range(array('min' => 3))))));
112         $expected->addPropertyConstraint('firstName', new Collection(array('fields' => array(
113             'foo' => array(new NotNull(), new Range(array('min' => 3))),
114             'bar' => array(new Range(array('min' => 5))),
115         ))));
116         $expected->addPropertyConstraint('firstName', new Choice(array(
117             'message' => 'Must be one of %choices%',
118             'choices' => array('A', 'B'),
119         )));
120         $expected->addGetterConstraint('lastName', new NotNull());
121         $expected->addGetterConstraint('valid', new IsTrue());
122         $expected->addGetterConstraint('permissions', new IsTrue());
123
124         $this->assertEquals($expected, $metadata);
125     }
126
127     public function testLoadGroupSequenceProvider()
128     {
129         $loader = new YamlFileLoader(__DIR__.'/constraint-mapping.yml');
130         $metadata = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity');
131
132         $loader->loadClassMetadata($metadata);
133
134         $expected = new ClassMetadata('Symfony\Component\Validator\Tests\Fixtures\GroupSequenceProviderEntity');
135         $expected->setGroupSequenceProvider(true);
136
137         $this->assertEquals($expected, $metadata);
138     }
139 }