test(sprint-10 api): tests DTOs Sprint 10 pour Jacoco 100%

Build api 1.0.8 a échoué sur jacoco:check (97-99% < 100% requis). Ajout des tests
manquants pour les 6 nouveaux DTOs + extension UpdateOrganisationRequestTest.

Tests ajoutés
- CreateBeneficiaireEffectifRequestTest : 8 tests (builder all-fields, validation 5 champs obligatoires, nationalité ISO-3, natureControle regex, pourcentage 0-100, paysResidence vide accepté, valide complet, equals/hash/toString)
- UpdateBeneficiaireEffectifRequestTest : 7 tests (builder, vide valide, pourcentage > 100, nationalité format, natureControle invalide / vide, equals/hash/toString)
- BeneficiaireEffectifResponseTest : 3 tests (all-fields, null defaults, equals)
- AuditTrailOperationResponseTest : 3 tests (all-fields, null defaults, equals)
- CreateRoleDelegationRequestTest : 6 tests (builder, 6 champs obligatoires, role regex, dateFin future, valide, equals)
- RoleDelegationResponseTest : 3 tests (all-fields, null, equals)
- UpdateOrganisationRequestTest : 4 tests ajoutés (referentielComptable valide × 3, vide accepté, invalide, complianceOfficerId)

Total +34 tests, attendus pour rétablir Jacoco 100% bundle.
This commit is contained in:
dahoud
2026-04-25 12:42:06 +00:00
parent 65a9d03c00
commit 13635e269b
7 changed files with 594 additions and 0 deletions

View File

@@ -0,0 +1,67 @@
package dev.lions.unionflow.server.api.dto.audit.response;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.LocalDateTime;
import java.util.UUID;
import org.junit.jupiter.api.Test;
class AuditTrailOperationResponseTest {
@Test
void testBuilder_AllFields() {
UUID id = UUID.randomUUID();
UUID userId = UUID.randomUUID();
UUID orgId = UUID.randomUUID();
UUID entityId = UUID.randomUUID();
UUID requestId = UUID.randomUUID();
LocalDateTime now = LocalDateTime.now();
AuditTrailOperationResponse r = AuditTrailOperationResponse.builder()
.id(id).userId(userId).userEmail("a@b.com").roleActif("TRESORIER")
.organisationActiveId(orgId)
.actionType("PAYMENT_INITIATED").entityType("Paiement").entityId(entityId)
.description("Paiement initié")
.ipAddress("192.168.1.1").userAgent("Mozilla").requestId(requestId)
.payloadAvant("{}").payloadApres("{\"k\":1}").metadata("{\"src\":\"web\"}")
.sodCheckPassed(true).sodViolations(null)
.operationAt(now)
.build();
assertThat(r.id()).isEqualTo(id);
assertThat(r.userId()).isEqualTo(userId);
assertThat(r.userEmail()).isEqualTo("a@b.com");
assertThat(r.roleActif()).isEqualTo("TRESORIER");
assertThat(r.organisationActiveId()).isEqualTo(orgId);
assertThat(r.actionType()).isEqualTo("PAYMENT_INITIATED");
assertThat(r.entityType()).isEqualTo("Paiement");
assertThat(r.entityId()).isEqualTo(entityId);
assertThat(r.description()).isEqualTo("Paiement initié");
assertThat(r.ipAddress()).isEqualTo("192.168.1.1");
assertThat(r.userAgent()).isEqualTo("Mozilla");
assertThat(r.requestId()).isEqualTo(requestId);
assertThat(r.payloadAvant()).isEqualTo("{}");
assertThat(r.payloadApres()).isEqualTo("{\"k\":1}");
assertThat(r.metadata()).isEqualTo("{\"src\":\"web\"}");
assertThat(r.sodCheckPassed()).isTrue();
assertThat(r.sodViolations()).isNull();
assertThat(r.operationAt()).isEqualTo(now);
}
@Test
void testBuilder_NullFields() {
AuditTrailOperationResponse r = AuditTrailOperationResponse.builder().build();
assertThat(r.id()).isNull();
assertThat(r.sodCheckPassed()).isNull();
}
@Test
void testEqualsHashCodeToString() {
UUID id = UUID.randomUUID();
AuditTrailOperationResponse a = AuditTrailOperationResponse.builder().id(id).build();
AuditTrailOperationResponse b = AuditTrailOperationResponse.builder().id(id).build();
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
assertThat(a.toString()).contains("AuditTrailOperationResponse");
}
}

