96 lines
3.4 KiB
Java
96 lines
3.4 KiB
Java
package dev.lions.user.manager.resource;
|
|
|
|
import dev.lions.user.manager.client.KeycloakAdminClient;
|
|
import dev.lions.user.manager.dto.common.UserSessionStatsDTO;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.keycloak.admin.client.resource.RealmResource;
|
|
import org.keycloak.admin.client.resource.UserResource;
|
|
import org.keycloak.admin.client.resource.UsersResource;
|
|
import org.keycloak.representations.idm.UserRepresentation;
|
|
import org.junit.jupiter.api.Assertions;
|
|
import org.mockito.InjectMocks;
|
|
import org.mockito.Mock;
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
|
|
import java.util.List;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
import static org.mockito.ArgumentMatchers.anyString;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
@ExtendWith(MockitoExtension.class)
|
|
class UserMetricsResourceTest {
|
|
|
|
@Mock
|
|
KeycloakAdminClient keycloakAdminClient;
|
|
|
|
@Mock
|
|
RealmResource realmResource;
|
|
|
|
@Mock
|
|
UsersResource usersResource;
|
|
|
|
@Mock
|
|
UserResource userResource1;
|
|
|
|
@Mock
|
|
UserResource userResource2;
|
|
|
|
@InjectMocks
|
|
UserMetricsResource userMetricsResource;
|
|
|
|
@Test
|
|
void testGetUserSessionStats() {
|
|
// Préparer deux utilisateurs avec des sessions différentes
|
|
UserRepresentation u1 = new UserRepresentation();
|
|
u1.setId("u1");
|
|
UserRepresentation u2 = new UserRepresentation();
|
|
u2.setId("u2");
|
|
|
|
when(keycloakAdminClient.getRealm("test-realm")).thenReturn(realmResource);
|
|
when(realmResource.users()).thenReturn(usersResource);
|
|
when(usersResource.list()).thenReturn(List.of(u1, u2));
|
|
|
|
// u1 a 2 sessions, u2 en a 0
|
|
when(usersResource.get("u1")).thenReturn(userResource1);
|
|
when(usersResource.get("u2")).thenReturn(userResource2);
|
|
when(userResource1.getUserSessions()).thenReturn(List.of(new org.keycloak.representations.idm.UserSessionRepresentation(),
|
|
new org.keycloak.representations.idm.UserSessionRepresentation()));
|
|
when(userResource2.getUserSessions()).thenReturn(List.of());
|
|
|
|
UserSessionStatsDTO stats = userMetricsResource.getUserSessionStats("test-realm");
|
|
|
|
assertNotNull(stats);
|
|
assertEquals("test-realm", stats.getRealmName());
|
|
assertEquals(2L, stats.getTotalUsers());
|
|
assertEquals(2L, stats.getActiveSessions()); // 2 sessions au total
|
|
assertEquals(1L, stats.getOnlineUsers()); // 1 utilisateur avec au moins une session
|
|
}
|
|
|
|
@Test
|
|
void testGetUserSessionStats_DefaultRealm() {
|
|
when(keycloakAdminClient.getRealm("master")).thenReturn(realmResource);
|
|
when(realmResource.users()).thenReturn(usersResource);
|
|
when(usersResource.list()).thenReturn(List.of());
|
|
|
|
UserSessionStatsDTO stats = userMetricsResource.getUserSessionStats(null);
|
|
|
|
assertNotNull(stats);
|
|
assertEquals("master", stats.getRealmName());
|
|
assertEquals(0L, stats.getTotalUsers());
|
|
}
|
|
|
|
@Test
|
|
void testGetUserSessionStats_OnError() {
|
|
when(keycloakAdminClient.getRealm(anyString()))
|
|
.thenThrow(new RuntimeException("KC error"));
|
|
|
|
Assertions.assertThrows(RuntimeException.class,
|
|
() -> userMetricsResource.getUserSessionStats("realm"));
|
|
}
|
|
}
|
|
|
|
|