From 0f85ba030b8725642ed0fdef804e969d88fcd7e5 Mon Sep 17 00:00:00 2001 From: Alexander Schranz Date: Thu, 27 Jan 2022 15:49:15 +0100 Subject: [PATCH] [Validator] Fix minRatio and maxRatio when getting rounded --- .../Validator/Constraints/ImageValidator.php | 8 +++--- .../Tests/Constraints/Fixtures/test_16by9.gif | Bin 0 -> 102 bytes .../Tests/Constraints/ImageValidatorTest.php | 23 ++++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_16by9.gif diff --git a/src/Symfony/Component/Validator/Constraints/ImageValidator.php b/src/Symfony/Component/Validator/Constraints/ImageValidator.php index aa087bdc6f4e3..f199f1d177d30 100644 --- a/src/Symfony/Component/Validator/Constraints/ImageValidator.php +++ b/src/Symfony/Component/Validator/Constraints/ImageValidator.php @@ -169,10 +169,10 @@ public function validate($value, Constraint $constraint) throw new ConstraintDefinitionException(sprintf('"%s" is not a valid minimum ratio.', $constraint->minRatio)); } - if ($ratio < $constraint->minRatio) { + if ($ratio < round($constraint->minRatio, 2)) { $this->context->buildViolation($constraint->minRatioMessage) ->setParameter('{{ ratio }}', $ratio) - ->setParameter('{{ min_ratio }}', $constraint->minRatio) + ->setParameter('{{ min_ratio }}', round($constraint->minRatio, 2)) ->setCode(Image::RATIO_TOO_SMALL_ERROR) ->addViolation(); } @@ -183,10 +183,10 @@ public function validate($value, Constraint $constraint) throw new ConstraintDefinitionException(sprintf('"%s" is not a valid maximum ratio.', $constraint->maxRatio)); } - if ($ratio > $constraint->maxRatio) { + if ($ratio > round($constraint->maxRatio, 2)) { $this->context->buildViolation($constraint->maxRatioMessage) ->setParameter('{{ ratio }}', $ratio) - ->setParameter('{{ max_ratio }}', $constraint->maxRatio) + ->setParameter('{{ max_ratio }}', round($constraint->maxRatio, 2)) ->setCode(Image::RATIO_TOO_BIG_ERROR) ->addViolation(); } diff --git a/src/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_16by9.gif b/src/Symfony/Component/Validator/Tests/Constraints/Fixtures/test_16by9.gif new file mode 100644 index 0000000000000000000000000000000000000000..dab14ec1a0224c3b8fd56e247f03a2dc55eaa3d8 GIT binary patch literal 102 zcmZ?wbhEHb6kyB&gM%`%*{=-HPACL x1wjVIe}c|Msfi`2DGKG8B^e6tp1uJLIv{-@!x)&jTKZR>e#^gj&JimageLandscape = __DIR__.'/Fixtures/test_landscape.gif'; $this->imagePortrait = __DIR__.'/Fixtures/test_portrait.gif'; $this->image4By3 = __DIR__.'/Fixtures/test_4by3.gif'; + $this->image16By9 = __DIR__.'/Fixtures/test_16by9.gif'; $this->imageCorrupted = __DIR__.'/Fixtures/test_corrupted.gif'; } @@ -304,6 +305,28 @@ public function testMaxRatioUsesTwoDecimalsOnly() $this->assertNoViolation(); } + public function testMinRatioUsesInputMoreDecimals() + { + $constraint = new Image([ + 'minRatio' => 4 / 3, + ]); + + $this->validator->validate($this->image4By3, $constraint); + + $this->assertNoViolation(); + } + + public function testMaxRatioUsesInputMoreDecimals() + { + $constraint = new Image([ + 'maxRatio' => 16 / 9, + ]); + + $this->validator->validate($this->image16By9, $constraint); + + $this->assertNoViolation(); + } + public function testInvalidMinRatio() { $this->expectException(ConstraintDefinitionException::class);