View File

@@ -0,0 +1,106 @@
package dev.lions.unionflow.server.api.dto.delegation.request;
import static org.assertj.core.api.Assertions.assertThat;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import java.time.LocalDateTime;
import java.util.Set;
import java.util.UUID;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class CreateRoleDelegationRequestTest {
private Validator validator;
@BeforeEach
void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
private CreateRoleDelegationRequest.CreateRoleDelegationRequestBuilder valide() {
return CreateRoleDelegationRequest.builder()
.organisationId(UUID.randomUUID())
.delegantUserId(UUID.randomUUID())
.delegataireUserId(UUID.randomUUID())
.roleDelegue("TRESORIER")
.dateDebut(LocalDateTime.now().plusHours(1))
.dateFin(LocalDateTime.now().plusDays(14));
}
@Test
void testBuilder_AllFields() {
UUID org = UUID.randomUUID();
UUID delegant = UUID.randomUUID();
UUID delegataire = UUID.randomUUID();
LocalDateTime debut = LocalDateTime.of(2026, 5, 1, 9, 0);
LocalDateTime fin = LocalDateTime.of(2026, 5, 15, 18, 0);
CreateRoleDelegationRequest req = CreateRoleDelegationRequest.builder()
.organisationId(org).delegantUserId(delegant).delegataireUserId(delegataire)
.roleDelegue("TRESORIER").dateDebut(debut).dateFin(fin).motif("Congé")
.build();
assertThat(req.organisationId()).isEqualTo(org);
assertThat(req.delegantUserId()).isEqualTo(delegant);
assertThat(req.delegataireUserId()).isEqualTo(delegataire);
assertThat(req.roleDelegue()).isEqualTo("TRESORIER");
assertThat(req.dateDebut()).isEqualTo(debut);
assertThat(req.dateFin()).isEqualTo(fin);
assertThat(req.motif()).isEqualTo("Congé");
}
@Test
void testValidation_ChampsObligatoires() {
CreateRoleDelegationRequest req = CreateRoleDelegationRequest.builder().build();
Set<ConstraintViolation<CreateRoleDelegationRequest>> v = validator.validate(req);
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("organisationId"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("delegantUserId"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("delegataireUserId"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("roleDelegue"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("dateDebut"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("dateFin"));
}
@Test
void testValidation_RoleFormatInvalide() {
CreateRoleDelegationRequest req = valide().roleDelegue("admin-org").build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("roleDelegue"));
}
@Test
void testValidation_DateFinPassee() {
CreateRoleDelegationRequest req = valide()
.dateFin(LocalDateTime.now().minusDays(1)).build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("dateFin"));
}
@Test
void testValidation_Valide() {
assertThat(validator.validate(valide().motif("OK").build())).isEmpty();
}
@Test
void testEqualsHashCodeToString() {
UUID org = UUID.randomUUID();
UUID d1 = UUID.randomUUID();
UUID d2 = UUID.randomUUID();
LocalDateTime debut = LocalDateTime.now().plusHours(1);
LocalDateTime fin = LocalDateTime.now().plusDays(7);
CreateRoleDelegationRequest a = CreateRoleDelegationRequest.builder()
.organisationId(org).delegantUserId(d1).delegataireUserId(d2)
.roleDelegue("TRESORIER").dateDebut(debut).dateFin(fin).build();
CreateRoleDelegationRequest b = CreateRoleDelegationRequest.builder()
.organisationId(org).delegantUserId(d1).delegataireUserId(d2)
.roleDelegue("TRESORIER").dateDebut(debut).dateFin(fin).build();
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
assertThat(a.toString()).contains("CreateRoleDelegationRequest");
}
}

View File

@@ -0,0 +1,59 @@
package dev.lions.unionflow.server.api.dto.delegation.response;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.LocalDateTime;
import java.util.UUID;
import org.junit.jupiter.api.Test;
class RoleDelegationResponseTest {
@Test
void testBuilder_AllFields() {
UUID id = UUID.randomUUID();
UUID org = UUID.randomUUID();
UUID d1 = UUID.randomUUID();
UUID d2 = UUID.randomUUID();
LocalDateTime debut = LocalDateTime.of(2026, 5, 1, 9, 0);
LocalDateTime fin = LocalDateTime.of(2026, 5, 15, 18, 0);
LocalDateTime revoc = LocalDateTime.of(2026, 5, 10, 12, 0);
LocalDateTime cree = LocalDateTime.of(2026, 4, 25, 12, 0);
RoleDelegationResponse r = RoleDelegationResponse.builder()
.id(id).organisationId(org).delegantUserId(d1).delegataireUserId(d2)
.roleDelegue("TRESORIER").dateDebut(debut).dateFin(fin).motif("Congé")
.statut("REVOQUEE").dateRevocation(revoc).dateCreation(cree).estActive(false)
.build();
assertThat(r.id()).isEqualTo(id);
assertThat(r.organisationId()).isEqualTo(org);
assertThat(r.delegantUserId()).isEqualTo(d1);
assertThat(r.delegataireUserId()).isEqualTo(d2);
assertThat(r.roleDelegue()).isEqualTo("TRESORIER");
assertThat(r.dateDebut()).isEqualTo(debut);
assertThat(r.dateFin()).isEqualTo(fin);
assertThat(r.motif()).isEqualTo("Congé");
assertThat(r.statut()).isEqualTo("REVOQUEE");
assertThat(r.dateRevocation()).isEqualTo(revoc);
assertThat(r.dateCreation()).isEqualTo(cree);
assertThat(r.estActive()).isFalse();
}
@Test
void testBuilder_NullFields() {
RoleDelegationResponse r = RoleDelegationResponse.builder().build();
assertThat(r.id()).isNull();
assertThat(r.statut()).isNull();
assertThat(r.estActive()).isFalse();
}
@Test
void testEqualsHashCodeToString() {
UUID id = UUID.randomUUID();
RoleDelegationResponse a = RoleDelegationResponse.builder().id(id).build();
RoleDelegationResponse b = RoleDelegationResponse.builder().id(id).build();
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
assertThat(a.toString()).contains("RoleDelegationResponse");
}
}

View File

@@ -0,0 +1,133 @@
package dev.lions.unionflow.server.api.dto.kyc.request;
import static org.assertj.core.api.Assertions.assertThat;
import dev.lions.unionflow.server.api.enums.membre.TypePieceIdentite;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Set;
import java.util.UUID;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class CreateBeneficiaireEffectifRequestTest {
private Validator validator;
@BeforeEach
void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
private CreateBeneficiaireEffectifRequest.CreateBeneficiaireEffectifRequestBuilder valide() {
return CreateBeneficiaireEffectifRequest.builder()
.kycDossierId(UUID.randomUUID())
.nom("Dupont")
.prenoms("Jean Pierre")
.dateNaissance(LocalDate.of(1980, 5, 15))
.nationalite("CIV")
.natureControle("DETENTION_CAPITAL");
}
@Test
void testBuilder_AllFields() {
UUID kyc = UUID.randomUUID();
UUID org = UUID.randomUUID();
UUID membre = UUID.randomUUID();
CreateBeneficiaireEffectifRequest req = CreateBeneficiaireEffectifRequest.builder()
.kycDossierId(kyc).organisationCibleId(org).membreId(membre)
.nom("Doe").prenoms("John")
.dateNaissance(LocalDate.of(1980, 1, 1))
.lieuNaissance("Abidjan")
.nationalite("CIV").paysResidence("FRA")
.typePieceIdentite(TypePieceIdentite.PASSEPORT)
.numeroPieceIdentite("AB123")
.dateExpirationPiece(LocalDate.of(2030, 1, 1))
.pourcentageCapital(new BigDecimal("30"))
.pourcentageDroitsVote(new BigDecimal("25"))
.natureControle("BENEFICIAIRE_ULTIME")
.estPep(true).pepCategorie("MINISTRE").pepPays("CIV").pepFonction("Min Finance")
.presenceListesSanctions(true).detailsListesSanctions("Liste UN 2024")
.build();
assertThat(req.kycDossierId()).isEqualTo(kyc);
assertThat(req.organisationCibleId()).isEqualTo(org);
assertThat(req.membreId()).isEqualTo(membre);
assertThat(req.nom()).isEqualTo("Doe");
assertThat(req.prenoms()).isEqualTo("John");
assertThat(req.lieuNaissance()).isEqualTo("Abidjan");
assertThat(req.paysResidence()).isEqualTo("FRA");
assertThat(req.typePieceIdentite()).isEqualTo(TypePieceIdentite.PASSEPORT);
assertThat(req.numeroPieceIdentite()).isEqualTo("AB123");
assertThat(req.dateExpirationPiece()).isEqualTo(LocalDate.of(2030, 1, 1));
assertThat(req.pourcentageCapital()).isEqualByComparingTo("30");
assertThat(req.pourcentageDroitsVote()).isEqualByComparingTo("25");
assertThat(req.natureControle()).isEqualTo("BENEFICIAIRE_ULTIME");
assertThat(req.estPep()).isTrue();
assertThat(req.pepCategorie()).isEqualTo("MINISTRE");
assertThat(req.pepPays()).isEqualTo("CIV");
assertThat(req.pepFonction()).isEqualTo("Min Finance");
assertThat(req.presenceListesSanctions()).isTrue();
assertThat(req.detailsListesSanctions()).isEqualTo("Liste UN 2024");
}
@Test
void testValidation_ChampsObligatoires() {
CreateBeneficiaireEffectifRequest req = CreateBeneficiaireEffectifRequest.builder().build();
Set<ConstraintViolation<CreateBeneficiaireEffectifRequest>> v = validator.validate(req);
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("nom"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("prenoms"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("dateNaissance"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("nationalite"));
assertThat(v).anyMatch(x -> x.getPropertyPath().toString().equals("natureControle"));
}
@Test
void testValidation_NationaliteFormatInvalide() {
CreateBeneficiaireEffectifRequest req = valide().nationalite("FR").build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("nationalite"));
}
@Test
void testValidation_NatureControleInvalide() {
CreateBeneficiaireEffectifRequest req = valide().natureControle("AUTRE").build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("natureControle"));
}
@Test
void testValidation_PourcentageHorsBornes() {
CreateBeneficiaireEffectifRequest req = valide().pourcentageCapital(new BigDecimal("150")).build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("pourcentageCapital"));
}
@Test
void testValidation_PaysResidenceVideAccepte() {
CreateBeneficiaireEffectifRequest req = valide().paysResidence("").build();
assertThat(validator.validate(req))
.noneMatch(v -> v.getPropertyPath().toString().equals("paysResidence"));
}
@Test
void testValidation_Valide() {
assertThat(validator.validate(valide().build())).isEmpty();
}
@Test
void testEqualsHashCodeToString() {
CreateBeneficiaireEffectifRequest a = valide().build();
CreateBeneficiaireEffectifRequest b = CreateBeneficiaireEffectifRequest.builder()
.kycDossierId(a.kycDossierId()).nom(a.nom()).prenoms(a.prenoms())
.dateNaissance(a.dateNaissance()).nationalite(a.nationalite())
.natureControle(a.natureControle()).build();
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
assertThat(a.toString()).contains("CreateBeneficiaireEffectifRequest");
}
}

View File

@@ -0,0 +1,104 @@
package dev.lions.unionflow.server.api.dto.kyc.request;
import static org.assertj.core.api.Assertions.assertThat;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Set;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class UpdateBeneficiaireEffectifRequestTest {
private Validator validator;
@BeforeEach
void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@Test
void testBuilder_AllFields() {
UpdateBeneficiaireEffectifRequest req = UpdateBeneficiaireEffectifRequest.builder()
.nom("Doe").prenoms("Jane")
.dateNaissance(LocalDate.of(1990, 6, 1))
.lieuNaissance("Dakar")
.nationalite("SEN").paysResidence("USA")
.pourcentageCapital(new BigDecimal("45"))
.pourcentageDroitsVote(new BigDecimal("50"))
.natureControle("DROITS_VOTE")
.estPep(false).pepCategorie("EX-PEP").pepPays("SEN").pepFonction("Ex-député")
.presenceListesSanctions(false).detailsListesSanctions("RAS")
.build();
assertThat(req.nom()).isEqualTo("Doe");
assertThat(req.prenoms()).isEqualTo("Jane");
assertThat(req.dateNaissance()).isEqualTo(LocalDate.of(1990, 6, 1));
assertThat(req.lieuNaissance()).isEqualTo("Dakar");
assertThat(req.nationalite()).isEqualTo("SEN");
assertThat(req.paysResidence()).isEqualTo("USA");
assertThat(req.pourcentageCapital()).isEqualByComparingTo("45");
assertThat(req.pourcentageDroitsVote()).isEqualByComparingTo("50");
assertThat(req.natureControle()).isEqualTo("DROITS_VOTE");
assertThat(req.estPep()).isFalse();
assertThat(req.pepCategorie()).isEqualTo("EX-PEP");
assertThat(req.pepPays()).isEqualTo("SEN");
assertThat(req.pepFonction()).isEqualTo("Ex-député");
assertThat(req.presenceListesSanctions()).isFalse();
assertThat(req.detailsListesSanctions()).isEqualTo("RAS");
}
@Test
void testBuilder_VideValide() {
UpdateBeneficiaireEffectifRequest req = UpdateBeneficiaireEffectifRequest.builder().build();
Set<ConstraintViolation<UpdateBeneficiaireEffectifRequest>> v = validator.validate(req);
assertThat(v).isEmpty();
}
@Test
void testValidation_PourcentageDepasse100() {
UpdateBeneficiaireEffectifRequest req = UpdateBeneficiaireEffectifRequest.builder()
.pourcentageCapital(new BigDecimal("110")).build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("pourcentageCapital"));
}
@Test
void testValidation_NationaliteFormatInvalide() {
UpdateBeneficiaireEffectifRequest req = UpdateBeneficiaireEffectifRequest.builder()
.nationalite("FR").build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("nationalite"));
}
@Test
void testValidation_NatureControleInvalide() {
UpdateBeneficiaireEffectifRequest req = UpdateBeneficiaireEffectifRequest.builder()
.natureControle("INVALIDE").build();
assertThat(validator.validate(req))
.anyMatch(v -> v.getPropertyPath().toString().equals("natureControle"));
}
@Test
void testValidation_NatureControleVideAccepte() {
UpdateBeneficiaireEffectifRequest req = UpdateBeneficiaireEffectifRequest.builder()
.natureControle("").build();
assertThat(validator.validate(req))
.noneMatch(v -> v.getPropertyPath().toString().equals("natureControle"));
}
@Test
void testEqualsHashCodeToString() {
UpdateBeneficiaireEffectifRequest a = UpdateBeneficiaireEffectifRequest.builder()
.nom("X").build();
UpdateBeneficiaireEffectifRequest b = UpdateBeneficiaireEffectifRequest.builder()
.nom("X").build();
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
assertThat(a.toString()).contains("UpdateBeneficiaireEffectifRequest");
}
}

