feat(v3.0): implémentation Phases 0-8 — RBAC, lifecycle, multi-org, plans, dashboards
Phase 0 : @RolesAllowed SUPER_ADMIN sur POST/DELETE organisations ; AuthenticationFilter pages super-admin Phase 2 : OrganisationModuleService, @RequiresModule, ModuleAccessFilter, RoleService, PermissionChecker Phase 3 : multi-org context switching (OrganisationContextFilter, headers X-Active-Organisation-Id / X-Active-Role) Phase 4 : feature-gating navigation par typeOrganisation (web MenuBean + mobile MorePage) Phase 5 : MemberLifecycleService — 8 transitions (activer/suspendre/radier/archiver/inviter/accepter/expirer/rappels) Phase 6 : FormuleAbonnement Option C (planCommercial, apiAccess, federationAccess, quotas) + SouscriptionOrganisation méthodes quota Phase 7 : DashboardResource SUPER_ADMIN ajouté ; DashboardBean.checkAccessAndRedirect() ; dashboards distincts par rôle Phase 8 : MembreResourceLifecycleRbacTest, SouscriptionQuotaOptionCTest, OrganisationContextHolderTest, OrganisationContextFilterMultiOrgTest, MemberLifecycleServiceTest
This commit is contained in:
@@ -1547,7 +1547,7 @@ class MembreImportExportServiceTest {
|
||||
membreSansDate.setEmail(null);
|
||||
membreSansDate.setTelephone(null);
|
||||
membreSansDate.setStatutCompte(null);
|
||||
membreSansDate.setAssociationNom(null);
|
||||
membreSansDate.setOrganisationNom(null);
|
||||
membreSansDate.setDateNaissance(null); // null → branche else → createCell("")
|
||||
|
||||
byte[] excelData = importExportService.exporterVersExcel(
|
||||
@@ -1567,14 +1567,14 @@ class MembreImportExportServiceTest {
|
||||
m1.setNom("A"); m1.setPrenom("B");
|
||||
m1.setEmail("a@test.com");
|
||||
m1.setStatutCompte("ACTIF");
|
||||
m1.setAssociationNom("Org1"); // non-null pour lambda dans creerOngletStatistiques
|
||||
m1.setOrganisationNom("Org1"); // non-null pour lambda dans creerOngletStatistiques (organisationNom)
|
||||
|
||||
MembreResponse m2 = new MembreResponse();
|
||||
m2.setId(UUID.randomUUID());
|
||||
m2.setNom("C"); m2.setPrenom("D");
|
||||
m2.setEmail("c@test.com");
|
||||
m2.setStatutCompte("INACTIF");
|
||||
m2.setAssociationNom(null); // null → lambda branche false
|
||||
m2.setOrganisationNom(null); // null → lambda branche false (organisationNom)
|
||||
|
||||
byte[] excelData = importExportService.exporterVersExcel(
|
||||
List.of(m1, m2),
|
||||
@@ -1695,15 +1695,15 @@ class MembreImportExportServiceTest {
|
||||
|
||||
@Test
|
||||
@Order(205)
|
||||
@DisplayName("exporterVersPDF avec membres ayant associationNom non-null → lambda stats associationNom != null")
|
||||
void exporterVersPDF_avecAssociationNom_couvreStatistiques() throws Exception {
|
||||
// Créer membres avec associationNom non-null pour la lambda dans ajouterStatistiquesPDF
|
||||
@DisplayName("exporterVersPDF avec membres ayant organisationNom non-null → lambda stats organisationNom != null")
|
||||
void exporterVersPDF_avecOrganisationNom_couvreStatistiques() throws Exception {
|
||||
// Créer membres avec organisationNom non-null pour la lambda dans ajouterStatistiquesPDF
|
||||
MembreResponse m1 = new MembreResponse();
|
||||
m1.setId(UUID.randomUUID());
|
||||
m1.setNom("Alpha");
|
||||
m1.setPrenom("Beta");
|
||||
m1.setEmail("alpha@test.com");
|
||||
m1.setAssociationNom("Union Test"); // non-null → lambda filter true
|
||||
m1.setOrganisationNom("Union Test"); // non-null → organisationNom lambda filter true
|
||||
m1.setStatutCompte("ACTIF"); // couvre ACTIF count
|
||||
|
||||
MembreResponse m2 = new MembreResponse();
|
||||
@@ -1711,7 +1711,7 @@ class MembreImportExportServiceTest {
|
||||
m2.setNom("Gamma");
|
||||
m2.setPrenom("Delta");
|
||||
m2.setEmail("gamma@test.com");
|
||||
m2.setAssociationNom(null); // null → lambda filter false
|
||||
m2.setOrganisationNom(null); // null → organisationNom lambda filter false
|
||||
m2.setStatutCompte("INACTIF"); // couvre INACTIF count
|
||||
|
||||
MembreResponse m3 = new MembreResponse();
|
||||
@@ -1719,7 +1719,7 @@ class MembreImportExportServiceTest {
|
||||
m3.setNom("Epsilon");
|
||||
m3.setPrenom("Zeta");
|
||||
m3.setEmail("epsilon@test.com");
|
||||
m3.setAssociationNom("Union Test");
|
||||
m3.setOrganisationNom("Union Test");
|
||||
m3.setStatutCompte("SUSPENDU"); // couvre SUSPENDU count
|
||||
|
||||
byte[] pdfData = importExportService.exporterVersPDF(
|
||||
@@ -2068,7 +2068,7 @@ class MembreImportExportServiceTest {
|
||||
membreNull.setEmail(null); // null → ternaire → ""
|
||||
membreNull.setTelephone(null); // null → ternaire → ""
|
||||
membreNull.setStatutCompte(null); // null → ternaire → ""
|
||||
membreNull.setAssociationNom(null);
|
||||
membreNull.setOrganisationNom(null);
|
||||
|
||||
byte[] csvData = importExportService.exporterVersCSV(
|
||||
List.of(membreNull),
|
||||
@@ -2119,7 +2119,7 @@ class MembreImportExportServiceTest {
|
||||
membreNulls.setEmail(null); // null → L959 false branch
|
||||
membreNulls.setTelephone(null);
|
||||
membreNulls.setStatutCompte(null);
|
||||
membreNulls.setAssociationNom(null);
|
||||
membreNulls.setOrganisationNom(null);
|
||||
membreNulls.setDateNaissance(null);
|
||||
|
||||
// Toutes colonnes pour passer par L948, L949, L959
|
||||
|
||||
@@ -286,9 +286,9 @@ class MembreServiceExportAndSummaryTest {
|
||||
membreService.convertToSummaryResponse(membre);
|
||||
|
||||
assertThat(resp).isNotNull();
|
||||
// Branche mo.getOrganisation() != null → true → organisationId et associationNom remplis
|
||||
// Branche mo.getOrganisation() != null → true → organisationId et organisationNom remplis
|
||||
assertThat(resp.organisationId()).isEqualTo(orgId);
|
||||
assertThat(resp.associationNom()).isEqualTo("Lions Club Dakar");
|
||||
assertThat(resp.organisationNom()).isEqualTo("Lions Club Dakar");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -306,9 +306,9 @@ class MembreServiceExportAndSummaryTest {
|
||||
membreService.convertToSummaryResponse(membre);
|
||||
|
||||
assertThat(resp).isNotNull();
|
||||
// Branche false → organisationId et associationNom restent null
|
||||
// Branche false → organisationId et organisationNom restent null
|
||||
assertThat(resp.organisationId()).isNull();
|
||||
assertThat(resp.associationNom()).isNull();
|
||||
assertThat(resp.organisationNom()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -324,7 +324,7 @@ class MembreServiceExportAndSummaryTest {
|
||||
|
||||
assertThat(resp).isNotNull();
|
||||
assertThat(resp.organisationId()).isNull();
|
||||
assertThat(resp.associationNom()).isNull();
|
||||
assertThat(resp.organisationNom()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -105,7 +105,7 @@ class MembreServiceFinalBranchesTest {
|
||||
assertThat(result).isNotNull().isInstanceOf(MembreResponse.class);
|
||||
MembreResponse response = (MembreResponse) result;
|
||||
assertThat(response.getOrganisationId()).isNull();
|
||||
assertThat(response.getAssociationNom()).isNull();
|
||||
assertThat(response.getOrganisationNom()).isNull();
|
||||
assertThat(response.getDateAdhesion()).isEqualTo(LocalDate.of(2024, 6, 1));
|
||||
}
|
||||
|
||||
|
||||
@@ -817,7 +817,7 @@ class MembreServiceTest {
|
||||
MembreResponse resp = membreService.convertToResponse(m);
|
||||
|
||||
assertThat(resp.getOrganisationId()).isEqualTo(orgId);
|
||||
assertThat(resp.getAssociationNom()).isEqualTo("Lions Club");
|
||||
assertThat(resp.getOrganisationNom()).isEqualTo("Lions Club");
|
||||
assertThat(resp.getDateAdhesion()).isEqualTo(LocalDate.of(2022, 6, 1));
|
||||
}
|
||||
|
||||
@@ -836,7 +836,7 @@ class MembreServiceTest {
|
||||
MembreResponse resp = membreService.convertToResponse(m);
|
||||
|
||||
assertThat(resp.getOrganisationId()).isNull();
|
||||
assertThat(resp.getAssociationNom()).isNull();
|
||||
assertThat(resp.getOrganisationNom()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -1050,7 +1050,7 @@ class MembreServiceTest {
|
||||
MembreSummaryResponse resp = membreService.convertToSummaryResponse(m);
|
||||
|
||||
assertThat(resp.organisationId()).isEqualTo(orgId);
|
||||
assertThat(resp.associationNom()).isEqualTo("Assoc Test");
|
||||
assertThat(resp.organisationNom()).isEqualTo("Assoc Test");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user