minor #36584 [Validator] add tests for the ConstraintViolationBuilder class (xabbuh)

This PR was merged into the 3.4 branch.

Discussion
----------

[Validator] add tests for the ConstraintViolationBuilder class

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

Commits
-------

fb3aaefbf2 add tests for the ConstraintViolationBuilder class
This commit is contained in:
Fabien Potencier 2020-04-26 12:56:11 +02:00
commit 1889672a59

View File

@ -0,0 +1,106 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Validator\Tests\Violation;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Translation\IdentityTranslator;
use Symfony\Component\Validator\Constraints\Valid;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\Test\ForwardCompatTestTrait;
use Symfony\Component\Validator\Violation\ConstraintViolationBuilder;
class ConstraintViolationBuilderTest extends TestCase
{
use ForwardCompatTestTrait;
private $root;
private $violations;
private $messageTemplate = '%value% is invalid';
private $builder;
private function doSetUp()
{
$this->root = [
'data' => [
'foo' => 'bar',
'baz' => 'foobar',
],
];
$this->violations = new ConstraintViolationList();
$this->builder = new ConstraintViolationBuilder($this->violations, new Valid(), $this->messageTemplate, [], $this->root, 'data', 'foo', new IdentityTranslator());
}
public function testAddViolation()
{
$this->builder->addViolation();
$this->assertViolationEquals(new ConstraintViolation($this->messageTemplate, $this->messageTemplate, [], $this->root, 'data', 'foo', null, null, new Valid()));
}
public function testAppendPropertyPath()
{
$this->builder
->atPath('foo')
->addViolation();
$this->assertViolationEquals(new ConstraintViolation($this->messageTemplate, $this->messageTemplate, [], $this->root, 'data.foo', 'foo', null, null, new Valid()));
}
public function testAppendMultiplePropertyPaths()
{
$this->builder
->atPath('foo')
->atPath('bar')
->addViolation();
$this->assertViolationEquals(new ConstraintViolation($this->messageTemplate, $this->messageTemplate, [], $this->root, 'data.foo.bar', 'foo', null, null, new Valid()));
}
public function testCodeCanBeSet()
{
$this->builder
->setCode(5)
->addViolation();
$this->assertViolationEquals(new ConstraintViolation($this->messageTemplate, $this->messageTemplate, [], $this->root, 'data', 'foo', null, 5, new Valid()));
}
public function testCauseCanBeSet()
{
$cause = new \LogicException();
$this->builder
->setCause($cause)
->addViolation();
$this->assertViolationEquals(new ConstraintViolation($this->messageTemplate, $this->messageTemplate, [], $this->root, 'data', 'foo', null, null, new Valid(), $cause));
}
private function assertViolationEquals(ConstraintViolation $expectedViolation)
{
$this->assertCount(1, $this->violations);
$violation = $this->violations->get(0);
$this->assertSame($expectedViolation->getMessage(), $violation->getMessage());
$this->assertSame($expectedViolation->getMessageTemplate(), $violation->getMessageTemplate());
$this->assertSame($expectedViolation->getParameters(), $violation->getParameters());
$this->assertSame($expectedViolation->getPlural(), $violation->getPlural());
$this->assertSame($expectedViolation->getRoot(), $violation->getRoot());
$this->assertSame($expectedViolation->getPropertyPath(), $violation->getPropertyPath());
$this->assertSame($expectedViolation->getInvalidValue(), $violation->getInvalidValue());
$this->assertSame($expectedViolation->getCode(), $violation->getCode());
$this->assertEquals($expectedViolation->getConstraint(), $violation->getConstraint());
$this->assertSame($expectedViolation->getCause(), $violation->getCause());
}
}