*/ #[CoversClass(RoleName::class)] #[CoversClass(RoleNameValidator::class)] class RoleNameValidatorTest extends ConstraintValidatorTestCase { protected function createValidator(): RoleNameValidator { $factory = new RoleServiceFactory($this); return new RoleNameValidator($factory->create()); } /** * @return array> */ public static function getValidRoleNames(): array { return [ ['FOOBAR'], ['ROLE_CUSTOMER'], ['ANONYMOUS'], ['TESTA'], ['TE_ST'], ]; } public function testConstraintIsInvalid(): void { $this->expectException(UnexpectedTypeException::class); $this->validator->validate('foo', new NotBlank()); } #[DataProvider('getValidRoleNames')] public function testConstraintWithValidRole(string $role): void { $constraint = new RoleName(); $this->validator->validate($role, $constraint); $this->assertNoViolation(); } public function testNullIsInvalid(): void { $this->validator->validate(null, new RoleName(['message' => 'myMessage'])); $this->buildViolation('myMessage') ->setParameter('{{ value }}', 'null') ->setCode(RoleName::ROLE_NAME_ERROR) ->assertRaised(); } /** * @return array> */ public static function getInvalidRoleNames(): array { return [ ['foo'], ['foobar'], [0], ['role_user'], ['ROLE-CUSTOMER'], ['anonymous'], [''], ['_TESTA'], ['TESTA_'], ['TE__ST'], ['_______'], [User::ROLE_USER], [User::ROLE_TEAMLEAD], [User::ROLE_ADMIN], [User::ROLE_SUPER_ADMIN], ]; } #[DataProvider('getInvalidRoleNames')] public function testValidationError(string|int $role): void { $constraint = new RoleName([ 'message' => 'myMessage', ]); $this->validator->validate($role, $constraint); $expectedFormat = \is_string($role) ? '"' . $role . '"' : (string) $role; $this->buildViolation('myMessage') ->setParameter('{{ value }}', $expectedFormat) ->setCode(RoleName::ROLE_NAME_ERROR) ->assertRaised(); } }