Files
unionflow-server-impl-quarkus/src/test/java/dev/lions/unionflow/server/entity/CotisationTest.java
2026-03-28 14:21:30 +00:00

221 lines
7.6 KiB
Java

package dev.lions.unionflow.server.entity;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
@DisplayName("Cotisation")
class CotisationTest {
private static Membre newMembre() {
Membre m = new Membre();
m.setId(UUID.randomUUID());
return m;
}
private static Organisation newOrganisation() {
Organisation o = new Organisation();
o.setId(UUID.randomUUID());
return o;
}
@Test
@DisplayName("getters/setters")
void gettersSetters() {
Cotisation c = new Cotisation();
c.setNumeroReference("COT-2025-00000001");
c.setMembre(newMembre());
c.setOrganisation(newOrganisation());
c.setTypeCotisation("MENSUEL");
c.setLibelle("Cotisation janvier");
c.setMontantDu(new BigDecimal("5000.00"));
c.setMontantPaye(new BigDecimal("2000.00"));
c.setCodeDevise("XOF");
c.setStatut("EN_ATTENTE");
c.setDateEcheance(LocalDate.now().plusMonths(1));
c.setAnnee(2025);
c.setMois(1);
c.setRecurrente(true);
assertThat(c.getNumeroReference()).isEqualTo("COT-2025-00000001");
assertThat(c.getTypeCotisation()).isEqualTo("MENSUEL");
assertThat(c.getLibelle()).isEqualTo("Cotisation janvier");
assertThat(c.getMontantDu()).isEqualByComparingTo("5000.00");
assertThat(c.getMontantPaye()).isEqualByComparingTo("2000.00");
assertThat(c.getCodeDevise()).isEqualTo("XOF");
assertThat(c.getStatut()).isEqualTo("EN_ATTENTE");
assertThat(c.getAnnee()).isEqualTo(2025);
assertThat(c.getMois()).isEqualTo(1);
assertThat(c.getRecurrente()).isTrue();
}
@Test
@DisplayName("getMontantRestant")
void getMontantRestant() {
Cotisation c = new Cotisation();
c.setMontantDu(new BigDecimal("100.00"));
c.setMontantPaye(new BigDecimal("30.00"));
assertThat(c.getMontantRestant()).isEqualByComparingTo("70.00");
c.setMontantPaye(null);
assertThat(c.getMontantRestant()).isEqualByComparingTo(BigDecimal.ZERO);
}
@Test
@DisplayName("isEntierementPayee")
void isEntierementPayee() {
Cotisation c = new Cotisation();
c.setMontantDu(new BigDecimal("100.00"));
c.setMontantPaye(new BigDecimal("100.00"));
assertThat(c.isEntierementPayee()).isTrue();
c.setMontantPaye(new BigDecimal("50.00"));
assertThat(c.isEntierementPayee()).isFalse();
}
@Test
@DisplayName("isEnRetard: true si échéance passée et non payée")
void isEnRetard() {
Cotisation c = new Cotisation();
c.setDateEcheance(LocalDate.now().minusDays(1));
c.setMontantDu(new BigDecimal("100.00"));
c.setMontantPaye(BigDecimal.ZERO);
assertThat(c.isEnRetard()).isTrue();
c.setMontantPaye(new BigDecimal("100.00"));
assertThat(c.isEnRetard()).isFalse();
}
@Test
@DisplayName("genererNumeroReference non null")
void genererNumeroReference() {
String ref = Cotisation.genererNumeroReference();
assertThat(ref).startsWith("COT-").isNotNull();
}
@Test
@DisplayName("equals et hashCode")
void equalsHashCode() {
UUID id = UUID.randomUUID();
Cotisation a = new Cotisation();
a.setId(id);
a.setNumeroReference("REF-1");
a.setMembre(newMembre());
a.setOrganisation(newOrganisation());
a.setTypeCotisation("MENSUEL");
a.setLibelle("L");
a.setMontantDu(BigDecimal.ONE);
a.setCodeDevise("XOF");
a.setStatut("EN_ATTENTE");
a.setDateEcheance(LocalDate.now());
a.setAnnee(2025);
Cotisation b = new Cotisation();
b.setId(id);
b.setNumeroReference("REF-1");
b.setMembre(a.getMembre());
b.setOrganisation(a.getOrganisation());
b.setTypeCotisation("MENSUEL");
b.setLibelle("L");
b.setMontantDu(BigDecimal.ONE);
b.setCodeDevise("XOF");
b.setStatut("EN_ATTENTE");
b.setDateEcheance(LocalDate.now());
b.setAnnee(2025);
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
}
@Test
@DisplayName("toString non null")
void toString_nonNull() {
Cotisation c = new Cotisation();
c.setNumeroReference("REF");
c.setTypeCotisation("MENSUEL");
c.setLibelle("L");
c.setMontantDu(BigDecimal.ONE);
c.setCodeDevise("XOF");
c.setStatut("EN_ATTENTE");
c.setDateEcheance(LocalDate.now());
c.setAnnee(2025);
assertThat(c.toString()).isNotNull().isNotEmpty();
}
@Test
@DisplayName("getMontantRestant: ZERO si montantDu null")
void getMontantRestant_montantDuNull_returnsZero() {
Cotisation c = new Cotisation();
c.setMontantPaye(new BigDecimal("50.00"));
// montantDu = null
assertThat(c.getMontantRestant()).isEqualByComparingTo(BigDecimal.ZERO);
}
@Test
@DisplayName("isEnRetard: false si dateEcheance null")
void isEnRetard_echeanceNull_returnsFalse() {
Cotisation c = new Cotisation();
c.setMontantDu(new BigDecimal("100.00"));
c.setMontantPaye(BigDecimal.ZERO);
// dateEcheance = null
assertThat(c.isEnRetard()).isFalse();
}
@Test
@DisplayName("onCreate: numeroReference déjà défini → conservé (branche false)")
void onCreate_numeroReferenceDejaDefini_conserve() {
// numeroReference déjà défini → non écrasé par onCreate
Cotisation c = new Cotisation();
c.setNumeroReference("COT-EXISTANT-001");
c.setCodeDevise("XOF");
c.setStatut("EN_ATTENTE");
c.setMontantPaye(BigDecimal.ZERO);
c.setNombreRappels(0);
c.setRecurrente(false);
c.onCreate();
// numeroReference doit rester inchangé
assertThat(c.getNumeroReference()).isEqualTo("COT-EXISTANT-001");
}
@Test
@DisplayName("onCreate: numeroReference vide (empty string) → généré (branche isEmpty)")
void onCreate_emptyNumeroReference_generated() throws Exception {
Cotisation c = new Cotisation();
c.setNumeroReference(""); // non null mais vide → isEmpty() est true → doit générer
c.setCodeDevise("XOF");
c.setStatut("EN_ATTENTE");
c.setMontantPaye(BigDecimal.ZERO);
c.setNombreRappels(0);
c.setRecurrente(false);
java.lang.reflect.Method onCreate = Cotisation.class.getDeclaredMethod("onCreate");
onCreate.setAccessible(true);
onCreate.invoke(c);
assertThat(c.getNumeroReference()).isNotEmpty().startsWith("COT-");
}
@Test
@DisplayName("onCreate: initialise les défauts si null")
void onCreate_setsDefaults() {
Cotisation c = new Cotisation();
// Force null pour couvrir toutes les branches de initialisation
c.setNumeroReference(null);
c.setCodeDevise(null);
c.setStatut(null);
c.setMontantPaye(null);
c.setNombreRappels(null);
c.setRecurrente(null);
c.onCreate();
assertThat(c.getNumeroReference()).isNotNull().startsWith("COT-");
assertThat(c.getCodeDevise()).isEqualTo("XOF");
assertThat(c.getStatut()).isEqualTo("EN_ATTENTE");
assertThat(c.getMontantPaye()).isEqualByComparingTo(BigDecimal.ZERO);
assertThat(c.getNombreRappels()).isEqualTo(0);
assertThat(c.getRecurrente()).isFalse();
}
}