Refactoring - Version stable

This commit is contained in:
dahoud
2026-03-28 14:21:30 +00:00
parent 00b981c510
commit a740c172ef
4402 changed files with 88517 additions and 1555 deletions

View File

@@ -2,6 +2,7 @@ package dev.lions.unionflow.server.service;
import dev.lions.unionflow.server.client.RoleServiceClient;
import dev.lions.unionflow.server.client.UserServiceClient;
import dev.lions.user.manager.dto.role.RoleDTO;
import dev.lions.user.manager.dto.user.UserDTO;
import dev.lions.user.manager.dto.user.UserSearchResultDTO;
import io.quarkus.test.InjectMock;
@@ -16,6 +17,7 @@ import java.util.List;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
@@ -74,4 +76,198 @@ class AdminUserServiceTest {
assertThat(result).isNotNull();
assertThat(result.getUsername()).isEqualTo("newuser");
}
// =========================================================================
// getRealmRoles
// =========================================================================
@Test
@DisplayName("getRealmRoles retourne la liste des rôles")
void getRealmRoles_returnsRoles() {
RoleDTO role = new RoleDTO();
role.setName("admin");
Mockito.when(roleServiceClient.getRealmRoles("unionflow")).thenReturn(List.of(role));
List<RoleDTO> result = adminUserService.getRealmRoles();
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("admin");
}
@Test
@DisplayName("getRealmRoles retourne liste vide si le client lève une exception")
void getRealmRoles_exceptionRetourneListeVide() {
Mockito.when(roleServiceClient.getRealmRoles(any()))
.thenThrow(new RuntimeException("Service unavailable"));
List<RoleDTO> result = adminUserService.getRealmRoles();
assertThat(result).isEmpty();
}
// =========================================================================
// getUserRoles
// =========================================================================
@Test
@DisplayName("getUserRoles retourne les rôles de l'utilisateur")
void getUserRoles_returnsUserRoles() {
String userId = UUID.randomUUID().toString();
RoleDTO role = new RoleDTO();
role.setName("membre");
Mockito.when(roleServiceClient.getUserRealmRoles(eq(userId), any())).thenReturn(List.of(role));
List<RoleDTO> result = adminUserService.getUserRoles(userId);
assertThat(result).hasSize(1);
assertThat(result.get(0).getName()).isEqualTo("membre");
}
@Test
@DisplayName("getUserRoles retourne liste vide si le client lève une exception")
void getUserRoles_exceptionRetourneListeVide() {
String userId = UUID.randomUUID().toString();
Mockito.when(roleServiceClient.getUserRealmRoles(eq(userId), any()))
.thenThrow(new RuntimeException("Keycloak down"));
List<RoleDTO> result = adminUserService.getUserRoles(userId);
assertThat(result).isEmpty();
}
// =========================================================================
// updateUser
// =========================================================================
@Test
@DisplayName("updateUser appelle le client REST avec userId et realm")
void updateUser_callsClient() {
String userId = UUID.randomUUID().toString();
UserDTO user = new UserDTO();
user.setUsername("updated-user");
Mockito.when(userServiceClient.updateUser(eq(userId), any(), any())).thenReturn(user);
UserDTO result = adminUserService.updateUser(userId, user);
assertThat(result).isNotNull();
assertThat(result.getUsername()).isEqualTo("updated-user");
Mockito.verify(userServiceClient).updateUser(eq(userId), any(), eq("unionflow"));
}
// =========================================================================
// updateUserEnabled
// =========================================================================
@Test
@DisplayName("updateUserEnabled active l'utilisateur et appelle updateUser")
void updateUserEnabled_activerUtilisateur() {
String userId = UUID.randomUUID().toString();
UserDTO existing = new UserDTO();
existing.setId(userId);
existing.setUsername("testuser");
existing.setEnabled(false);
UserDTO updated = new UserDTO();
updated.setId(userId);
updated.setEnabled(true);
Mockito.when(userServiceClient.getUserById(eq(userId), any())).thenReturn(existing);
Mockito.when(userServiceClient.updateUser(eq(userId), any(), any())).thenReturn(updated);
UserDTO result = adminUserService.updateUserEnabled(userId, true);
assertThat(result).isNotNull();
Mockito.verify(userServiceClient).updateUser(eq(userId), any(), eq("unionflow"));
}
@Test
@DisplayName("updateUserEnabled lance IllegalArgumentException si l'utilisateur est null")
void updateUserEnabled_utilisateurNonTrouve_lancerException() {
String userId = UUID.randomUUID().toString();
Mockito.when(userServiceClient.getUserById(eq(userId), any())).thenReturn(null);
assertThatThrownBy(() -> adminUserService.updateUserEnabled(userId, true))
.isInstanceOf(IllegalArgumentException.class)
.hasMessageContaining("Utilisateur non trouvé");
}
// =========================================================================
// setUserRoles
// =========================================================================
@Test
@DisplayName("setUserRoles assigne les nouveaux rôles et révoque les retirés")
void setUserRoles_assigneEtRevoque() {
String userId = UUID.randomUUID().toString();
RoleDTO existingRole = new RoleDTO();
existingRole.setName("membre");
// L'utilisateur a actuellement "membre", on veut lui assigner "admin"
Mockito.when(roleServiceClient.getUserRealmRoles(eq(userId), any()))
.thenReturn(List.of(existingRole));
// assign "admin", revoke "membre"
adminUserService.setUserRoles(userId, List.of("admin"));
Mockito.verify(roleServiceClient).assignRealmRoles(eq(userId), eq("unionflow"), any());
Mockito.verify(roleServiceClient).revokeRealmRoles(eq(userId), eq("unionflow"), any());
}
@Test
@DisplayName("setUserRoles sans changement — ni assign ni revoke appelé")
void setUserRoles_sansChangement_aucunAppel() {
String userId = UUID.randomUUID().toString();
RoleDTO existingRole = new RoleDTO();
existingRole.setName("admin");
// L'utilisateur a déjà "admin", on veut "admin" → rien à faire
Mockito.when(roleServiceClient.getUserRealmRoles(eq(userId), any()))
.thenReturn(List.of(existingRole));
adminUserService.setUserRoles(userId, List.of("admin"));
Mockito.verify(roleServiceClient, Mockito.never()).assignRealmRoles(any(), any(), any());
Mockito.verify(roleServiceClient, Mockito.never()).revokeRealmRoles(any(), any(), any());
}
@Test
@DisplayName("setUserRoles avec liste cible vide — tous les rôles existants révoqués")
void setUserRoles_listeCibleNull_tousRevoque() {
String userId = UUID.randomUUID().toString();
RoleDTO existingRole = new RoleDTO();
existingRole.setName("membre");
Mockito.when(roleServiceClient.getUserRealmRoles(eq(userId), any()))
.thenReturn(List.of(existingRole));
adminUserService.setUserRoles(userId, new java.util.ArrayList<>());
// rien à assigner, "membre" à révoquer
Mockito.verify(roleServiceClient, Mockito.never()).assignRealmRoles(any(), any(), any());
Mockito.verify(roleServiceClient).revokeRealmRoles(eq(userId), eq("unionflow"), any());
}
@Test
@DisplayName("setUserRoles null targetRoleNames — couvre branche null L107")
void setUserRoles_targetRolesNull_revoqueTous() {
String userId = UUID.randomUUID().toString();
RoleDTO existingRole = new RoleDTO();
existingRole.setName("admin");
Mockito.when(roleServiceClient.getUserRealmRoles(eq(userId), any()))
.thenReturn(List.of(existingRole));
// null → toAssign = List.of(), toRevoke = currentNames List.of() = currentNames
adminUserService.setUserRoles(userId, null);
Mockito.verify(roleServiceClient, Mockito.never()).assignRealmRoles(any(), any(), any());
Mockito.verify(roleServiceClient).revokeRealmRoles(eq(userId), eq("unionflow"), any());
}
}