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