View File

@@ -0,0 +1,80 @@
package dev.lions.unionflow.server.api.dto.kyc.response;
import static org.assertj.core.api.Assertions.assertThat;
import dev.lions.unionflow.server.api.enums.membre.TypePieceIdentite;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.UUID;
import org.junit.jupiter.api.Test;
class BeneficiaireEffectifResponseTest {
@Test
void testBuilder_AllFields() {
UUID id = UUID.randomUUID();
UUID kyc = UUID.randomUUID();
UUID org = UUID.randomUUID();
UUID membre = UUID.randomUUID();
LocalDateTime now = LocalDateTime.now();
BeneficiaireEffectifResponse r = BeneficiaireEffectifResponse.builder()
.id(id).kycDossierId(kyc).organisationCibleId(org).membreId(membre)
.nom("Test").prenoms("User")
.dateNaissance(LocalDate.of(1990, 1, 1)).lieuNaissance("Abidjan")
.nationalite("CIV").paysResidence("FRA")
.typePieceIdentite(TypePieceIdentite.PASSEPORT)
.numeroPieceIdentite("AB123").dateExpirationPiece(LocalDate.of(2030, 1, 1))
.pourcentageCapital(new BigDecimal("25"))
.pourcentageDroitsVote(new BigDecimal("30"))
.natureControle("DETENTION_CAPITAL")
.estPep(true).pepCategorie("MIN").pepPays("CIV").pepFonction("Min")
.presenceListesSanctions(false).detailsListesSanctions("")
.dateCreation(now).dateModification(now).actif(true)
.build();
assertThat(r.id()).isEqualTo(id);
assertThat(r.kycDossierId()).isEqualTo(kyc);
assertThat(r.organisationCibleId()).isEqualTo(org);
assertThat(r.membreId()).isEqualTo(membre);
assertThat(r.nom()).isEqualTo("Test");
assertThat(r.prenoms()).isEqualTo("User");
assertThat(r.dateNaissance()).isEqualTo(LocalDate.of(1990, 1, 1));
assertThat(r.lieuNaissance()).isEqualTo("Abidjan");
assertThat(r.nationalite()).isEqualTo("CIV");
assertThat(r.paysResidence()).isEqualTo("FRA");
assertThat(r.typePieceIdentite()).isEqualTo(TypePieceIdentite.PASSEPORT);
assertThat(r.numeroPieceIdentite()).isEqualTo("AB123");
assertThat(r.dateExpirationPiece()).isEqualTo(LocalDate.of(2030, 1, 1));
assertThat(r.pourcentageCapital()).isEqualByComparingTo("25");
assertThat(r.pourcentageDroitsVote()).isEqualByComparingTo("30");
assertThat(r.natureControle()).isEqualTo("DETENTION_CAPITAL");
assertThat(r.estPep()).isTrue();
assertThat(r.pepCategorie()).isEqualTo("MIN");
assertThat(r.pepPays()).isEqualTo("CIV");
assertThat(r.pepFonction()).isEqualTo("Min");
assertThat(r.presenceListesSanctions()).isFalse();
assertThat(r.detailsListesSanctions()).isEqualTo("");
assertThat(r.dateCreation()).isEqualTo(now);
assertThat(r.dateModification()).isEqualTo(now);
assertThat(r.actif()).isTrue();
}
@Test
void testBuilder_NullFields() {
BeneficiaireEffectifResponse r = BeneficiaireEffectifResponse.builder().build();
assertThat(r.id()).isNull();
assertThat(r.actif()).isNull();
}
@Test
void testEqualsHashCodeToString() {
UUID id = UUID.randomUUID();
BeneficiaireEffectifResponse a = BeneficiaireEffectifResponse.builder().id(id).build();
BeneficiaireEffectifResponse b = BeneficiaireEffectifResponse.builder().id(id).build();
assertThat(a).isEqualTo(b);
assertThat(a.hashCode()).isEqualTo(b.hashCode());
assertThat(a.toString()).contains("BeneficiaireEffectifResponse");
}
}

