clientRegistry = $this->createMock(ClientRegistry::class); $this->entityManager = $this->createMock(EntityManagerInterface::class); $this->router = $this->createMock(RouterInterface::class); $this->authenticator = new KeycloakAuthenticator( $this->clientRegistry, $this->entityManager, $this->router ); } public function testSupports() { $request = Request::create('/connect/keycloak/check'); $request->attributes->set('_route', 'connect_keycloak_check'); $this->assertTrue($this->authenticator->supports($request)); } public function testAuthenticateExistingUser() { $request = Request::create('/connect/keycloak/check'); $client = $this->createMock(OAuth2ClientInterface::class); $this->clientRegistry->method('getClient')->with('keycloak')->willReturn($client); $accessToken = new AccessToken(['access_token' => 'token']); $client->method('getAccessToken')->willReturn($accessToken); // Mock Keycloak User $keycloakUser = $this->createMock(KeycloakResourceOwner::class); $keycloakUser->method('getId')->willReturn('keycloak-id-123'); $keycloakUser->method('getEmail')->willReturn('user@test.com'); $client->method('fetchUserFromToken')->willReturn($keycloakUser); // Mock Repository $repository = $this->createMock(EntityRepository::class); $this->entityManager->method('getRepository')->with(Account::class)->willReturn($repository); // Existing user by Keycloak ID $existingUser = new Account(); $repository->method('findOneBy')->willReturnMap([ [['keycloakId' => 'keycloak-id-123'], null, $existingUser] ]); $passport = $this->authenticator->authenticate($request); $this->assertInstanceOf(Passport::class, $passport); $userBadge = $passport->getBadge(UserBadge::class); $userLoader = $userBadge->getUserLoader(); $loadedUser = $userLoader(); $this->assertSame($existingUser, $loadedUser); } }