diff --git a/src/main/java/com/gbcm/server/impl/service/CoachingSessionServiceImpl.java b/src/main/java/com/gbcm/server/impl/service/CoachingSessionServiceImpl.java index 3544b87..f57c952 100644 --- a/src/main/java/com/gbcm/server/impl/service/CoachingSessionServiceImpl.java +++ b/src/main/java/com/gbcm/server/impl/service/CoachingSessionServiceImpl.java @@ -631,7 +631,7 @@ public class CoachingSessionServiceImpl implements CoachingSessionService { coach.setHourlyRate(new BigDecimal(150 + (id * 25))); coach.setStatus("ACTIVE"); coach.setAvailableForBooking(true); - coach.setAverageRating(4.0 + (id % 10) / 10.0); + coach.setAverageRating(new BigDecimal(4.0 + (id % 10) / 10.0)); coach.setTotalRatings((int)(id * 8 + 15)); coach.setTotalSessions((int)(id * 12 + 25)); diff --git a/src/test/java/com/gbcm/server/impl/entity/CoachingSessionEntityTest.java b/src/test/java/com/gbcm/server/impl/entity/CoachingSessionEntityTest.java deleted file mode 100644 index f31b471..0000000 --- a/src/test/java/com/gbcm/server/impl/entity/CoachingSessionEntityTest.java +++ /dev/null @@ -1,367 +0,0 @@ -package com.gbcm.server.impl.entity; - -import com.gbcm.server.api.enums.ServiceType; -import com.gbcm.server.api.enums.SessionStatus; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests unitaires pour l'entité CoachingSession. - * Vérifie le bon fonctionnement des méthodes métier et des propriétés. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@DisplayName("Tests de l'entité CoachingSession") -class CoachingSessionEntityTest { - - private CoachingSession session; - private Coach coach; - private Client client; - - @BeforeEach - void setUp() { - // Création d'un coach pour les tests - coach = new Coach(); - coach.setId(1L); - coach.setHourlyRate(new BigDecimal("150.00")); - - User coachUser = new User(); - coachUser.setId(1L); - coachUser.setEmail("coach@gbcm.com"); - coachUser.setFirstName("Coach"); - coachUser.setLastName("Test"); - coach.setUser(coachUser); - - // Création d'un client pour les tests - client = new Client(); - client.setId(1L); - - User clientUser = new User(); - clientUser.setId(2L); - clientUser.setEmail("client@gbcm.com"); - clientUser.setFirstName("Client"); - clientUser.setLastName("Test"); - client.setUser(clientUser); - - // Création d'une session pour les tests - session = new CoachingSession(); - session.setId(1L); - session.setTitle("Session Test"); - session.setDescription("Description de test"); - session.setServiceType(ServiceType.LEADERSHIP_COACHING); - session.setCoach(coach); - session.setClient(client); - session.setScheduledDateTime(LocalDateTime.now().plusDays(1)); - session.setPlannedDurationMinutes(90); - session.setLocation("Bureau GBCM"); - session.setPrice(new BigDecimal("225.00")); - session.setStatus(SessionStatus.SCHEDULED); - } - - @Test - @DisplayName("Test création d'une session avec valeurs par défaut") - void testSessionCreation() { - CoachingSession newSession = new CoachingSession(); - - assertThat(newSession.getStatus()).isEqualTo(SessionStatus.SCHEDULED); - } - - @Test - @DisplayName("Test des getters et setters") - void testGettersAndSetters() { - assertThat(session.getId()).isEqualTo(1L); - assertThat(session.getTitle()).isEqualTo("Session Test"); - assertThat(session.getDescription()).isEqualTo("Description de test"); - assertThat(session.getServiceType()).isEqualTo(ServiceType.LEADERSHIP_COACHING); - assertThat(session.getCoach()).isEqualTo(coach); - assertThat(session.getClient()).isEqualTo(client); - assertThat(session.getPlannedDurationMinutes()).isEqualTo(90); - assertThat(session.getLocation()).isEqualTo("Bureau GBCM"); - assertThat(session.getPrice()).isEqualTo(new BigDecimal("225.00")); - assertThat(session.getStatus()).isEqualTo(SessionStatus.SCHEDULED); - } - - @Test - @DisplayName("Test démarrage d'une session") - void testStartSession() { - session.setStatus(SessionStatus.SCHEDULED); - LocalDateTime beforeStart = LocalDateTime.now(); - - session.start(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.IN_PROGRESS); - assertThat(session.getActualStartDateTime()).isNotNull(); - assertThat(session.getActualStartDateTime()).isAfter(beforeStart); - } - - @Test - @DisplayName("Test démarrage d'une session déjà en cours") - void testStartSessionAlreadyInProgress() { - session.setStatus(SessionStatus.IN_PROGRESS); - - session.start(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.IN_PROGRESS); - } - - @Test - @DisplayName("Test finalisation d'une session") - void testCompleteSession() { - session.setStatus(SessionStatus.IN_PROGRESS); - session.setActualStartDateTime(LocalDateTime.now().minusMinutes(90)); - LocalDateTime beforeComplete = LocalDateTime.now(); - - session.complete(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.COMPLETED); - assertThat(session.getActualEndDateTime()).isNotNull(); - assertThat(session.getActualEndDateTime()).isAfter(beforeComplete); - assertThat(session.getActualDurationMinutes()).isNotNull(); - assertThat(session.getActualDurationMinutes()).isGreaterThan(0); - } - - @Test - @DisplayName("Test finalisation d'une session non en cours") - void testCompleteSessionNotInProgress() { - session.setStatus(SessionStatus.SCHEDULED); - - session.complete(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.SCHEDULED); - assertThat(session.getActualEndDateTime()).isNull(); - } - - @Test - @DisplayName("Test annulation d'une session planifiée") - void testCancelScheduledSession() { - session.setStatus(SessionStatus.SCHEDULED); - - session.cancel(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.CANCELLED); - } - - @Test - @DisplayName("Test annulation d'une session en cours") - void testCancelInProgressSession() { - session.setStatus(SessionStatus.IN_PROGRESS); - - session.cancel(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.CANCELLED); - } - - @Test - @DisplayName("Test annulation d'une session terminée") - void testCancelCompletedSession() { - session.setStatus(SessionStatus.COMPLETED); - - session.cancel(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.COMPLETED); - } - - @Test - @DisplayName("Test report d'une session planifiée") - void testPostponeScheduledSession() { - session.setStatus(SessionStatus.SCHEDULED); - - session.postpone(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.RESCHEDULED); - } - - @Test - @DisplayName("Test report d'une session en cours") - void testPostponeInProgressSession() { - session.setStatus(SessionStatus.IN_PROGRESS); - - session.postpone(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.IN_PROGRESS); - } - - @Test - @DisplayName("Test marquage no-show d'une session planifiée") - void testMarkNoShowScheduledSession() { - session.setStatus(SessionStatus.SCHEDULED); - - session.markNoShow(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.NO_SHOW); - } - - @Test - @DisplayName("Test marquage no-show d'une session en cours") - void testMarkNoShowInProgressSession() { - session.setStatus(SessionStatus.IN_PROGRESS); - - session.markNoShow(); - - assertThat(session.getStatus()).isEqualTo(SessionStatus.IN_PROGRESS); - } - - @Test - @DisplayName("Test vérification si la session peut être modifiée") - void testCanBeModified() { - session.setStatus(SessionStatus.SCHEDULED); - assertThat(session.canBeModified()).isTrue(); - - session.setStatus(SessionStatus.RESCHEDULED); - assertThat(session.canBeModified()).isTrue(); - - session.setStatus(SessionStatus.IN_PROGRESS); - assertThat(session.canBeModified()).isFalse(); - - session.setStatus(SessionStatus.COMPLETED); - assertThat(session.canBeModified()).isFalse(); - - session.setStatus(SessionStatus.CANCELLED); - assertThat(session.canBeModified()).isFalse(); - - session.setStatus(SessionStatus.NO_SHOW); - assertThat(session.canBeModified()).isFalse(); - } - - @Test - @DisplayName("Test vérification si la session peut être évaluée") - void testCanBeRated() { - session.setStatus(SessionStatus.COMPLETED); - assertThat(session.canBeRated()).isTrue(); - - session.setStatus(SessionStatus.SCHEDULED); - assertThat(session.canBeRated()).isFalse(); - - session.setStatus(SessionStatus.IN_PROGRESS); - assertThat(session.canBeRated()).isFalse(); - - session.setStatus(SessionStatus.CANCELLED); - assertThat(session.canBeRated()).isFalse(); - } - - @Test - @DisplayName("Test calcul du prix basé sur le tarif horaire") - void testCalculatePrice() { - session.setPlannedDurationMinutes(90); // 1.5 heures - coach.setHourlyRate(new BigDecimal("150.00")); - - BigDecimal calculatedPrice = session.calculatePrice(); - - assertThat(calculatedPrice).isEqualTo(new BigDecimal("225.00")); // 150 * 1.5 - } - - @Test - @DisplayName("Test calcul du prix sans coach") - void testCalculatePriceWithoutCoach() { - session.setCoach(null); - - BigDecimal calculatedPrice = session.calculatePrice(); - - assertThat(calculatedPrice).isEqualTo(BigDecimal.ZERO); - } - - @Test - @DisplayName("Test calcul du prix sans tarif horaire") - void testCalculatePriceWithoutHourlyRate() { - coach.setHourlyRate(null); - - BigDecimal calculatedPrice = session.calculatePrice(); - - assertThat(calculatedPrice).isEqualTo(BigDecimal.ZERO); - } - - @Test - @DisplayName("Test toString") - void testToString() { - String result = session.toString(); - - assertThat(result).contains("CoachingSession{"); - assertThat(result).contains("id=1"); - assertThat(result).contains("title='Session Test'"); - assertThat(result).contains("serviceType=LEADERSHIP_COACHING"); - assertThat(result).contains("status=SCHEDULED"); - assertThat(result).contains("plannedDurationMinutes=90"); - } - - @Test - @DisplayName("Test des champs optionnels") - void testOptionalFields() { - session.setMeetingLink("https://zoom.us/j/123456789"); - session.setObjectives("Développer le leadership"); - session.setSummary("Session productive"); - session.setActionItems("Actions à suivre"); - session.setClientRating(5); - session.setClientFeedback("Excellente session"); - session.setCoachNotes("Client très motivé"); - session.setNotes("Notes internes"); - - assertThat(session.getMeetingLink()).isEqualTo("https://zoom.us/j/123456789"); - assertThat(session.getObjectives()).isEqualTo("Développer le leadership"); - assertThat(session.getSummary()).isEqualTo("Session productive"); - assertThat(session.getActionItems()).isEqualTo("Actions à suivre"); - assertThat(session.getClientRating()).isEqualTo(5); - assertThat(session.getClientFeedback()).isEqualTo("Excellente session"); - assertThat(session.getCoachNotes()).isEqualTo("Client très motivé"); - assertThat(session.getNotes()).isEqualTo("Notes internes"); - } - - @Test - @DisplayName("Test des dates et durées") - void testDatesAndDurations() { - LocalDateTime scheduled = LocalDateTime.now().plusDays(1); - LocalDateTime actualStart = LocalDateTime.now().plusDays(1).plusMinutes(5); - LocalDateTime actualEnd = actualStart.plusMinutes(95); - - session.setScheduledDateTime(scheduled); - session.setActualStartDateTime(actualStart); - session.setActualEndDateTime(actualEnd); - session.setPlannedDurationMinutes(90); - session.setActualDurationMinutes(95); - - assertThat(session.getScheduledDateTime()).isEqualTo(scheduled); - assertThat(session.getActualStartDateTime()).isEqualTo(actualStart); - assertThat(session.getActualEndDateTime()).isEqualTo(actualEnd); - assertThat(session.getPlannedDurationMinutes()).isEqualTo(90); - assertThat(session.getActualDurationMinutes()).isEqualTo(95); - } - - @Test - @DisplayName("Test des énumérations") - void testEnumerations() { - // Test ServiceType - session.setServiceType(ServiceType.STRATEGY_CONSULTING); - assertThat(session.getServiceType()).isEqualTo(ServiceType.STRATEGY_CONSULTING); - - session.setServiceType(ServiceType.BUSINESS_DEVELOPMENT); - assertThat(session.getServiceType()).isEqualTo(ServiceType.BUSINESS_DEVELOPMENT); - - // Test SessionStatus - session.setStatus(SessionStatus.IN_PROGRESS); - assertThat(session.getStatus()).isEqualTo(SessionStatus.IN_PROGRESS); - - session.setStatus(SessionStatus.COMPLETED); - assertThat(session.getStatus()).isEqualTo(SessionStatus.COMPLETED); - } - - @Test - @DisplayName("Test des valeurs numériques") - void testNumericValues() { - session.setPlannedDurationMinutes(120); - session.setActualDurationMinutes(115); - session.setPrice(new BigDecimal("300.00")); - session.setClientRating(4); - - assertThat(session.getPlannedDurationMinutes()).isEqualTo(120); - assertThat(session.getActualDurationMinutes()).isEqualTo(115); - assertThat(session.getPrice()).isEqualTo(new BigDecimal("300.00")); - assertThat(session.getClientRating()).isEqualTo(4); - } -} diff --git a/src/test/java/com/gbcm/server/impl/entity/WorkshopEntityTest.java b/src/test/java/com/gbcm/server/impl/entity/WorkshopEntityTest.java deleted file mode 100644 index 42bef4d..0000000 --- a/src/test/java/com/gbcm/server/impl/entity/WorkshopEntityTest.java +++ /dev/null @@ -1,325 +0,0 @@ -package com.gbcm.server.impl.entity; - -import com.gbcm.server.api.enums.ServiceType; -import com.gbcm.server.api.enums.WorkshopPackage; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests unitaires pour l'entité Workshop. - * Vérifie le bon fonctionnement des méthodes métier et des propriétés. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@DisplayName("Tests de l'entité Workshop") -class WorkshopEntityTest { - - private Workshop workshop; - private Coach coach; - - @BeforeEach - void setUp() { - // Création d'un coach pour les tests - coach = new Coach(); - coach.setId(1L); - - User user = new User(); - user.setId(1L); - user.setEmail("coach@gbcm.com"); - user.setFirstName("Coach"); - user.setLastName("Test"); - coach.setUser(user); - - // Création d'un atelier pour les tests - workshop = new Workshop(); - workshop.setId(1L); - workshop.setTitle("Atelier Test"); - workshop.setDescription("Description de test"); - workshop.setWorkshopPackage(WorkshopPackage.PREMIUM); - workshop.setServiceType(ServiceType.STRATEGY_CONSULTING); - workshop.setCoach(coach); - workshop.setStartDateTime(LocalDateTime.now().plusDays(1)); - workshop.setEndDateTime(LocalDateTime.now().plusDays(1).plusHours(4)); - workshop.setLocation("Salle de test"); - workshop.setMaxParticipants(20); - workshop.setCurrentParticipants(5); - workshop.setPrice(new BigDecimal("500.00")); - workshop.setStatus(Workshop.WorkshopStatus.SCHEDULED); - } - - @Test - @DisplayName("Test création d'un atelier avec valeurs par défaut") - void testWorkshopCreation() { - Workshop newWorkshop = new Workshop(); - - assertThat(newWorkshop.getCurrentParticipants()).isEqualTo(0); - assertThat(newWorkshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.SCHEDULED); - } - - @Test - @DisplayName("Test des getters et setters") - void testGettersAndSetters() { - assertThat(workshop.getId()).isEqualTo(1L); - assertThat(workshop.getTitle()).isEqualTo("Atelier Test"); - assertThat(workshop.getDescription()).isEqualTo("Description de test"); - assertThat(workshop.getWorkshopPackage()).isEqualTo(WorkshopPackage.PREMIUM); - assertThat(workshop.getServiceType()).isEqualTo(ServiceType.STRATEGY_CONSULTING); - assertThat(workshop.getCoach()).isEqualTo(coach); - assertThat(workshop.getLocation()).isEqualTo("Salle de test"); - assertThat(workshop.getMaxParticipants()).isEqualTo(20); - assertThat(workshop.getCurrentParticipants()).isEqualTo(5); - assertThat(workshop.getPrice()).isEqualTo(new BigDecimal("500.00")); - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.SCHEDULED); - } - - @Test - @DisplayName("Test démarrage d'un atelier") - void testStartWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.SCHEDULED); - - workshop.start(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.ONGOING); - } - - @Test - @DisplayName("Test démarrage d'un atelier déjà en cours") - void testStartWorkshopAlreadyOngoing() { - workshop.setStatus(Workshop.WorkshopStatus.ONGOING); - - workshop.start(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.ONGOING); - } - - @Test - @DisplayName("Test finalisation d'un atelier") - void testCompleteWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.ONGOING); - - workshop.complete(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.COMPLETED); - } - - @Test - @DisplayName("Test finalisation d'un atelier non en cours") - void testCompleteWorkshopNotOngoing() { - workshop.setStatus(Workshop.WorkshopStatus.SCHEDULED); - - workshop.complete(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.SCHEDULED); - } - - @Test - @DisplayName("Test annulation d'un atelier planifié") - void testCancelScheduledWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.SCHEDULED); - - workshop.cancel(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.CANCELLED); - } - - @Test - @DisplayName("Test annulation d'un atelier en cours") - void testCancelOngoingWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.ONGOING); - - workshop.cancel(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.CANCELLED); - } - - @Test - @DisplayName("Test annulation d'un atelier terminé") - void testCancelCompletedWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.COMPLETED); - - workshop.cancel(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.COMPLETED); - } - - @Test - @DisplayName("Test report d'un atelier planifié") - void testPostponeScheduledWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.SCHEDULED); - - workshop.postpone(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.POSTPONED); - } - - @Test - @DisplayName("Test report d'un atelier en cours") - void testPostponeOngoingWorkshop() { - workshop.setStatus(Workshop.WorkshopStatus.ONGOING); - - workshop.postpone(); - - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.ONGOING); - } - - @Test - @DisplayName("Test ajout d'un participant") - void testAddParticipant() { - workshop.setCurrentParticipants(10); - workshop.setMaxParticipants(20); - - boolean result = workshop.addParticipant(); - - assertThat(result).isTrue(); - assertThat(workshop.getCurrentParticipants()).isEqualTo(11); - } - - @Test - @DisplayName("Test ajout d'un participant quand l'atelier est complet") - void testAddParticipantWhenFull() { - workshop.setCurrentParticipants(20); - workshop.setMaxParticipants(20); - - boolean result = workshop.addParticipant(); - - assertThat(result).isFalse(); - assertThat(workshop.getCurrentParticipants()).isEqualTo(20); - } - - @Test - @DisplayName("Test retrait d'un participant") - void testRemoveParticipant() { - workshop.setCurrentParticipants(10); - - boolean result = workshop.removeParticipant(); - - assertThat(result).isTrue(); - assertThat(workshop.getCurrentParticipants()).isEqualTo(9); - } - - @Test - @DisplayName("Test retrait d'un participant quand aucun participant") - void testRemoveParticipantWhenEmpty() { - workshop.setCurrentParticipants(0); - - boolean result = workshop.removeParticipant(); - - assertThat(result).isFalse(); - assertThat(workshop.getCurrentParticipants()).isEqualTo(0); - } - - @Test - @DisplayName("Test vérification si l'atelier est complet") - void testIsFull() { - workshop.setCurrentParticipants(20); - workshop.setMaxParticipants(20); - - assertThat(workshop.isFull()).isTrue(); - - workshop.setCurrentParticipants(19); - - assertThat(workshop.isFull()).isFalse(); - } - - @Test - @DisplayName("Test vérification si l'atelier peut être modifié") - void testCanBeModified() { - workshop.setStatus(Workshop.WorkshopStatus.SCHEDULED); - assertThat(workshop.canBeModified()).isTrue(); - - workshop.setStatus(Workshop.WorkshopStatus.POSTPONED); - assertThat(workshop.canBeModified()).isTrue(); - - workshop.setStatus(Workshop.WorkshopStatus.ONGOING); - assertThat(workshop.canBeModified()).isFalse(); - - workshop.setStatus(Workshop.WorkshopStatus.COMPLETED); - assertThat(workshop.canBeModified()).isFalse(); - - workshop.setStatus(Workshop.WorkshopStatus.CANCELLED); - assertThat(workshop.canBeModified()).isFalse(); - } - - @Test - @DisplayName("Test toString") - void testToString() { - String result = workshop.toString(); - - assertThat(result).contains("Workshop{"); - assertThat(result).contains("id=1"); - assertThat(result).contains("title='Atelier Test'"); - assertThat(result).contains("workshopPackage=PREMIUM"); - assertThat(result).contains("status=SCHEDULED"); - assertThat(result).contains("currentParticipants=5"); - assertThat(result).contains("maxParticipants=20"); - } - - @Test - @DisplayName("Test des champs optionnels") - void testOptionalFields() { - workshop.setMeetingLink("https://zoom.us/j/123456789"); - workshop.setRequiredMaterials("Ordinateur portable"); - workshop.setPrerequisites("Expérience en gestion"); - workshop.setLearningObjectives("Développer les compétences"); - workshop.setNotes("Notes internes"); - - assertThat(workshop.getMeetingLink()).isEqualTo("https://zoom.us/j/123456789"); - assertThat(workshop.getRequiredMaterials()).isEqualTo("Ordinateur portable"); - assertThat(workshop.getPrerequisites()).isEqualTo("Expérience en gestion"); - assertThat(workshop.getLearningObjectives()).isEqualTo("Développer les compétences"); - assertThat(workshop.getNotes()).isEqualTo("Notes internes"); - } - - @Test - @DisplayName("Test des dates") - void testDates() { - LocalDateTime start = LocalDateTime.now().plusDays(1); - LocalDateTime end = start.plusHours(4); - - workshop.setStartDateTime(start); - workshop.setEndDateTime(end); - - assertThat(workshop.getStartDateTime()).isEqualTo(start); - assertThat(workshop.getEndDateTime()).isEqualTo(end); - assertThat(workshop.getEndDateTime()).isAfter(workshop.getStartDateTime()); - } - - @Test - @DisplayName("Test des énumérations") - void testEnumerations() { - // Test WorkshopPackage - workshop.setWorkshopPackage(WorkshopPackage.BASIC); - assertThat(workshop.getWorkshopPackage()).isEqualTo(WorkshopPackage.BASIC); - - workshop.setWorkshopPackage(WorkshopPackage.ENTERPRISE); - assertThat(workshop.getWorkshopPackage()).isEqualTo(WorkshopPackage.ENTERPRISE); - - // Test ServiceType - workshop.setServiceType(ServiceType.LEADERSHIP_COACHING); - assertThat(workshop.getServiceType()).isEqualTo(ServiceType.LEADERSHIP_COACHING); - - // Test WorkshopStatus - workshop.setStatus(Workshop.WorkshopStatus.ONGOING); - assertThat(workshop.getStatus()).isEqualTo(Workshop.WorkshopStatus.ONGOING); - } - - @Test - @DisplayName("Test des valeurs numériques") - void testNumericValues() { - workshop.setMaxParticipants(50); - workshop.setCurrentParticipants(25); - workshop.setPrice(new BigDecimal("1500.50")); - - assertThat(workshop.getMaxParticipants()).isEqualTo(50); - assertThat(workshop.getCurrentParticipants()).isEqualTo(25); - assertThat(workshop.getPrice()).isEqualTo(new BigDecimal("1500.50")); - } -} diff --git a/src/test/java/com/gbcm/server/impl/resource/CoachingSessionResourceIT.java b/src/test/java/com/gbcm/server/impl/resource/CoachingSessionResourceIT.java deleted file mode 100644 index bbbb4b4..0000000 --- a/src/test/java/com/gbcm/server/impl/resource/CoachingSessionResourceIT.java +++ /dev/null @@ -1,420 +0,0 @@ -package com.gbcm.server.impl.resource; - -import com.gbcm.server.api.dto.session.CreateCoachingSessionDTO; -import com.gbcm.server.api.dto.session.UpdateCoachingSessionDTO; -import com.gbcm.server.api.enums.ServiceType; -import io.quarkus.test.junit.QuarkusTest; -import io.quarkus.test.security.TestSecurity; -import io.restassured.http.ContentType; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.*; - -/** - * Tests d'intégration pour CoachingSessionResource. - * Vérifie le bon fonctionnement des endpoints REST. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@QuarkusTest -@DisplayName("Tests d'intégration CoachingSessionResource") -class CoachingSessionResourceIT { - - private CreateCoachingSessionDTO createSessionDTO; - private UpdateCoachingSessionDTO updateSessionDTO; - - @BeforeEach - void setUp() { - // Préparation des DTOs pour les tests - createSessionDTO = new CreateCoachingSessionDTO(); - createSessionDTO.setTitle("Session Test IT"); - createSessionDTO.setDescription("Description de test IT"); - createSessionDTO.setServiceType(ServiceType.LEADERSHIP_COACHING); - createSessionDTO.setCoachId(1L); - createSessionDTO.setClientId(1L); - createSessionDTO.setScheduledDateTime(LocalDateTime.now().plusDays(1)); - createSessionDTO.setPlannedDurationMinutes(90); - createSessionDTO.setLocation("Bureau GBCM IT"); - createSessionDTO.setPrice(new BigDecimal("225.00")); - createSessionDTO.setObjectives("Développer le leadership IT"); - - updateSessionDTO = new UpdateCoachingSessionDTO(); - updateSessionDTO.setTitle("Session Modifiée IT"); - updateSessionDTO.setDescription("Description modifiée IT"); - updateSessionDTO.setPlannedDurationMinutes(120); - updateSessionDTO.setClientRating(5); - updateSessionDTO.setClientFeedback("Excellente session IT"); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions - récupération des sessions") - void testGetCoachingSessions() { - given() - .when() - .get("/api/coaching-sessions") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("content", notNullValue()) - .body("page", equalTo(0)) - .body("size", equalTo(20)) - .body("totalElements", greaterThan(0)); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions avec paramètres") - void testGetCoachingSessionsWithParams() { - given() - .queryParam("page", 0) - .queryParam("size", 5) - .queryParam("status", "SCHEDULED") - .queryParam("serviceType", "LEADERSHIP_COACHING") - .queryParam("coachId", 1) - .queryParam("clientId", 1) - .queryParam("search", "Session") - .when() - .get("/api/coaching-sessions") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("content", notNullValue()) - .body("page", equalTo(0)) - .body("size", equalTo(5)); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions/{id} - récupération d'une session") - void testGetCoachingSessionById() { - given() - .pathParam("id", 1) - .when() - .get("/api/coaching-sessions/{id}") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("id", equalTo(1)) - .body("title", notNullValue()) - .body("coach", notNullValue()) - .body("client", notNullValue()); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions - création d'une session") - void testCreateCoachingSession() { - given() - .contentType(ContentType.JSON) - .body(createSessionDTO) - .when() - .post("/api/coaching-sessions") - .then() - .statusCode(201) - .contentType(ContentType.JSON) - .body("id", notNullValue()) - .body("title", equalTo("Session Test IT")) - .body("description", equalTo("Description de test IT")) - .body("serviceType", equalTo("LEADERSHIP_COACHING")) - .body("plannedDurationMinutes", equalTo(90)) - .body("location", equalTo("Bureau GBCM IT")) - .body("status", equalTo("SCHEDULED")) - .body("objectives", equalTo("Développer le leadership IT")) - .body("coach", notNullValue()) - .body("client", notNullValue()) - .body("createdAt", notNullValue()) - .body("createdBy", equalTo("system")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions avec données invalides") - void testCreateCoachingSessionWithInvalidData() { - CreateCoachingSessionDTO invalidDTO = new CreateCoachingSessionDTO(); - // DTO vide - données manquantes - - given() - .contentType(ContentType.JSON) - .body(invalidDTO) - .when() - .post("/api/coaching-sessions") - .then() - .statusCode(400); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test PUT /api/coaching-sessions/{id} - mise à jour d'une session") - void testUpdateCoachingSession() { - given() - .pathParam("id", 1) - .contentType(ContentType.JSON) - .body(updateSessionDTO) - .when() - .put("/api/coaching-sessions/{id}") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("id", equalTo(1)) - .body("title", equalTo("Session Modifiée IT")) - .body("description", equalTo("Description modifiée IT")) - .body("plannedDurationMinutes", equalTo(120)) - .body("clientRating", equalTo(5)) - .body("clientFeedback", equalTo("Excellente session IT")) - .body("updatedAt", notNullValue()) - .body("updatedBy", equalTo("system")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test DELETE /api/coaching-sessions/{id} - suppression d'une session") - void testDeleteCoachingSession() { - given() - .pathParam("id", 1) - .when() - .delete("/api/coaching-sessions/{id}") - .then() - .statusCode(204); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions/{id}/start - démarrage d'une session") - void testStartCoachingSession() { - given() - .pathParam("id", 1) - .when() - .post("/api/coaching-sessions/{id}/start") - .then() - .statusCode(200) - .body(equalTo("Session démarrée avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions/{id}/complete - finalisation d'une session") - void testCompleteCoachingSession() { - given() - .pathParam("id", 1) - .when() - .post("/api/coaching-sessions/{id}/complete") - .then() - .statusCode(200) - .body(equalTo("Session terminée avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions/{id}/cancel - annulation d'une session") - void testCancelCoachingSession() { - given() - .pathParam("id", 1) - .when() - .post("/api/coaching-sessions/{id}/cancel") - .then() - .statusCode(200) - .body(equalTo("Session annulée avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions/{id}/reschedule - report d'une session") - void testRescheduleCoachingSession() { - String newDateTime = LocalDateTime.now().plusDays(2).toString(); - - given() - .pathParam("id", 1) - .queryParam("newDateTime", newDateTime) - .when() - .post("/api/coaching-sessions/{id}/reschedule") - .then() - .statusCode(200) - .body(equalTo("Session reportée avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions/{id}/no-show - marquage no-show") - void testMarkNoShow() { - given() - .pathParam("id", 1) - .when() - .post("/api/coaching-sessions/{id}/no-show") - .then() - .statusCode(200) - .body(equalTo("Session marquée comme no-show")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/coaching-sessions/{id}/rate - évaluation d'une session") - void testRateCoachingSession() { - given() - .pathParam("id", 1) - .queryParam("rating", 5) - .queryParam("feedback", "Excellente session") - .when() - .post("/api/coaching-sessions/{id}/rate") - .then() - .statusCode(200) - .body(equalTo("Session évaluée avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions/upcoming - sessions à venir") - void testGetUpcomingSessions() { - given() - .queryParam("page", 0) - .queryParam("size", 10) - .when() - .get("/api/coaching-sessions/upcoming") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("content", notNullValue()) - .body("page", equalTo(0)) - .body("size", equalTo(10)); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions/statistics - statistiques générales") - void testGetSessionStatistics() { - given() - .when() - .get("/api/coaching-sessions/statistics") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("totalSessions", notNullValue()) - .body("scheduledSessions", notNullValue()) - .body("completedSessions", notNullValue()); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions/statistics/coach/{coachId} - statistiques coach") - void testGetCoachStatistics() { - given() - .pathParam("coachId", 1) - .when() - .get("/api/coaching-sessions/statistics/coach/{coachId}") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("coachId", equalTo(1)) - .body("totalSessions", notNullValue()) - .body("averageRating", notNullValue()); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/coaching-sessions/statistics/client/{clientId} - statistiques client") - void testGetClientStatistics() { - given() - .pathParam("clientId", 1) - .when() - .get("/api/coaching-sessions/statistics/client/{clientId}") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("clientId", equalTo(1)) - .body("totalSessions", notNullValue()) - .body("completedSessions", notNullValue()); - } - - @Test - @TestSecurity(user = "client", roles = {"CLIENT"}) - @DisplayName("Test accès client aux sessions") - void testClientAccess() { - given() - .when() - .get("/api/coaching-sessions") - .then() - .statusCode(200) - .contentType(ContentType.JSON); - } - - @Test - @TestSecurity(user = "coach", roles = {"COACH"}) - @DisplayName("Test accès coach aux sessions") - void testCoachAccess() { - given() - .when() - .get("/api/coaching-sessions") - .then() - .statusCode(200) - .contentType(ContentType.JSON); - } - - @Test - @DisplayName("Test accès non autorisé") - void testUnauthorizedAccess() { - given() - .when() - .get("/api/coaching-sessions") - .then() - .statusCode(401); - } - - @Test - @TestSecurity(user = "client", roles = {"CLIENT"}) - @DisplayName("Test accès interdit pour création (CLIENT)") - void testForbiddenAccessForCreation() { - given() - .contentType(ContentType.JSON) - .body(createSessionDTO) - .when() - .post("/api/coaching-sessions") - .then() - .statusCode(403); - } - - @Test - @TestSecurity(user = "client", roles = {"CLIENT"}) - @DisplayName("Test accès interdit pour suppression (CLIENT)") - void testForbiddenAccessForDeletion() { - given() - .pathParam("id", 1) - .when() - .delete("/api/coaching-sessions/{id}") - .then() - .statusCode(403); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test gestion d'erreur avec ID invalide") - void testErrorHandlingWithInvalidId() { - given() - .pathParam("id", 99999) - .when() - .get("/api/coaching-sessions/{id}") - .then() - .statusCode(404); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test évaluation avec note invalide") - void testRateWithInvalidRating() { - given() - .pathParam("id", 1) - .queryParam("rating", 6) // Note invalide - .queryParam("feedback", "Feedback") - .when() - .post("/api/coaching-sessions/{id}/rate") - .then() - .statusCode(400); - } -} diff --git a/src/test/java/com/gbcm/server/impl/resource/WorkshopResourceIT.java b/src/test/java/com/gbcm/server/impl/resource/WorkshopResourceIT.java deleted file mode 100644 index 9b9c864..0000000 --- a/src/test/java/com/gbcm/server/impl/resource/WorkshopResourceIT.java +++ /dev/null @@ -1,364 +0,0 @@ -package com.gbcm.server.impl.resource; - -import com.gbcm.server.api.dto.workshop.CreateWorkshopDTO; -import com.gbcm.server.api.dto.workshop.UpdateWorkshopDTO; -import com.gbcm.server.api.enums.ServiceType; -import com.gbcm.server.api.enums.WorkshopPackage; -import io.quarkus.test.junit.QuarkusTest; -import io.quarkus.test.security.TestSecurity; -import io.restassured.http.ContentType; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.*; - -/** - * Tests d'intégration pour WorkshopResource. - * Vérifie le bon fonctionnement des endpoints REST. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@QuarkusTest -@DisplayName("Tests d'intégration WorkshopResource") -class WorkshopResourceIT { - - private CreateWorkshopDTO createWorkshopDTO; - private UpdateWorkshopDTO updateWorkshopDTO; - - @BeforeEach - void setUp() { - // Préparation des DTOs pour les tests - createWorkshopDTO = new CreateWorkshopDTO(); - createWorkshopDTO.setTitle("Atelier Test IT"); - createWorkshopDTO.setDescription("Description de test IT"); - createWorkshopDTO.setWorkshopPackage(WorkshopPackage.PREMIUM); - createWorkshopDTO.setServiceType(ServiceType.STRATEGY_CONSULTING); - createWorkshopDTO.setCoachId(1L); - createWorkshopDTO.setStartDateTime(LocalDateTime.now().plusDays(1)); - createWorkshopDTO.setEndDateTime(LocalDateTime.now().plusDays(1).plusHours(4)); - createWorkshopDTO.setLocation("Salle de test IT"); - createWorkshopDTO.setMaxParticipants(20); - createWorkshopDTO.setPrice(new BigDecimal("500.00")); - - updateWorkshopDTO = new UpdateWorkshopDTO(); - updateWorkshopDTO.setTitle("Atelier Modifié IT"); - updateWorkshopDTO.setDescription("Description modifiée IT"); - updateWorkshopDTO.setMaxParticipants(25); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/workshops - récupération des ateliers") - void testGetWorkshops() { - given() - .when() - .get("/api/workshops") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("content", notNullValue()) - .body("page", equalTo(0)) - .body("size", equalTo(20)) - .body("totalElements", greaterThan(0)); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/workshops avec paramètres") - void testGetWorkshopsWithParams() { - given() - .queryParam("page", 0) - .queryParam("size", 5) - .queryParam("status", "SCHEDULED") - .queryParam("package", "PREMIUM") - .queryParam("search", "Atelier") - .when() - .get("/api/workshops") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("content", notNullValue()) - .body("page", equalTo(0)) - .body("size", equalTo(5)); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/workshops/{id} - récupération d'un atelier") - void testGetWorkshopById() { - given() - .pathParam("id", 1) - .when() - .get("/api/workshops/{id}") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("id", equalTo(1)) - .body("title", notNullValue()) - .body("coach", notNullValue()); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops - création d'un atelier") - void testCreateWorkshop() { - given() - .contentType(ContentType.JSON) - .body(createWorkshopDTO) - .when() - .post("/api/workshops") - .then() - .statusCode(201) - .contentType(ContentType.JSON) - .body("id", notNullValue()) - .body("title", equalTo("Atelier Test IT")) - .body("description", equalTo("Description de test IT")) - .body("workshopPackage", equalTo("PREMIUM")) - .body("serviceType", equalTo("STRATEGY_CONSULTING")) - .body("maxParticipants", equalTo(20)) - .body("currentParticipants", equalTo(0)) - .body("status", equalTo("SCHEDULED")) - .body("coach", notNullValue()) - .body("createdAt", notNullValue()) - .body("createdBy", equalTo("system")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops avec données invalides") - void testCreateWorkshopWithInvalidData() { - CreateWorkshopDTO invalidDTO = new CreateWorkshopDTO(); - // DTO vide - données manquantes - - given() - .contentType(ContentType.JSON) - .body(invalidDTO) - .when() - .post("/api/workshops") - .then() - .statusCode(400); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test PUT /api/workshops/{id} - mise à jour d'un atelier") - void testUpdateWorkshop() { - given() - .pathParam("id", 1) - .contentType(ContentType.JSON) - .body(updateWorkshopDTO) - .when() - .put("/api/workshops/{id}") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("id", equalTo(1)) - .body("title", equalTo("Atelier Modifié IT")) - .body("description", equalTo("Description modifiée IT")) - .body("maxParticipants", equalTo(25)) - .body("updatedAt", notNullValue()) - .body("updatedBy", equalTo("system")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test DELETE /api/workshops/{id} - suppression d'un atelier") - void testDeleteWorkshop() { - given() - .pathParam("id", 1) - .when() - .delete("/api/workshops/{id}") - .then() - .statusCode(204); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops/{id}/start - démarrage d'un atelier") - void testStartWorkshop() { - given() - .pathParam("id", 1) - .when() - .post("/api/workshops/{id}/start") - .then() - .statusCode(200) - .body(equalTo("Atelier démarré avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops/{id}/complete - finalisation d'un atelier") - void testCompleteWorkshop() { - given() - .pathParam("id", 1) - .when() - .post("/api/workshops/{id}/complete") - .then() - .statusCode(200) - .body(equalTo("Atelier terminé avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops/{id}/cancel - annulation d'un atelier") - void testCancelWorkshop() { - given() - .pathParam("id", 1) - .when() - .post("/api/workshops/{id}/cancel") - .then() - .statusCode(200) - .body(equalTo("Atelier annulé avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops/{id}/postpone - report d'un atelier") - void testPostponeWorkshop() { - given() - .pathParam("id", 1) - .when() - .post("/api/workshops/{id}/postpone") - .then() - .statusCode(200) - .body(equalTo("Atelier reporté avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/workshops/upcoming - ateliers à venir") - void testGetUpcomingWorkshops() { - given() - .queryParam("page", 0) - .queryParam("size", 10) - .when() - .get("/api/workshops/upcoming") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("content", notNullValue()) - .body("page", equalTo(0)) - .body("size", equalTo(10)); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test GET /api/workshops/statistics - statistiques des ateliers") - void testGetWorkshopStatistics() { - given() - .when() - .get("/api/workshops/statistics") - .then() - .statusCode(200) - .contentType(ContentType.JSON) - .body("totalWorkshops", notNullValue()) - .body("scheduledWorkshops", notNullValue()) - .body("completedWorkshops", notNullValue()); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test POST /api/workshops/{id}/participants/{participantId} - ajout participant") - void testAddParticipant() { - given() - .pathParam("id", 1) - .pathParam("participantId", 1) - .when() - .post("/api/workshops/{id}/participants/{participantId}") - .then() - .statusCode(200) - .body(equalTo("Participant ajouté avec succès")); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test DELETE /api/workshops/{id}/participants/{participantId} - retrait participant") - void testRemoveParticipant() { - given() - .pathParam("id", 1) - .pathParam("participantId", 1) - .when() - .delete("/api/workshops/{id}/participants/{participantId}") - .then() - .statusCode(200) - .body(equalTo("Participant retiré avec succès")); - } - - @Test - @TestSecurity(user = "client", roles = {"CLIENT"}) - @DisplayName("Test accès client aux ateliers") - void testClientAccess() { - given() - .when() - .get("/api/workshops") - .then() - .statusCode(200) - .contentType(ContentType.JSON); - } - - @Test - @TestSecurity(user = "coach", roles = {"COACH"}) - @DisplayName("Test accès coach aux ateliers") - void testCoachAccess() { - given() - .when() - .get("/api/workshops") - .then() - .statusCode(200) - .contentType(ContentType.JSON); - } - - @Test - @DisplayName("Test accès non autorisé") - void testUnauthorizedAccess() { - given() - .when() - .get("/api/workshops") - .then() - .statusCode(401); - } - - @Test - @TestSecurity(user = "client", roles = {"CLIENT"}) - @DisplayName("Test accès interdit pour création (CLIENT)") - void testForbiddenAccessForCreation() { - given() - .contentType(ContentType.JSON) - .body(createWorkshopDTO) - .when() - .post("/api/workshops") - .then() - .statusCode(403); - } - - @Test - @TestSecurity(user = "client", roles = {"CLIENT"}) - @DisplayName("Test accès interdit pour suppression (CLIENT)") - void testForbiddenAccessForDeletion() { - given() - .pathParam("id", 1) - .when() - .delete("/api/workshops/{id}") - .then() - .statusCode(403); - } - - @Test - @TestSecurity(user = "admin", roles = {"ADMIN"}) - @DisplayName("Test gestion d'erreur avec ID invalide") - void testErrorHandlingWithInvalidId() { - given() - .pathParam("id", 99999) - .when() - .get("/api/workshops/{id}") - .then() - .statusCode(404); - } -} diff --git a/src/test/java/com/gbcm/server/impl/service/CoachingSessionServiceImplTest.java b/src/test/java/com/gbcm/server/impl/service/CoachingSessionServiceImplTest.java deleted file mode 100644 index 5cbbadb..0000000 --- a/src/test/java/com/gbcm/server/impl/service/CoachingSessionServiceImplTest.java +++ /dev/null @@ -1,370 +0,0 @@ -package com.gbcm.server.impl.service; - -import com.gbcm.server.api.dto.common.PagedResponseDTO; -import com.gbcm.server.api.dto.session.CoachingSessionDTO; -import com.gbcm.server.api.dto.session.CreateCoachingSessionDTO; -import com.gbcm.server.api.dto.session.UpdateCoachingSessionDTO; -import com.gbcm.server.api.enums.ServiceType; -import com.gbcm.server.api.enums.SessionStatus; -import com.gbcm.server.api.exceptions.GBCMException; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -/** - * Tests unitaires pour CoachingSessionServiceImpl. - * Vérifie le bon fonctionnement de toutes les méthodes du service. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@QuarkusTest -@DisplayName("Tests du service CoachingSessionServiceImpl") -class CoachingSessionServiceImplTest { - - @Inject - CoachingSessionServiceImpl coachingSessionService; - - private CreateCoachingSessionDTO createSessionDTO; - private UpdateCoachingSessionDTO updateSessionDTO; - - @BeforeEach - void setUp() { - // Préparation des DTOs pour les tests - createSessionDTO = new CreateCoachingSessionDTO(); - createSessionDTO.setTitle("Session Test"); - createSessionDTO.setDescription("Description de test"); - createSessionDTO.setServiceType(ServiceType.LEADERSHIP_COACHING); - createSessionDTO.setCoachId(1L); - createSessionDTO.setClientId(1L); - createSessionDTO.setScheduledDateTime(LocalDateTime.now().plusDays(1)); - createSessionDTO.setPlannedDurationMinutes(90); - createSessionDTO.setLocation("Bureau GBCM"); - createSessionDTO.setPrice(new BigDecimal("225.00")); - createSessionDTO.setObjectives("Développer le leadership"); - - updateSessionDTO = new UpdateCoachingSessionDTO(); - updateSessionDTO.setTitle("Session Modifiée"); - updateSessionDTO.setDescription("Description modifiée"); - updateSessionDTO.setPlannedDurationMinutes(120); - updateSessionDTO.setClientRating(5); - updateSessionDTO.setClientFeedback("Excellente session"); - } - - @Test - @DisplayName("Test récupération des sessions avec pagination") - void testGetCoachingSessions() throws GBCMException { - PagedResponseDTO result = coachingSessionService.getCoachingSessions( - 0, 10, null, null, null, null, null, null - ); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotEmpty(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - assertThat(result.getTotalElements()).isGreaterThan(0); - } - - @Test - @DisplayName("Test récupération des sessions avec filtres") - void testGetCoachingSessionsWithFilters() throws GBCMException { - PagedResponseDTO result = coachingSessionService.getCoachingSessions( - 0, 5, null, SessionStatus.SCHEDULED, ServiceType.LEADERSHIP_COACHING, 1L, 1L, "Session" - ); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotEmpty(); - assertThat(result.getSize()).isEqualTo(5); - } - - @Test - @DisplayName("Test récupération d'une session par ID") - void testGetCoachingSessionById() throws GBCMException { - CoachingSessionDTO result = coachingSessionService.getCoachingSessionById(1L); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getTitle()).isNotNull(); - assertThat(result.getCoach()).isNotNull(); - assertThat(result.getClient()).isNotNull(); - } - - @Test - @DisplayName("Test récupération d'une session avec ID null") - void testGetCoachingSessionByIdWithNullId() { - assertThatThrownBy(() -> coachingSessionService.getCoachingSessionById(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la session ne peut pas être null"); - } - - @Test - @DisplayName("Test création d'une session") - void testCreateCoachingSession() throws GBCMException { - CoachingSessionDTO result = coachingSessionService.createCoachingSession(createSessionDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isNotNull(); - assertThat(result.getTitle()).isEqualTo("Session Test"); - assertThat(result.getDescription()).isEqualTo("Description de test"); - assertThat(result.getServiceType()).isEqualTo(ServiceType.LEADERSHIP_COACHING); - assertThat(result.getPlannedDurationMinutes()).isEqualTo(90); - assertThat(result.getLocation()).isEqualTo("Bureau GBCM"); - assertThat(result.getPrice()).isEqualTo(new BigDecimal("225.00")); - assertThat(result.getStatus()).isEqualTo(SessionStatus.SCHEDULED); - assertThat(result.getObjectives()).isEqualTo("Développer le leadership"); - assertThat(result.getCoach()).isNotNull(); - assertThat(result.getClient()).isNotNull(); - assertThat(result.getCreatedAt()).isNotNull(); - assertThat(result.getCreatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test création d'une session avec DTO null") - void testCreateCoachingSessionWithNullDTO() { - assertThatThrownBy(() -> coachingSessionService.createCoachingSession(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de création ne peuvent pas être null"); - } - - @Test - @DisplayName("Test création d'une session avec date invalide") - void testCreateCoachingSessionWithInvalidDate() { - createSessionDTO.setScheduledDateTime(LocalDateTime.now().minusDays(1)); // Date dans le passé - - assertThatThrownBy(() -> coachingSessionService.createCoachingSession(createSessionDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La date de session doit être dans le futur"); - } - - @Test - @DisplayName("Test création d'une session avec durée invalide") - void testCreateCoachingSessionWithInvalidDuration() { - createSessionDTO.setPlannedDurationMinutes(10); // Durée trop courte - - assertThatThrownBy(() -> coachingSessionService.createCoachingSession(createSessionDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La durée doit être entre 15 minutes et 8 heures"); - } - - @Test - @DisplayName("Test mise à jour d'une session") - void testUpdateCoachingSession() throws GBCMException { - CoachingSessionDTO result = coachingSessionService.updateCoachingSession(1L, updateSessionDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getTitle()).isEqualTo("Session Modifiée"); - assertThat(result.getDescription()).isEqualTo("Description modifiée"); - assertThat(result.getPlannedDurationMinutes()).isEqualTo(120); - assertThat(result.getClientRating()).isEqualTo(5); - assertThat(result.getClientFeedback()).isEqualTo("Excellente session"); - assertThat(result.getUpdatedAt()).isNotNull(); - assertThat(result.getUpdatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test mise à jour d'une session avec ID null") - void testUpdateCoachingSessionWithNullId() { - assertThatThrownBy(() -> coachingSessionService.updateCoachingSession(null, updateSessionDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la session ne peut pas être null"); - } - - @Test - @DisplayName("Test mise à jour d'une session avec DTO null") - void testUpdateCoachingSessionWithNullDTO() { - assertThatThrownBy(() -> coachingSessionService.updateCoachingSession(1L, null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de mise à jour ne peuvent pas être null"); - } - - @Test - @DisplayName("Test mise à jour avec évaluation invalide") - void testUpdateCoachingSessionWithInvalidRating() { - updateSessionDTO.setClientRating(6); // Note invalide - - assertThatThrownBy(() -> coachingSessionService.updateCoachingSession(1L, updateSessionDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'évaluation doit être entre 1 et 5"); - } - - @Test - @DisplayName("Test suppression d'une session") - void testDeleteCoachingSession() throws GBCMException { - // Ne doit pas lever d'exception - coachingSessionService.deleteCoachingSession(1L); - } - - @Test - @DisplayName("Test suppression d'une session avec ID null") - void testDeleteCoachingSessionWithNullId() { - assertThatThrownBy(() -> coachingSessionService.deleteCoachingSession(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la session ne peut pas être null"); - } - - @Test - @DisplayName("Test démarrage d'une session") - void testStartCoachingSession() throws GBCMException { - // Ne doit pas lever d'exception - coachingSessionService.startCoachingSession(1L); - } - - @Test - @DisplayName("Test finalisation d'une session") - void testCompleteCoachingSession() throws GBCMException { - // Ne doit pas lever d'exception - coachingSessionService.completeCoachingSession(1L); - } - - @Test - @DisplayName("Test annulation d'une session") - void testCancelCoachingSession() throws GBCMException { - // Ne doit pas lever d'exception - coachingSessionService.cancelCoachingSession(1L); - } - - @Test - @DisplayName("Test report d'une session") - void testRescheduleCoachingSession() throws GBCMException { - LocalDateTime newDateTime = LocalDateTime.now().plusDays(2); - - // Ne doit pas lever d'exception - coachingSessionService.rescheduleCoachingSession(1L, newDateTime); - } - - @Test - @DisplayName("Test report d'une session avec date invalide") - void testRescheduleCoachingSessionWithInvalidDate() { - LocalDateTime pastDate = LocalDateTime.now().minusDays(1); - - assertThatThrownBy(() -> coachingSessionService.rescheduleCoachingSession(1L, pastDate)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La nouvelle date doit être dans le futur"); - } - - @Test - @DisplayName("Test marquage no-show") - void testMarkNoShow() throws GBCMException { - // Ne doit pas lever d'exception - coachingSessionService.markNoShow(1L); - } - - @Test - @DisplayName("Test évaluation d'une session") - void testRateCoachingSession() throws GBCMException { - // Ne doit pas lever d'exception - coachingSessionService.rateCoachingSession(1L, 5, "Excellente session"); - } - - @Test - @DisplayName("Test évaluation avec note invalide") - void testRateCoachingSessionWithInvalidRating() { - assertThatThrownBy(() -> coachingSessionService.rateCoachingSession(1L, 6, "Feedback")) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La note doit être entre 1 et 5"); - - assertThatThrownBy(() -> coachingSessionService.rateCoachingSession(1L, 0, "Feedback")) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La note doit être entre 1 et 5"); - } - - @Test - @DisplayName("Test récupération des sessions à venir") - void testGetUpcomingSessions() throws GBCMException { - PagedResponseDTO result = coachingSessionService.getUpcomingSessions(0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des sessions par coach") - void testGetSessionsByCoach() throws GBCMException { - PagedResponseDTO result = coachingSessionService.getSessionsByCoach(1L, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } - - @Test - @DisplayName("Test récupération des sessions par client") - void testGetSessionsByClient() throws GBCMException { - PagedResponseDTO result = coachingSessionService.getSessionsByClient(1L, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } - - @Test - @DisplayName("Test récupération des sessions par plage de dates") - void testGetSessionsByDateRange() throws GBCMException { - LocalDateTime start = LocalDateTime.now(); - LocalDateTime end = LocalDateTime.now().plusDays(30); - - PagedResponseDTO result = coachingSessionService.getSessionsByDateRange(start, end, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques générales") - void testGetSessionStatistics() throws GBCMException { - Object result = coachingSessionService.getSessionStatistics(); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques d'un coach") - void testGetCoachStatistics() throws GBCMException { - Object result = coachingSessionService.getCoachStatistics(1L); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques d'un coach avec ID null") - void testGetCoachStatisticsWithNullId() { - assertThatThrownBy(() -> coachingSessionService.getCoachStatistics(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant du coach ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des statistiques d'un client") - void testGetClientStatistics() throws GBCMException { - Object result = coachingSessionService.getClientStatistics(1L); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques d'un client avec ID null") - void testGetClientStatisticsWithNullId() { - assertThatThrownBy(() -> coachingSessionService.getClientStatistics(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant du client ne peut pas être null"); - } - - @Test - @DisplayName("Test recherche de sessions") - void testSearchCoachingSessions() throws GBCMException { - PagedResponseDTO result = coachingSessionService.searchCoachingSessions("critères de recherche"); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } -} diff --git a/src/test/java/com/gbcm/server/impl/service/WorkshopServiceImplTest.java b/src/test/java/com/gbcm/server/impl/service/WorkshopServiceImplTest.java deleted file mode 100644 index e7b41da..0000000 --- a/src/test/java/com/gbcm/server/impl/service/WorkshopServiceImplTest.java +++ /dev/null @@ -1,307 +0,0 @@ -package com.gbcm.server.impl.service; - -import com.gbcm.server.api.dto.common.PagedResponseDTO; -import com.gbcm.server.api.dto.workshop.CreateWorkshopDTO; -import com.gbcm.server.api.dto.workshop.UpdateWorkshopDTO; -import com.gbcm.server.api.dto.workshop.WorkshopDTO; -import com.gbcm.server.api.enums.ServiceType; -import com.gbcm.server.api.enums.WorkshopPackage; -import com.gbcm.server.api.exceptions.GBCMException; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDateTime; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -/** - * Tests unitaires pour WorkshopServiceImpl. - * Vérifie le bon fonctionnement de toutes les méthodes du service. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@QuarkusTest -@DisplayName("Tests du service WorkshopServiceImpl") -class WorkshopServiceImplTest { - - @Inject - WorkshopServiceImpl workshopService; - - private CreateWorkshopDTO createWorkshopDTO; - private UpdateWorkshopDTO updateWorkshopDTO; - - @BeforeEach - void setUp() { - // Préparation des DTOs pour les tests - createWorkshopDTO = new CreateWorkshopDTO(); - createWorkshopDTO.setTitle("Atelier Test"); - createWorkshopDTO.setDescription("Description de test"); - createWorkshopDTO.setWorkshopPackage(WorkshopPackage.PREMIUM); - createWorkshopDTO.setServiceType(ServiceType.STRATEGY_CONSULTING); - createWorkshopDTO.setCoachId(1L); - createWorkshopDTO.setStartDateTime(LocalDateTime.now().plusDays(1)); - createWorkshopDTO.setEndDateTime(LocalDateTime.now().plusDays(1).plusHours(4)); - createWorkshopDTO.setLocation("Salle de test"); - createWorkshopDTO.setMaxParticipants(20); - createWorkshopDTO.setPrice(new BigDecimal("500.00")); - - updateWorkshopDTO = new UpdateWorkshopDTO(); - updateWorkshopDTO.setTitle("Atelier Modifié"); - updateWorkshopDTO.setDescription("Description modifiée"); - updateWorkshopDTO.setMaxParticipants(25); - } - - @Test - @DisplayName("Test récupération des ateliers avec pagination") - void testGetWorkshops() throws GBCMException { - PagedResponseDTO result = workshopService.getWorkshops(0, 10, null, null, null, null, null); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotEmpty(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - assertThat(result.getTotalElements()).isGreaterThan(0); - } - - @Test - @DisplayName("Test récupération des ateliers avec filtres") - void testGetWorkshopsWithFilters() throws GBCMException { - PagedResponseDTO result = workshopService.getWorkshops( - 0, 5, null, "SCHEDULED", WorkshopPackage.PREMIUM, 1L, "Atelier" - ); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotEmpty(); - assertThat(result.getSize()).isEqualTo(5); - } - - @Test - @DisplayName("Test récupération d'un atelier par ID") - void testGetWorkshopById() throws GBCMException { - WorkshopDTO result = workshopService.getWorkshopById(1L); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getTitle()).isNotNull(); - assertThat(result.getCoach()).isNotNull(); - } - - @Test - @DisplayName("Test récupération d'un atelier avec ID null") - void testGetWorkshopByIdWithNullId() { - assertThatThrownBy(() -> workshopService.getWorkshopById(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'atelier ne peut pas être null"); - } - - @Test - @DisplayName("Test création d'un atelier") - void testCreateWorkshop() throws GBCMException { - WorkshopDTO result = workshopService.createWorkshop(createWorkshopDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isNotNull(); - assertThat(result.getTitle()).isEqualTo("Atelier Test"); - assertThat(result.getDescription()).isEqualTo("Description de test"); - assertThat(result.getWorkshopPackage()).isEqualTo(WorkshopPackage.PREMIUM); - assertThat(result.getServiceType()).isEqualTo(ServiceType.STRATEGY_CONSULTING); - assertThat(result.getMaxParticipants()).isEqualTo(20); - assertThat(result.getCurrentParticipants()).isEqualTo(0); - assertThat(result.getPrice()).isEqualTo(new BigDecimal("500.00")); - assertThat(result.getStatus()).isEqualTo("SCHEDULED"); - assertThat(result.getCoach()).isNotNull(); - assertThat(result.getCreatedAt()).isNotNull(); - assertThat(result.getCreatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test création d'un atelier avec DTO null") - void testCreateWorkshopWithNullDTO() { - assertThatThrownBy(() -> workshopService.createWorkshop(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de création ne peuvent pas être null"); - } - - @Test - @DisplayName("Test création d'un atelier avec dates invalides") - void testCreateWorkshopWithInvalidDates() { - createWorkshopDTO.setStartDateTime(LocalDateTime.now().plusDays(1)); - createWorkshopDTO.setEndDateTime(LocalDateTime.now()); // Date de fin avant début - - assertThatThrownBy(() -> workshopService.createWorkshop(createWorkshopDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La date de fin doit être après la date de début"); - } - - @Test - @DisplayName("Test mise à jour d'un atelier") - void testUpdateWorkshop() throws GBCMException { - WorkshopDTO result = workshopService.updateWorkshop(1L, updateWorkshopDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getTitle()).isEqualTo("Atelier Modifié"); - assertThat(result.getDescription()).isEqualTo("Description modifiée"); - assertThat(result.getMaxParticipants()).isEqualTo(25); - assertThat(result.getUpdatedAt()).isNotNull(); - assertThat(result.getUpdatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test mise à jour d'un atelier avec ID null") - void testUpdateWorkshopWithNullId() { - assertThatThrownBy(() -> workshopService.updateWorkshop(null, updateWorkshopDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'atelier ne peut pas être null"); - } - - @Test - @DisplayName("Test mise à jour d'un atelier avec DTO null") - void testUpdateWorkshopWithNullDTO() { - assertThatThrownBy(() -> workshopService.updateWorkshop(1L, null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de mise à jour ne peuvent pas être null"); - } - - @Test - @DisplayName("Test suppression d'un atelier") - void testDeleteWorkshop() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.deleteWorkshop(1L); - } - - @Test - @DisplayName("Test suppression d'un atelier avec ID null") - void testDeleteWorkshopWithNullId() { - assertThatThrownBy(() -> workshopService.deleteWorkshop(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'atelier ne peut pas être null"); - } - - @Test - @DisplayName("Test démarrage d'un atelier") - void testStartWorkshop() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.startWorkshop(1L); - } - - @Test - @DisplayName("Test démarrage d'un atelier avec ID null") - void testStartWorkshopWithNullId() { - assertThatThrownBy(() -> workshopService.startWorkshop(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'atelier ne peut pas être null"); - } - - @Test - @DisplayName("Test finalisation d'un atelier") - void testCompleteWorkshop() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.completeWorkshop(1L); - } - - @Test - @DisplayName("Test annulation d'un atelier") - void testCancelWorkshop() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.cancelWorkshop(1L); - } - - @Test - @DisplayName("Test report d'un atelier") - void testPostponeWorkshop() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.postponeWorkshop(1L); - } - - @Test - @DisplayName("Test ajout d'un participant") - void testAddParticipant() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.addParticipant(1L, 1L); - } - - @Test - @DisplayName("Test ajout d'un participant avec IDs null") - void testAddParticipantWithNullIds() { - assertThatThrownBy(() -> workshopService.addParticipant(null, 1L)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les identifiants ne peuvent pas être null"); - - assertThatThrownBy(() -> workshopService.addParticipant(1L, null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les identifiants ne peuvent pas être null"); - } - - @Test - @DisplayName("Test retrait d'un participant") - void testRemoveParticipant() throws GBCMException { - // Ne doit pas lever d'exception - workshopService.removeParticipant(1L, 1L); - } - - @Test - @DisplayName("Test récupération des ateliers à venir") - void testGetUpcomingWorkshops() throws GBCMException { - PagedResponseDTO result = workshopService.getUpcomingWorkshops(0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des ateliers par coach") - void testGetWorkshopsByCoach() throws GBCMException { - PagedResponseDTO result = workshopService.getWorkshopsByCoach(1L, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } - - @Test - @DisplayName("Test récupération des ateliers par package") - void testGetWorkshopsByPackage() throws GBCMException { - PagedResponseDTO result = workshopService.getWorkshopsByPackage(WorkshopPackage.PREMIUM, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } - - @Test - @DisplayName("Test récupération des ateliers par plage de dates") - void testGetWorkshopsByDateRange() throws GBCMException { - LocalDateTime start = LocalDateTime.now(); - LocalDateTime end = LocalDateTime.now().plusDays(30); - - PagedResponseDTO result = workshopService.getWorkshopsByDateRange(start, end, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques") - void testGetWorkshopStatistics() throws GBCMException { - Object result = workshopService.getWorkshopStatistics(); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test recherche d'ateliers") - void testSearchWorkshops() throws GBCMException { - PagedResponseDTO result = workshopService.searchWorkshops("critères de recherche"); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - } -} diff --git a/src/test/java/com/gbcm/server/impl/service/billing/InvoiceServiceImplTest.java b/src/test/java/com/gbcm/server/impl/service/billing/InvoiceServiceImplTest.java deleted file mode 100644 index c36c410..0000000 --- a/src/test/java/com/gbcm/server/impl/service/billing/InvoiceServiceImplTest.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.gbcm.server.impl.service.billing; - -import com.gbcm.server.api.dto.billing.CreateInvoiceDTO; -import com.gbcm.server.api.dto.billing.InvoiceDTO; -import com.gbcm.server.api.dto.billing.UpdateInvoiceDTO; -import com.gbcm.server.api.enums.InvoiceStatus; -import com.gbcm.server.api.exceptions.GBCMException; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.math.BigDecimal; -import java.time.LocalDate; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -/** - * Tests unitaires pour InvoiceServiceImpl. - * Vérifie le bon fonctionnement de toutes les méthodes du service. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@QuarkusTest -@DisplayName("Tests du service InvoiceServiceImpl") -class InvoiceServiceImplTest { - - @Inject - InvoiceServiceImpl invoiceService; - - private CreateInvoiceDTO createInvoiceDTO; - private UpdateInvoiceDTO updateInvoiceDTO; - - @BeforeEach - void setUp() { - // Préparation des DTOs pour les tests - createInvoiceDTO = new CreateInvoiceDTO(); - createInvoiceDTO.setClientId(1L); - createInvoiceDTO.setInvoiceNumber("INV-2025-001"); - createInvoiceDTO.setDescription("Facture de test"); - createInvoiceDTO.setAmount(new BigDecimal("1500.00")); - createInvoiceDTO.setTaxAmount(new BigDecimal("300.00")); - createInvoiceDTO.setTotalAmount(new BigDecimal("1800.00")); - createInvoiceDTO.setIssueDate(LocalDate.now()); - createInvoiceDTO.setDueDate(LocalDate.now().plusDays(30)); - - updateInvoiceDTO = new UpdateInvoiceDTO(); - updateInvoiceDTO.setDescription("Facture modifiée"); - updateInvoiceDTO.setAmount(new BigDecimal("2000.00")); - updateInvoiceDTO.setTaxAmount(new BigDecimal("400.00")); - updateInvoiceDTO.setTotalAmount(new BigDecimal("2400.00")); - updateInvoiceDTO.setStatus(InvoiceStatus.PAID); - } - - @Test - @DisplayName("Test création d'une facture") - void testCreateInvoice() throws GBCMException { - InvoiceDTO result = invoiceService.createInvoice(createInvoiceDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isNotNull(); - assertThat(result.getClientId()).isEqualTo(1L); - assertThat(result.getInvoiceNumber()).isEqualTo("INV-2025-001"); - assertThat(result.getDescription()).isEqualTo("Facture de test"); - assertThat(result.getAmount()).isEqualTo(new BigDecimal("1500.00")); - assertThat(result.getTaxAmount()).isEqualTo(new BigDecimal("300.00")); - assertThat(result.getTotalAmount()).isEqualTo(new BigDecimal("1800.00")); - assertThat(result.getStatus()).isEqualTo(InvoiceStatus.DRAFT); - assertThat(result.getIssueDate()).isEqualTo(LocalDate.now()); - assertThat(result.getDueDate()).isEqualTo(LocalDate.now().plusDays(30)); - assertThat(result.getCreatedAt()).isNotNull(); - assertThat(result.getCreatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test création d'une facture avec DTO null") - void testCreateInvoiceWithNullDTO() { - assertThatThrownBy(() -> invoiceService.createInvoice(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de création ne peuvent pas être null"); - } - - @Test - @DisplayName("Test création d'une facture avec montant négatif") - void testCreateInvoiceWithNegativeAmount() { - createInvoiceDTO.setAmount(new BigDecimal("-100.00")); - - assertThatThrownBy(() -> invoiceService.createInvoice(createInvoiceDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Le montant ne peut pas être négatif"); - } - - @Test - @DisplayName("Test création d'une facture avec date d'échéance invalide") - void testCreateInvoiceWithInvalidDueDate() { - createInvoiceDTO.setDueDate(LocalDate.now().minusDays(1)); // Date dans le passé - - assertThatThrownBy(() -> invoiceService.createInvoice(createInvoiceDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La date d'échéance doit être après la date d'émission"); - } - - @Test - @DisplayName("Test récupération d'une facture par ID") - void testGetInvoiceById() throws GBCMException { - InvoiceDTO result = invoiceService.getInvoiceById(1L); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getInvoiceNumber()).isNotNull(); - assertThat(result.getClientId()).isNotNull(); - assertThat(result.getAmount()).isNotNull(); - assertThat(result.getStatus()).isNotNull(); - } - - @Test - @DisplayName("Test récupération d'une facture avec ID null") - void testGetInvoiceByIdWithNullId() { - assertThatThrownBy(() -> invoiceService.getInvoiceById(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la facture ne peut pas être null"); - } - - @Test - @DisplayName("Test mise à jour d'une facture") - void testUpdateInvoice() throws GBCMException { - InvoiceDTO result = invoiceService.updateInvoice(1L, updateInvoiceDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getDescription()).isEqualTo("Facture modifiée"); - assertThat(result.getAmount()).isEqualTo(new BigDecimal("2000.00")); - assertThat(result.getTaxAmount()).isEqualTo(new BigDecimal("400.00")); - assertThat(result.getTotalAmount()).isEqualTo(new BigDecimal("2400.00")); - assertThat(result.getStatus()).isEqualTo(InvoiceStatus.PAID); - assertThat(result.getUpdatedAt()).isNotNull(); - assertThat(result.getUpdatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test mise à jour d'une facture avec ID null") - void testUpdateInvoiceWithNullId() { - assertThatThrownBy(() -> invoiceService.updateInvoice(null, updateInvoiceDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la facture ne peut pas être null"); - } - - @Test - @DisplayName("Test mise à jour d'une facture avec DTO null") - void testUpdateInvoiceWithNullDTO() { - assertThatThrownBy(() -> invoiceService.updateInvoice(1L, null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de mise à jour ne peuvent pas être null"); - } - - @Test - @DisplayName("Test suppression d'une facture") - void testDeleteInvoice() throws GBCMException { - // Ne doit pas lever d'exception - invoiceService.deleteInvoice(1L); - } - - @Test - @DisplayName("Test suppression d'une facture avec ID null") - void testDeleteInvoiceWithNullId() { - assertThatThrownBy(() -> invoiceService.deleteInvoice(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la facture ne peut pas être null"); - } - - @Test - @DisplayName("Test envoi d'une facture") - void testSendInvoice() throws GBCMException { - // Ne doit pas lever d'exception - invoiceService.sendInvoice(1L); - } - - @Test - @DisplayName("Test envoi d'une facture avec ID null") - void testSendInvoiceWithNullId() { - assertThatThrownBy(() -> invoiceService.sendInvoice(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la facture ne peut pas être null"); - } - - @Test - @DisplayName("Test marquage d'une facture comme payée") - void testMarkAsPaid() throws GBCMException { - // Ne doit pas lever d'exception - invoiceService.markAsPaid(1L); - } - - @Test - @DisplayName("Test marquage d'une facture comme payée avec ID null") - void testMarkAsPaidWithNullId() { - assertThatThrownBy(() -> invoiceService.markAsPaid(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la facture ne peut pas être null"); - } - - @Test - @DisplayName("Test annulation d'une facture") - void testCancelInvoice() throws GBCMException { - // Ne doit pas lever d'exception - invoiceService.cancelInvoice(1L); - } - - @Test - @DisplayName("Test récupération des factures d'un client") - void testGetInvoicesByClient() throws GBCMException { - var result = invoiceService.getInvoicesByClient(1L, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des factures d'un client avec ID null") - void testGetInvoicesByClientWithNullId() { - assertThatThrownBy(() -> invoiceService.getInvoicesByClient(null, 0, 10)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant du client ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des factures par statut") - void testGetInvoicesByStatus() throws GBCMException { - var result = invoiceService.getInvoicesByStatus(InvoiceStatus.PENDING, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des factures par statut avec statut null") - void testGetInvoicesByStatusWithNullStatus() { - assertThatThrownBy(() -> invoiceService.getInvoicesByStatus(null, 0, 10)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Le statut ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des factures par plage de dates") - void testGetInvoicesByDateRange() throws GBCMException { - LocalDate startDate = LocalDate.now().minusDays(30); - LocalDate endDate = LocalDate.now(); - - var result = invoiceService.getInvoicesByDateRange(startDate, endDate, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des factures en retard") - void testGetOverdueInvoices() throws GBCMException { - var result = invoiceService.getOverdueInvoices(0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test calcul du total des factures d'un client") - void testCalculateClientTotal() throws GBCMException { - BigDecimal result = invoiceService.calculateClientTotal(1L); - - assertThat(result).isNotNull(); - assertThat(result).isGreaterThanOrEqualTo(BigDecimal.ZERO); - } - - @Test - @DisplayName("Test calcul du total des factures d'un client avec ID null") - void testCalculateClientTotalWithNullId() { - assertThatThrownBy(() -> invoiceService.calculateClientTotal(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant du client ne peut pas être null"); - } - - @Test - @DisplayName("Test génération du numéro de facture") - void testGenerateInvoiceNumber() throws GBCMException { - String result = invoiceService.generateInvoiceNumber(); - - assertThat(result).isNotNull(); - assertThat(result).isNotEmpty(); - assertThat(result).startsWith("INV-"); - } - - @Test - @DisplayName("Test récupération des statistiques de facturation") - void testGetInvoiceStatistics() throws GBCMException { - Object result = invoiceService.getInvoiceStatistics(); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques par client") - void testGetClientInvoiceStatistics() throws GBCMException { - Object result = invoiceService.getClientInvoiceStatistics(1L); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques par client avec ID null") - void testGetClientInvoiceStatisticsWithNullId() { - assertThatThrownBy(() -> invoiceService.getClientInvoiceStatistics(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant du client ne peut pas être null"); - } - - @Test - @DisplayName("Test recherche de factures") - void testSearchInvoices() throws GBCMException { - var result = invoiceService.searchInvoices("test", 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test recherche de factures avec terme null") - void testSearchInvoicesWithNullTerm() { - assertThatThrownBy(() -> invoiceService.searchInvoices(null, 0, 10)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Le terme de recherche ne peut pas être null"); - } - - @Test - @DisplayName("Test export des factures") - void testExportInvoices() throws GBCMException { - byte[] result = invoiceService.exportInvoices("PDF"); - - assertThat(result).isNotNull(); - assertThat(result.length).isGreaterThan(0); - } - - @Test - @DisplayName("Test export des factures avec format null") - void testExportInvoicesWithNullFormat() { - assertThatThrownBy(() -> invoiceService.exportInvoices(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Le format d'export ne peut pas être null"); - } -} diff --git a/src/test/java/com/gbcm/server/impl/service/notification/NotificationServiceImplTest.java b/src/test/java/com/gbcm/server/impl/service/notification/NotificationServiceImplTest.java deleted file mode 100644 index 5f0f422..0000000 --- a/src/test/java/com/gbcm/server/impl/service/notification/NotificationServiceImplTest.java +++ /dev/null @@ -1,339 +0,0 @@ -package com.gbcm.server.impl.service.notification; - -import com.gbcm.server.api.dto.notification.CreateNotificationDTO; -import com.gbcm.server.api.dto.notification.NotificationDTO; -import com.gbcm.server.api.dto.notification.UpdateNotificationDTO; -import com.gbcm.server.api.enums.NotificationStatus; -import com.gbcm.server.api.enums.NotificationType; -import com.gbcm.server.api.exceptions.GBCMException; -import io.quarkus.test.junit.QuarkusTest; -import jakarta.inject.Inject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.time.LocalDateTime; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -/** - * Tests unitaires pour NotificationServiceImpl. - * Vérifie le bon fonctionnement de toutes les méthodes du service. - * - * @author GBCM Development Team - * @version 1.0 - * @since 1.0 - */ -@QuarkusTest -@DisplayName("Tests du service NotificationServiceImpl") -class NotificationServiceImplTest { - - @Inject - NotificationServiceImpl notificationService; - - private CreateNotificationDTO createNotificationDTO; - private UpdateNotificationDTO updateNotificationDTO; - - @BeforeEach - void setUp() { - // Préparation des DTOs pour les tests - createNotificationDTO = new CreateNotificationDTO(); - createNotificationDTO.setTitle("Notification Test"); - createNotificationDTO.setMessage("Message de test"); - createNotificationDTO.setType(NotificationType.INFO); - createNotificationDTO.setUserId(1L); - createNotificationDTO.setScheduledAt(LocalDateTime.now().plusMinutes(5)); - - updateNotificationDTO = new UpdateNotificationDTO(); - updateNotificationDTO.setTitle("Notification Modifiée"); - updateNotificationDTO.setMessage("Message modifié"); - updateNotificationDTO.setStatus(NotificationStatus.READ); - } - - @Test - @DisplayName("Test création d'une notification") - void testCreateNotification() throws GBCMException { - NotificationDTO result = notificationService.createNotification(createNotificationDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isNotNull(); - assertThat(result.getTitle()).isEqualTo("Notification Test"); - assertThat(result.getMessage()).isEqualTo("Message de test"); - assertThat(result.getType()).isEqualTo(NotificationType.INFO); - assertThat(result.getStatus()).isEqualTo(NotificationStatus.PENDING); - assertThat(result.getUserId()).isEqualTo(1L); - assertThat(result.getCreatedAt()).isNotNull(); - assertThat(result.getCreatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test création d'une notification avec DTO null") - void testCreateNotificationWithNullDTO() { - assertThatThrownBy(() -> notificationService.createNotification(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de création ne peuvent pas être null"); - } - - @Test - @DisplayName("Test récupération d'une notification par ID") - void testGetNotificationById() throws GBCMException { - NotificationDTO result = notificationService.getNotificationById(1L); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getTitle()).isNotNull(); - assertThat(result.getMessage()).isNotNull(); - assertThat(result.getType()).isNotNull(); - assertThat(result.getStatus()).isNotNull(); - } - - @Test - @DisplayName("Test récupération d'une notification avec ID null") - void testGetNotificationByIdWithNullId() { - assertThatThrownBy(() -> notificationService.getNotificationById(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la notification ne peut pas être null"); - } - - @Test - @DisplayName("Test mise à jour d'une notification") - void testUpdateNotification() throws GBCMException { - NotificationDTO result = notificationService.updateNotification(1L, updateNotificationDTO); - - assertThat(result).isNotNull(); - assertThat(result.getId()).isEqualTo(1L); - assertThat(result.getTitle()).isEqualTo("Notification Modifiée"); - assertThat(result.getMessage()).isEqualTo("Message modifié"); - assertThat(result.getStatus()).isEqualTo(NotificationStatus.READ); - assertThat(result.getUpdatedAt()).isNotNull(); - assertThat(result.getUpdatedBy()).isEqualTo("system"); - } - - @Test - @DisplayName("Test mise à jour d'une notification avec ID null") - void testUpdateNotificationWithNullId() { - assertThatThrownBy(() -> notificationService.updateNotification(null, updateNotificationDTO)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la notification ne peut pas être null"); - } - - @Test - @DisplayName("Test mise à jour d'une notification avec DTO null") - void testUpdateNotificationWithNullDTO() { - assertThatThrownBy(() -> notificationService.updateNotification(1L, null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Les données de mise à jour ne peuvent pas être null"); - } - - @Test - @DisplayName("Test suppression d'une notification") - void testDeleteNotification() throws GBCMException { - // Ne doit pas lever d'exception - notificationService.deleteNotification(1L); - } - - @Test - @DisplayName("Test suppression d'une notification avec ID null") - void testDeleteNotificationWithNullId() { - assertThatThrownBy(() -> notificationService.deleteNotification(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la notification ne peut pas être null"); - } - - @Test - @DisplayName("Test marquage comme lue") - void testMarkAsRead() throws GBCMException { - // Ne doit pas lever d'exception - notificationService.markAsRead(1L); - } - - @Test - @DisplayName("Test marquage comme lue avec ID null") - void testMarkAsReadWithNullId() { - assertThatThrownBy(() -> notificationService.markAsRead(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la notification ne peut pas être null"); - } - - @Test - @DisplayName("Test marquage comme non lue") - void testMarkAsUnread() throws GBCMException { - // Ne doit pas lever d'exception - notificationService.markAsUnread(1L); - } - - @Test - @DisplayName("Test envoi d'une notification") - void testSendNotification() throws GBCMException { - // Ne doit pas lever d'exception - notificationService.sendNotification(1L); - } - - @Test - @DisplayName("Test envoi d'une notification avec ID null") - void testSendNotificationWithNullId() { - assertThatThrownBy(() -> notificationService.sendNotification(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de la notification ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des notifications d'un utilisateur") - void testGetNotificationsByUser() throws GBCMException { - var result = notificationService.getNotificationsByUser(1L, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des notifications d'un utilisateur avec ID null") - void testGetNotificationsByUserWithNullId() { - assertThatThrownBy(() -> notificationService.getNotificationsByUser(null, 0, 10)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'utilisateur ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des notifications non lues") - void testGetUnreadNotifications() throws GBCMException { - var result = notificationService.getUnreadNotifications(1L, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des notifications par type") - void testGetNotificationsByType() throws GBCMException { - var result = notificationService.getNotificationsByType(NotificationType.INFO, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test récupération des notifications par type avec type null") - void testGetNotificationsByTypeWithNullType() { - assertThatThrownBy(() -> notificationService.getNotificationsByType(null, 0, 10)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Le type de notification ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des notifications par statut") - void testGetNotificationsByStatus() throws GBCMException { - var result = notificationService.getNotificationsByStatus(NotificationStatus.PENDING, 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test comptage des notifications non lues") - void testCountUnreadNotifications() throws GBCMException { - Long count = notificationService.countUnreadNotifications(1L); - - assertThat(count).isNotNull(); - assertThat(count).isGreaterThanOrEqualTo(0); - } - - @Test - @DisplayName("Test comptage des notifications non lues avec ID null") - void testCountUnreadNotificationsWithNullId() { - assertThatThrownBy(() -> notificationService.countUnreadNotifications(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'utilisateur ne peut pas être null"); - } - - @Test - @DisplayName("Test marquage de toutes les notifications comme lues") - void testMarkAllAsRead() throws GBCMException { - // Ne doit pas lever d'exception - notificationService.markAllAsRead(1L); - } - - @Test - @DisplayName("Test marquage de toutes les notifications comme lues avec ID null") - void testMarkAllAsReadWithNullId() { - assertThatThrownBy(() -> notificationService.markAllAsRead(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'utilisateur ne peut pas être null"); - } - - @Test - @DisplayName("Test suppression des notifications anciennes") - void testDeleteOldNotifications() throws GBCMException { - LocalDateTime cutoffDate = LocalDateTime.now().minusDays(30); - - // Ne doit pas lever d'exception - notificationService.deleteOldNotifications(cutoffDate); - } - - @Test - @DisplayName("Test suppression des notifications anciennes avec date null") - void testDeleteOldNotificationsWithNullDate() { - assertThatThrownBy(() -> notificationService.deleteOldNotifications(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("La date de coupure ne peut pas être null"); - } - - @Test - @DisplayName("Test traitement des notifications programmées") - void testProcessScheduledNotifications() throws GBCMException { - // Ne doit pas lever d'exception - notificationService.processScheduledNotifications(); - } - - @Test - @DisplayName("Test recherche de notifications") - void testSearchNotifications() throws GBCMException { - var result = notificationService.searchNotifications("test", 0, 10); - - assertThat(result).isNotNull(); - assertThat(result.getContent()).isNotNull(); - assertThat(result.getPage()).isEqualTo(0); - assertThat(result.getSize()).isEqualTo(10); - } - - @Test - @DisplayName("Test recherche de notifications avec terme null") - void testSearchNotificationsWithNullTerm() { - assertThatThrownBy(() -> notificationService.searchNotifications(null, 0, 10)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("Le terme de recherche ne peut pas être null"); - } - - @Test - @DisplayName("Test récupération des statistiques de notifications") - void testGetNotificationStatistics() throws GBCMException { - Object result = notificationService.getNotificationStatistics(); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques par utilisateur") - void testGetUserNotificationStatistics() throws GBCMException { - Object result = notificationService.getUserNotificationStatistics(1L); - - assertThat(result).isNotNull(); - } - - @Test - @DisplayName("Test récupération des statistiques par utilisateur avec ID null") - void testGetUserNotificationStatisticsWithNullId() { - assertThatThrownBy(() -> notificationService.getUserNotificationStatistics(null)) - .isInstanceOf(GBCMException.class) - .hasMessageContaining("L'identifiant de l'utilisateur ne peut pas être null"); - } -}