Skip to content

Commit

Permalink
Merge branch '3.4' into 4.4
Browse files Browse the repository at this point in the history
* 3.4:
  updated VERSION for 3.4.40
  update CONTRIBUTORS for 3.4.40
  updated CHANGELOG for 3.4.40
  [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB)
  add tests for the ConstraintViolationBuilder class
  Improve dirname usage
  [PhpUnitBridge] Use COMPOSER_BINARY env var if available
  [YAML] escape DEL(\x7f)
  fix compatibility with phpunit 9
  [Cache] skip APCu in chains when the backend is disabled
  [Form] apply automatically step=1 for datetime-local input
  • Loading branch information
nicolas-grekas committed Apr 28, 2020
2 parents 5a0337d + 0d4d26b commit b829f1a
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions Tests/Violation/ConstraintViolationBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,98 @@

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\Tests\Fixtures\ConstraintA;
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());
}

/**
* @group legacy
* @expectedDeprecation Not using a string as the error code in Symfony\Component\Validator\Violation\ConstraintViolationBuilder::setCode() is deprecated since Symfony 4.4. A type-hint will be added in 5.0.
Expand Down

0 comments on commit b829f1a

Please sign in to comment.