- BackupService: DB-persisted metadata (BackupRecord/BackupConfig entities + V16 Flyway migration), real pg_dump execution via ProcessBuilder, soft-delete on deleteBackup, pg_restore manual guidance - OrganisationService: repartitionRegion now queries Adresse entities (was Map.of() stub) - SystemConfigService: in-memory config overrides via AtomicReference (no DB dependency) - SystemMetricsService: null-guard on MemoryMXBean in getSystemStatus() (fixes test NPE) - Souscription workflow: SouscriptionService, SouscriptionResource, FormuleAbonnementRepository, V11 Flyway migration, admin REST clients - Flyway V8-V15: notes membres, types référence, type orga constraint, seed roles, première connexion, Wave checkout URL, Wave telephone column length fix - .gitignore: added uploads/ and .claude/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
104 lines
4.3 KiB
Java
104 lines
4.3 KiB
Java
package dev.lions.unionflow.server.entity;
|
|
|
|
import dev.lions.unionflow.server.api.enums.abonnement.StatutSouscription;
|
|
import dev.lions.unionflow.server.api.enums.abonnement.StatutValidationSouscription;
|
|
import dev.lions.unionflow.server.api.enums.abonnement.TypePeriodeAbonnement;
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import java.lang.reflect.Method;
|
|
import java.time.LocalDate;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
/**
|
|
* Tests de couverture pour SouscriptionOrganisation.
|
|
* Couvre les branches manquantes de onCreate() et decrementerQuota().
|
|
*/
|
|
@DisplayName("SouscriptionOrganisation - branches manquantes")
|
|
class SouscriptionOrganisationBranchTest {
|
|
|
|
// ── onCreate() ────────────────────────────────────────────────────────────
|
|
|
|
/**
|
|
* Branch manquante : formule != null mais quotaMax est déjà renseigné
|
|
* → la ligne `quotaMax = formule.getMaxMembres()` n'est PAS exécutée.
|
|
*/
|
|
@Test
|
|
@DisplayName("onCreate: formule présente mais quotaMax déjà défini → quotaMax conservé")
|
|
void onCreate_formuleNonNull_quotaMaxDejaDefini_conserveQuotaMax() throws Exception {
|
|
FormuleAbonnement formule = new FormuleAbonnement();
|
|
formule.setMaxMembres(50);
|
|
|
|
SouscriptionOrganisation s = new SouscriptionOrganisation();
|
|
s.setDateDebut(LocalDate.now());
|
|
s.setDateFin(LocalDate.now().plusMonths(1));
|
|
s.setFormule(formule);
|
|
s.setQuotaMax(100); // déjà défini → ne doit PAS être écrasé
|
|
|
|
Method onCreate = SouscriptionOrganisation.class.getDeclaredMethod("onCreate");
|
|
onCreate.setAccessible(true);
|
|
onCreate.invoke(s);
|
|
|
|
// quotaMax reste 100, pas remplacé par formule.getMaxMembres() (50)
|
|
assertThat(s.getQuotaMax()).isEqualTo(100);
|
|
// les autres defaults sont positionnés
|
|
assertThat(s.getStatut()).isEqualTo(StatutSouscription.ACTIVE);
|
|
assertThat(s.getTypePeriode()).isEqualTo(TypePeriodeAbonnement.MENSUEL);
|
|
assertThat(s.getQuotaUtilise()).isEqualTo(0);
|
|
}
|
|
|
|
/**
|
|
* Branch manquante : statutValidation == null → la valeur par défaut EN_ATTENTE_PAIEMENT est affectée.
|
|
*/
|
|
@Test
|
|
@DisplayName("onCreate: statutValidation null → initialisé à EN_ATTENTE_PAIEMENT")
|
|
void onCreate_statutValidationNull_setsDefault() throws Exception {
|
|
SouscriptionOrganisation s = new SouscriptionOrganisation();
|
|
s.setDateDebut(LocalDate.now());
|
|
s.setDateFin(LocalDate.now().plusMonths(1));
|
|
s.setStatutValidation(null); // forcer null pour couvrir le then-branch de L168
|
|
|
|
Method onCreate = SouscriptionOrganisation.class.getDeclaredMethod("onCreate");
|
|
onCreate.setAccessible(true);
|
|
onCreate.invoke(s);
|
|
|
|
assertThat(s.getStatutValidation()).isEqualTo(StatutValidationSouscription.EN_ATTENTE_PAIEMENT);
|
|
}
|
|
|
|
// ── decrementerQuota() ────────────────────────────────────────────────────
|
|
|
|
/**
|
|
* Branch manquante : quotaUtilise == 0 → la condition
|
|
* `quotaUtilise != null && quotaUtilise > 0` est false, le quota ne change pas.
|
|
*/
|
|
@Test
|
|
@DisplayName("decrementerQuota: quotaUtilise=0 → reste 0 (pas de décrément)")
|
|
void decrementerQuota_quotaUtiliseZero_resterAZero() {
|
|
SouscriptionOrganisation s = new SouscriptionOrganisation();
|
|
s.setDateDebut(LocalDate.now());
|
|
s.setDateFin(LocalDate.now().plusMonths(1));
|
|
s.setQuotaUtilise(0);
|
|
|
|
s.decrementerQuota();
|
|
|
|
assertThat(s.getQuotaUtilise()).isEqualTo(0);
|
|
}
|
|
|
|
/**
|
|
* Branche couverte pour référence : quotaUtilise null → décrement ignoré.
|
|
*/
|
|
@Test
|
|
@DisplayName("decrementerQuota: quotaUtilise=null → reste null")
|
|
void decrementerQuota_quotaUtiliseNull_resterNull() {
|
|
SouscriptionOrganisation s = new SouscriptionOrganisation();
|
|
s.setDateDebut(LocalDate.now());
|
|
s.setDateFin(LocalDate.now().plusMonths(1));
|
|
s.setQuotaUtilise(null);
|
|
|
|
s.decrementerQuota();
|
|
|
|
assertThat(s.getQuotaUtilise()).isNull();
|
|
}
|
|
}
|