From 6235d18dab079c489802cf611d7cca7a37c0dc0e Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Sun, 6 Nov 2022 14:15:21 +0100 Subject: [PATCH] improve user unique check (#3621) --- src/Entity/User.php | 2 +- src/Validator/Constraints/UserValidator.php | 5 ++--- tests/Validator/Constraints/UserValidatorTest.php | 6 +++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Entity/User.php b/src/Entity/User.php index a33d6337..06043b38 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -35,7 +35,7 @@ use Symfony\Component\Validator\Constraints as Assert; * ) * @UniqueEntity("username") * @UniqueEntity("email") - * @Constraints\User(groups={"UserCreate", "Registration", "Default"}) + * @Constraints\User(groups={"UserCreate", "Registration", "Default", "Profile"}) * * @Serializer\ExclusionPolicy("all") * @Serializer\VirtualProperty( diff --git a/src/Validator/Constraints/UserValidator.php b/src/Validator/Constraints/UserValidator.php index f86b57ff..0a40fded 100644 --- a/src/Validator/Constraints/UserValidator.php +++ b/src/Validator/Constraints/UserValidator.php @@ -44,15 +44,14 @@ class UserValidator extends ConstraintValidator protected function validateUser(UserEntity $user, ExecutionContextInterface $context) { - $matchedEmail = false; if ($user->getEmail() !== null) { $this->validateEmailExists($user->getId(), $user->getEmail(), 'email', User::USER_EXISTING_EMAIL, $context); - $this->validateEmailExists($user->getId(), $user->getUsername(), 'username', User::USER_EXISTING_NAME_AS_EMAIL, $context); + $this->validateUsernameExists($user->getId(), $user->getEmail(), 'email', User::USER_EXISTING_EMAIL_AS_NAME, $context); } if ($user->getUsername() !== null) { + $this->validateEmailExists($user->getId(), $user->getUsername(), 'username', User::USER_EXISTING_NAME_AS_EMAIL, $context); $this->validateUsernameExists($user->getId(), $user->getUsername(), 'username', User::USER_EXISTING_NAME, $context); - $this->validateUsernameExists($user->getId(), $user->getEmail(), 'email', User::USER_EXISTING_EMAIL_AS_NAME, $context); } } diff --git a/tests/Validator/Constraints/UserValidatorTest.php b/tests/Validator/Constraints/UserValidatorTest.php index 3b98cb50..a8b24e51 100644 --- a/tests/Validator/Constraints/UserValidatorTest.php +++ b/tests/Validator/Constraints/UserValidatorTest.php @@ -92,15 +92,15 @@ class UserValidatorTest extends ConstraintValidatorTestCase ->buildViolation('The email is already used.') ->atPath('property.path.email') ->setCode(User::USER_EXISTING_EMAIL) + ->buildNextViolation('An equal username is already used.') + ->atPath('property.path.email') + ->setCode(User::USER_EXISTING_EMAIL_AS_NAME) ->buildNextViolation('An equal email is already used.') ->atPath('property.path.username') ->setCode(User::USER_EXISTING_NAME_AS_EMAIL) ->buildNextViolation('The username is already used.') ->atPath('property.path.username') ->setCode(User::USER_EXISTING_NAME) - ->buildNextViolation('An equal username is already used.') - ->atPath('property.path.email') - ->setCode(User::USER_EXISTING_EMAIL_AS_NAME) ->assertRaised(); } }