8000 [Validator] Added extensive test coverage for the constraint validato… · symfony/symfony@7504448 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7504448

Browse files
committed
[Validator] Added extensive test coverage for the constraint validators for the different APIs
1 parent 8e461af commit 7504448

File tree

151 files changed

+4042
-1643
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

151 files changed

+4042
-1643
lines changed

src/Symfony/Component/Validator/Constraints/AllValidator.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,7 @@ public function validate($value, Constraint $constraint)
4444
$validator = $context->getValidator()->inContext($context);
4545

4646
foreach ($value as $key => $element) {
47-
foreach ($constraint->constraints as $constr) {
48-
$validator->atPath('['.$key.']')->validate($element, $constr, $group);
49-
}
47+
$validator->atPath('['.$key.']')->validate($element, $constraint->constraints, $group);
5048
}
5149
}
5250
}

src/Symfony/Component/Validator/Constraints/CollectionValidator.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,20 @@ public function validate($value, Constraint $constraint)
5353
$validator = $context->getValidator()->inContext($context);
5454

5555
foreach ($constraint->fields as $field => $fieldConstraint) {
56-
if (
57-
// bug fix issue #2779
58-
(is_array($value) && array_key_exists($field, $value)) ||
59-
($value instanceof \ArrayAccess && $value->offsetExists($field))
60-
) {
61-
foreach ($fieldConstraint->constraints as $constr) {
62-
$validator->atPath('['.$field.']')->validate($value[$field], $constr, $group);
56+
// bug fix issue #2779
57+
$existsInArray = is_array($value) && array_key_exists($field, $value);
58+
$existsInArrayAccess = $value instanceof \ArrayAccess && $value->offsetExists($field);
59+
60+
if ($existsInArray || $existsInArrayAccess) {
61+
if (count($fieldConstraint->constraints) > 0) {
62+
$validator->atPath('['.$field.']')
63+
->validate($value[$field], $fieldConstraint->constraints, $group);
6364
}
6465
} elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
6566
$context->buildViolation($constraint->missingFieldsMessage)
6667
->atPath('['.$field.']')
6768
->setParameter('{{ field }}', $field)
69+
->setInvalidValue(null)
6870
->addViolation();
6971
}
7072
}
@@ -75,6 +77,7 @@ public function validate($value, Constraint $constraint)
7577
$context->buildViolation($constraint->extraFieldsMessage)
7678
->atPath('['.$field.']')
7779
->setParameter('{{ field }}', $field)
80+
->setInvalidValue($fieldValue)
7881
->addViolation();
7982
}
8083
}

src/Symfony/Component/Validator/Constraints/CountValidator.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function validate($value, Constraint $constraint)
3939
$this->context->buildViolation($constraint->exactMessage)
4040
->setParameter('{{ count }}', $count)
4141
->setParameter('{{ limit }}', $constraint->min)
42-
->setValue($value)
42+
->setInvalidValue($value)
4343
->setPlural((int) $constraint->min)
4444
->addViolation();
4545

@@ -50,7 +50,7 @@ public function validate($value, Constraint $constraint)
5050
$this->context->buildViolation($constraint->maxMessage)
5151
->setParameter('{{ count }}', $count)
5252
->setParameter('{{ limit }}', $constraint->max)
53-
->setValue($value)
53+
->setInvalidValue($value)
5454
->setPlural((int) $constraint->max)
5555
->addViolation();
5656

@@ -61,7 +61,7 @@ public function validate($value, Constraint $constraint)
6161
$this->context->buildViolation($constraint->minMessage)
6262
->setParameter('{{ count }}', $count)
6363
->setParameter('{{ limit }}', $constraint->min)
64-
->setValue($value)
64+
->setInvalidValue($value)
6565
->setPlural((int) $constraint->min)
6666
->addViolation();
6767
}

src/Symfony/Component/Validator/Constraints/LegacyAllValidator.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ public function validate($value, Constraint $constraint)
4343
$group = $context->getGroup();
4444

4545
foreach ($value as $key => $element) {
46-
foreach ($constraint->constraints as $constr) {
47-
$context->validateValue($element, $constr, '['.$key.']', $group);
48-
}
46+
$context->validateValue($element, $constraint->constraints, '['.$key.']', $group);
4947
}
5048
}
5149
}

src/Symfony/Component/Validator/Constraints/LegacyChoiceValidator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ public function validate($value, Constraint $constraint)
7070
$count = count($value);
7171

7272
if ($constraint->min !== null && $count < $constraint->min) {
73-
$this->context->addViolation($constraint->minMessage, array('{{ limit }}' => $constraint->min), null, (int) $constraint->min);
73+
$this->context->addViolation($constraint->minMessage, array('{{ limit }}' => $constraint->min), $value, (int) $constraint->min);
7474

7575
return;
7676
}
7777

7878
if ($constraint->max !== null && $count > $constraint->max) {
79-
$this->context->addViolation($constraint->maxMessage, array('{{ limit }}' => $constraint->max), null, (int) $constraint->max);
79+
$this->context->addViolation($constraint->maxMessage, array('{{ limit }}' => $constraint->max), $value, (int) $constraint->max);
8080

8181
return;
8282
}

src/Symfony/Component/Validator/Constraints/LegacyCollectionValidator.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ public function validate($value, Constraint $constraint)
5252
$group = $context->getGroup();
5353

