Sync: code local unifié
Synchronisation du code source local (fait foi). Signed-off-by: lions dev Team
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
package dev.lions.unionflow.server.service;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
import dev.lions.unionflow.server.client.UserServiceClient;
|
||||
import dev.lions.unionflow.server.entity.Membre;
|
||||
import dev.lions.unionflow.server.repository.MembreRepository;
|
||||
import dev.lions.user.manager.dto.user.UserDTO;
|
||||
import dev.lions.user.manager.dto.user.UserSearchCriteriaDTO;
|
||||
import dev.lions.user.manager.dto.user.UserSearchResultDTO;
|
||||
import io.quarkus.test.InjectMock;
|
||||
import io.quarkus.test.junit.QuarkusTest;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.NotFoundException;
|
||||
import java.util.Collections;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import org.eclipse.microprofile.rest.client.inject.RestClient;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@QuarkusTest
|
||||
class MembreKeycloakSyncServiceTest {
|
||||
|
||||
@Inject
|
||||
MembreKeycloakSyncService syncService;
|
||||
|
||||
@InjectMock
|
||||
MembreRepository membreRepository;
|
||||
|
||||
@InjectMock
|
||||
@RestClient
|
||||
UserServiceClient userServiceClient;
|
||||
|
||||
@Test
|
||||
@DisplayName("provisionKeycloakUser échoue si le membre n'existe pas")
|
||||
void provisionKeycloakUser_failsIfMembreNotFound() {
|
||||
UUID membreId = UUID.randomUUID();
|
||||
when(membreRepository.findByIdOptional(membreId)).thenReturn(Optional.empty());
|
||||
|
||||
assertThatThrownBy(() -> syncService.provisionKeycloakUser(membreId))
|
||||
.isInstanceOf(NotFoundException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("provisionKeycloakUser échoue si le membre a déjà un ID Keycloak")
|
||||
void provisionKeycloakUser_failsIfAlreadyLinked() {
|
||||
UUID membreId = UUID.randomUUID();
|
||||
Membre membre = new Membre();
|
||||
membre.setId(membreId);
|
||||
membre.setKeycloakId(UUID.randomUUID());
|
||||
|
||||
when(membreRepository.findByIdOptional(membreId)).thenReturn(Optional.of(membre));
|
||||
|
||||
assertThatThrownBy(() -> syncService.provisionKeycloakUser(membreId))
|
||||
.isInstanceOf(IllegalStateException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("provisionKeycloakUser crée un utilisateur Keycloak et lie le membre")
|
||||
void provisionKeycloakUser_createsAndLinks() {
|
||||
UUID membreId = UUID.randomUUID();
|
||||
Membre membre = new Membre();
|
||||
membre.setId(membreId);
|
||||
membre.setEmail("test@unionflow.dev");
|
||||
membre.setNom("Doe");
|
||||
membre.setPrenom("John");
|
||||
|
||||
when(membreRepository.findByIdOptional(membreId)).thenReturn(Optional.of(membre));
|
||||
|
||||
UserSearchResultDTO searchResult = new UserSearchResultDTO();
|
||||
searchResult.setUsers(Collections.emptyList());
|
||||
when(userServiceClient.searchUsers(any(UserSearchCriteriaDTO.class))).thenReturn(searchResult);
|
||||
|
||||
UserDTO createdUser = new UserDTO();
|
||||
createdUser.setId(UUID.randomUUID().toString());
|
||||
when(userServiceClient.createUser(any(UserDTO.class), anyString())).thenReturn(createdUser);
|
||||
|
||||
syncService.provisionKeycloakUser(membreId);
|
||||
|
||||
verify(userServiceClient).createUser(any(UserDTO.class), eq("unionflow"));
|
||||
verify(membreRepository).persist(membre);
|
||||
verify(userServiceClient).sendVerificationEmail(eq(createdUser.getId()), eq("unionflow"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user