. */ namespace App\Tests\Validator\Constraints\BigDecimal; use App\Validator\Constraints\BigDecimal\BigDecimalGreaterThanValidator; use App\Validator\Constraints\BigDecimal\BigDecimalPositive; use Brick\Math\BigDecimal; use Symfony\Component\Validator\ConstraintValidatorInterface; use Symfony\Component\Validator\Test\ConstraintValidatorTestCase; /** * Tests BigDecimalGreaterThanValidator via the BigDecimalPositive constraint (value > 0). */ final class BigDecimalGreaterThanValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): ConstraintValidatorInterface { return new BigDecimalGreaterThanValidator(); } public function testNullIsValid(): void { $this->validator->validate(null, new BigDecimalPositive()); $this->assertNoViolation(); } public function testPositiveIntegerIsValid(): void { $this->validator->validate(1, new BigDecimalPositive()); $this->assertNoViolation(); } public function testPositiveStringIsValid(): void { $this->validator->validate('0.01', new BigDecimalPositive()); $this->assertNoViolation(); } public function testPositiveBigDecimalIsValid(): void { $this->validator->validate(BigDecimal::of('1.5'), new BigDecimalPositive()); $this->assertNoViolation(); } public function testZeroIsInvalid(): void { $constraint = new BigDecimalPositive(); $this->validator->validate(0, $constraint); $this->buildViolation($constraint->message) ->setParameters(['{{ value }}' => '0', '{{ compared_value }}' => '0', '{{ compared_value_type }}' => 'int']) ->setCode(\Symfony\Component\Validator\Constraints\GreaterThan::TOO_LOW_ERROR) ->assertRaised(); } public function testZeroBigDecimalIsInvalid(): void { $constraint = new BigDecimalPositive(); $this->validator->validate(BigDecimal::of('0.00'), $constraint); $this->buildViolation($constraint->message) ->setParameters(['{{ value }}' => '0.00', '{{ compared_value }}' => '0', '{{ compared_value_type }}' => 'int']) ->setCode(\Symfony\Component\Validator\Constraints\GreaterThan::TOO_LOW_ERROR) ->assertRaised(); } public function testNegativeIsInvalid(): void { $constraint = new BigDecimalPositive(); $this->validator->validate(-1, $constraint); $this->buildViolation($constraint->message) ->setParameters(['{{ value }}' => '-1', '{{ compared_value }}' => '0', '{{ compared_value_type }}' => 'int']) ->setCode(\Symfony\Component\Validator\Constraints\GreaterThan::TOO_LOW_ERROR) ->assertRaised(); } }