5454
foreach ($constraint->fields as $field => $fieldConstraint) {
55-
if (
56-
// bug fix issue #2779
57-
(is_array($value) && array_key_exists($field, $value)) ||
58-
($value instanceof \ArrayAccess && $value->offsetExists($field))
59-
) {
60-
foreach ($fieldConstraint->constraints as $constr) {
61-
$context->validateValue($value[$field], $constr, '['.$field.']', $group);
55+
// bug fix issue #2779
56+
$existsInArray = is_array($value) && array_key_exists($field, $value);
57+
$existsInArrayAccess = $value instanceof \ArrayAccess && $value->offsetExists($field);
58+
59+
if ($existsInArray || $existsInArrayAccess) {
60+
if (count($fieldConstraint->constraints) > 0) {
61+
$context->validateValue($value[$field], $fieldConstraint->constraints, '['.$field.']', $group);
6262
}
6363
} elseif (!$fieldConstraint instanceof Optional && !$constraint->allowMissingFields) {
6464
$context->addViolationAt('['.$field.']', $constraint->missingFieldsMessage, array(

src/Symfony/Component/Validator/Constraints/LengthValidator.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public function validate($value, Constraint $constraint)
5151
$this->context->buildViolation($constraint->exactMessage)
5252
->setParameter('{{ value }}', $stringValue)
5353
->setParameter('{{ limit }}', $constraint->min)
54-
->setValue($value)
54+
->setInvalidValue($value)
5555
->setPlural((int) $constraint->min)
5656
->addViolation();
5757

@@ -62,7 +62,7 @@ public function validate($value, Constraint $constraint)
6262
$this->context->buildViolation($constraint->maxMessage)
6363
->setParameter('{{ value }}', $stringValue)
6464
->setParameter('{{ limit }}', $constraint->max)
65-
->setValue($value)
65+
->setInvalidValue($value)
6666
->setPlural((int) $constraint->max)
6767
->addViolation();
6868

@@ -73,7 +73,7 @@ public function validate($value, Constraint $constraint)
7373
$this->context->buildViolation($constraint->minMessage)
7474
->setParameter('{{ value }}', $stringValue)
7575
->setParameter('{{ limit }}', $constraint->min)
76-
->setValue($value)
76+
->setInvalidValue($value)
7777
->setPlural((int) $constraint->min)
7878
->addViolation();
7979
}

src/Symfony/Component/Validator/Tests/Constraints/AbstractComparisonValidatorTestCase.php

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -32,30 +32,15 @@ public function __toString()
3232
/**
3333
* @author Daniel Holmes <daniel@danielholmes.org>
3434
*/
35-
abstract class AbstractComparisonValidatorTestCase extends \PHPUnit_Framework_TestCase
35+
abstract class AbstractComparisonValidatorTestCase extends AbstractConstraintValidatorTest
3636
{
37-
private $validator;
38-
private $context;
39-
40-
protected function setUp()
41-
{
42-
$this->validator = $this->createValidator();
43-
$this->context = $this->getMockBuilder('Symfony\Component\Validator\ExecutionContext')
44-
->disableOriginalConstructor()
45-
->getMock();
46-
$this->validator->initialize($this->context);
47-
}
48-
4937
/**
50-
* @return AbstractComparisonValidator
38+
* @expectedException \Symfony\Component\Validator\Exception\ConstraintDefinitionException
5139
*/
52-
abstract protected function createValidator();
53-
5440
public function testThrowsConstraintExceptionIfNoValueOrProperty()
5541
{
56-
$this->setExpectedException('Symfony\Component\Validator\Exception\ConstraintDefinitionException');
57-
5842
$comparison = $this->createConstraint(array());
43+
5944
$this->validator->validate('some value', $comparison);
6045
}
6146

@@ -66,16 +51,11 @@ public function testThrowsConstraintExceptionIfNoValueOrProperty()
6651
*/
6752
public function testValidComparisonToValue($dirtyValue, $comparisonValue)
6853
{
69-
$this->context->expects($this->never())
70-
->method('addViolation');
71-
7254
$constraint = $this->createConstraint(array('value' => $comparisonValue));
7355

74-
$this->context->expects($this->any())
75-
->method('getPropertyPath')
76-
->will($this->returnValue('property1'));
77-
7856
$this->validator->validate($dirtyValue, $constraint);
57+
58+
$this->assertNoViolation();
7959
}
8060

8161
/**
@@ -95,19 +75,13 @@ public function testInvalidComparisonToValue($dirtyValue, $comparedValue, $compa
9575
$constraint = $this->createConstraint(array('value' => $comparedValue));
9676
$constraint->message = 'Constraint Message';
9777

98-
$this->context->expects($this->any())
99-
->method('getPropertyPath')
100-
->will($this->returnValue('property1'));
101-
102-
$this->context->expects($this->once())
103-
->method('addViolation')
104-
->with('Constraint Message', array(
105-
'{{ value }}' => $comparedValueString,
106-
'{{ compared_value }}' => $comparedValueString,
107-
'{{ compared_value_type }}' => $comparedValueType
108-
));
109-
11078
$this->validator->validate($dirtyValue, $constraint);
79+
80+
$this->assertViolation('Constraint Message', array(
81+
'{{ value }}' => $comparedValueString,
82+
'{{ compared_value }}' => $comparedValueString,
83+
'{{ compared_value_type }}' => $comparedValueType
84+
));
11185
}
11286

11387
/**

0 commit comments

Comments
 (0)
0