package dev.lions.unionflow.server.entity; import dev.lions.unionflow.server.api.enums.paiement.StatutIntentionPaiement; import dev.lions.unionflow.server.api.enums.paiement.TypeObjetIntentionPaiement; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.lang.reflect.Method; import java.math.BigDecimal; import java.time.LocalDateTime; import static org.assertj.core.api.Assertions.assertThat; /** * Tests pour {@link IntentionPaiement} — méthode onCreate(). */ @DisplayName("IntentionPaiement — onCreate") class IntentionPaiementBranchTest { // ── onCreate() ──────────────────────────────────────────────────────────── @Test @DisplayName("onCreate: dateExpiration déjà définie → conservée") void onCreate_dateExpirationDejaDefinie_conservee() throws Exception { IntentionPaiement ip = new IntentionPaiement(); ip.setMontantTotal(new BigDecimal("5000.00")); ip.setTypeObjet(TypeObjetIntentionPaiement.COTISATION); LocalDateTime expirationFixe = LocalDateTime.of(2025, 12, 31, 23, 59); ip.setDateExpiration(expirationFixe); Method onCreate = IntentionPaiement.class.getDeclaredMethod("onCreate"); onCreate.setAccessible(true); onCreate.invoke(ip); // dateExpiration doit rester la valeur fixée, pas être remplacée assertThat(ip.getDateExpiration()).isEqualTo(expirationFixe); // les autres defaults sont bien positionnés assertThat(ip.getStatut()).isEqualTo(StatutIntentionPaiement.INITIEE); assertThat(ip.getCodeDevise()).isEqualTo("XOF"); } @Test @DisplayName("onCreate: dateExpiration null → positionnée à now+30min") void onCreate_dateExpirationNull_setToNowPlusTrente() throws Exception { IntentionPaiement ip = new IntentionPaiement(); ip.setMontantTotal(new BigDecimal("5000.00")); ip.setTypeObjet(TypeObjetIntentionPaiement.COTISATION); ip.setStatut(null); ip.setCodeDevise(null); ip.setDateExpiration(null); LocalDateTime avant = LocalDateTime.now(); Method onCreate = IntentionPaiement.class.getDeclaredMethod("onCreate"); onCreate.setAccessible(true); onCreate.invoke(ip); LocalDateTime apres = LocalDateTime.now(); assertThat(ip.getDateExpiration()).isNotNull(); assertThat(ip.getDateExpiration()).isAfterOrEqualTo(avant.plusMinutes(29)); assertThat(ip.getDateExpiration()).isBeforeOrEqualTo(apres.plusMinutes(31)); assertThat(ip.getStatut()).isEqualTo(StatutIntentionPaiement.INITIEE); assertThat(ip.getCodeDevise()).isEqualTo("XOF"); } }