diff --git a/src/Constraint/StringConstraint.php b/src/Constraint/StringConstraint.php index 4572046fee85c29b7ac41d38b7a294e6fb85cd6a..c66a46f417354fc679a5cc19a805d8451fbf7cba 100644 --- a/src/Constraint/StringConstraint.php +++ b/src/Constraint/StringConstraint.php @@ -86,24 +86,26 @@ final readonly class StringConstraint extends Constraint ); } - if (ConstraintStringFormat::Uuid === $this->format) { - if (uuid_is_valid($notValidatedData)) { - return new ConstraintResult( - castedData: $notValidatedData, - path: $path, - reason: ConstraintReason::Ok, - status: ConstraintResultStatus::Valid, - ); - } + $isFormatValid = match ($this->format) { + ConstraintStringFormat::Mail => false !== filter_var($notValidatedData, FILTER_VALIDATE_EMAIL), + ConstraintStringFormat::Uuid => uuid_is_valid($notValidatedData), + default => throw new RuntimeException('Unknown string format'), + }; + if ($isFormatValid) { return new ConstraintResult( castedData: $notValidatedData, path: $path, - reason: ConstraintReason::InvalidFormat, - status: ConstraintResultStatus::Invalid, + reason: ConstraintReason::Ok, + status: ConstraintResultStatus::Valid, ); } - throw new RuntimeException('Unknown string format'); + return new ConstraintResult( + castedData: $notValidatedData, + path: $path, + reason: ConstraintReason::InvalidFormat, + status: ConstraintResultStatus::Invalid, + ); } } diff --git a/src/Constraint/StringConstraintTest.php b/src/Constraint/StringConstraintTest.php index 9d6908a89ce9c16100c5d8f789cb3b357422a14d..d5094e14f29c06e4f140a13f7ec5d12f2fad9846 100644 --- a/src/Constraint/StringConstraintTest.php +++ b/src/Constraint/StringConstraintTest.php @@ -52,6 +52,14 @@ final class StringConstraintTest extends TestCase self::assertTrue($constraint->validate('hi')->status->isValid()); } + public function test_validates_mail(): void + { + $constraint = new StringConstraint(format: ConstraintStringFormat::Mail); + + self::assertFalse($constraint->validate('hi')->status->isValid()); + self::assertTrue($constraint->validate('test@example.com')->status->isValid()); + } + public function test_validates_uuid(): void { $constraint = new StringConstraint(format: ConstraintStringFormat::Uuid);