View File

@@ -255,4 +255,49 @@ class UpdateOrganisationRequestTest {
assertThat(toString).contains("TTO");
assertThat(toString).contains("INACTIF");
}
// ──────────────────────────────────────────────────────────────────────
// Sprint 10 — referentielComptable + complianceOfficerId
// ──────────────────────────────────────────────────────────────────────
@Test
void testReferentielComptable_ValeursValides() {
for (String r : new String[] {"SYSCOHADA", "SYCEBNL", "PCSFD_UMOA"}) {
UpdateOrganisationRequest req = UpdateOrganisationRequest.builder()
.nom("Org").email("x@y.z").referentielComptable(r).build();
Set<ConstraintViolation<UpdateOrganisationRequest>> violations = validator.validate(req);
assertThat(violations).noneMatch(
v -> v.getPropertyPath().toString().equals("referentielComptable"));
}
}
@Test
void testReferentielComptable_VideAccepte() {
UpdateOrganisationRequest req = UpdateOrganisationRequest.builder()
.nom("Org").email("x@y.z").referentielComptable("").build();
Set<ConstraintViolation<UpdateOrganisationRequest>> violations = validator.validate(req);
assertThat(violations).noneMatch(
v -> v.getPropertyPath().toString().equals("referentielComptable"));
}
@Test
void testReferentielComptable_Invalide() {
UpdateOrganisationRequest req = UpdateOrganisationRequest.builder()
.nom("Org").email("x@y.z").referentielComptable("IFRS").build();
Set<ConstraintViolation<UpdateOrganisationRequest>> violations = validator.validate(req);
assertThat(violations).anyMatch(
v -> v.getPropertyPath().toString().equals("referentielComptable"));
}
@Test
void testComplianceOfficerId_Optionnel() {
java.util.UUID id = java.util.UUID.randomUUID();
UpdateOrganisationRequest req = UpdateOrganisationRequest.builder()
.nom("Org").email("x@y.z").complianceOfficerId(id).build();
assertThat(req.complianceOfficerId()).isEqualTo(id);
UpdateOrganisationRequest reqNull = UpdateOrganisationRequest.builder()
.nom("Org").email("x@y.z").build();
assertThat(reqNull.complianceOfficerId()).isNull();
}
}