Files
lionsdev-client-impl-quarkus/src/test/java/dev/lions/compliance/IvorianTaxServiceTest.java

125 lines
4.5 KiB
Java

package dev.lions.compliance;
import io.quarkus.test.junit.QuarkusTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import static org.junit.jupiter.api.Assertions.*;
@QuarkusTest
public class IvorianTaxServiceTest {
@Inject
IvorianTaxService taxService;
@Test
void testCalculateTVAStandard() {
double amountHT = 1000000.0; // 1M FCFA
TaxCalculation result = taxService.calculateTVA(amountHT, false);
assertNotNull(result);
assertEquals(amountHT, result.getAmountHT());
assertEquals(18.0, result.getTaxRate()); // Taux standard 18%
assertEquals(180000.0, result.getTaxAmount(), 0.01); // 18% de 1M
assertEquals(1180000.0, result.getAmountTTC(), 0.01); // HT + TVA
assertEquals("TVA", result.getTaxType());
}
@Test
void testCalculateTVAReduced() {
double amountHT = 1000000.0; // 1M FCFA
TaxCalculation result = taxService.calculateTVA(amountHT, true);
assertNotNull(result);
assertEquals(amountHT, result.getAmountHT());
assertEquals(9.0, result.getTaxRate()); // Taux réduit 9%
assertEquals(90000.0, result.getTaxAmount(), 0.01); // 9% de 1M
assertEquals(1090000.0, result.getAmountTTC(), 0.01); // HT + TVA
assertEquals("TVA", result.getTaxType());
}
@Test
void testCalculateISStandard() {
double profit = 10000000.0; // 10M FCFA
TaxCalculation result = taxService.calculateIS(profit, false);
assertNotNull(result);
assertEquals(25.0, result.getTaxRate()); // Taux standard 25%
assertEquals(2500000.0, result.getTaxAmount(), 0.01); // 25% de 10M
assertEquals("IS", result.getTaxType());
}
@Test
void testCalculateISPME() {
double profit = 10000000.0; // 10M FCFA
TaxCalculation result = taxService.calculateIS(profit, true);
assertNotNull(result);
assertEquals(20.0, result.getTaxRate()); // Taux PME 20%
assertEquals(2000000.0, result.getTaxAmount(), 0.01); // 20% de 10M
assertEquals("IS", result.getTaxType());
}
@Test
void testTaxRateConstants() {
// Vérifier les constantes de taux
assertEquals(18.0, IvorianTaxService.TVA_RATE);
assertEquals(9.0, IvorianTaxService.TVA_REDUCED_RATE);
assertEquals(25.0, IvorianTaxService.IS_RATE);
assertEquals(20.0, IvorianTaxService.IS_REDUCED_RATE);
assertEquals(200_000_000.0, IvorianTaxService.PME_TURNOVER_THRESHOLD);
}
@Test
void testZeroAmounts() {
// Test avec montant zéro
TaxCalculation tvaResult = taxService.calculateTVA(0.0, false);
assertEquals(0.0, tvaResult.getTaxAmount());
assertEquals(0.0, tvaResult.getAmountTTC());
TaxCalculation isResult = taxService.calculateIS(0.0, false);
assertEquals(0.0, isResult.getTaxAmount());
}
@Test
void testLargeAmounts() {
// Test avec gros montants
double largeAmount = 1_000_000_000.0; // 1 milliard FCFA
TaxCalculation tvaResult = taxService.calculateTVA(largeAmount, false);
assertEquals(180_000_000.0, tvaResult.getTaxAmount(), 0.01); // 18% de 1B
TaxCalculation isResult = taxService.calculateIS(largeAmount, false);
assertEquals(250_000_000.0, isResult.getTaxAmount(), 0.01); // 25% de 1B
}
@Test
void testNegativeAmounts() {
// Les montants négatifs devraient être traités correctement
TaxCalculation tvaResult = taxService.calculateTVA(-1000000.0, false);
assertTrue(tvaResult.getTaxAmount() <= 0); // TVA négative ou nulle
TaxCalculation isResult = taxService.calculateIS(-1000000.0, false);
assertTrue(isResult.getTaxAmount() <= 0); // IS négative ou nulle
}
@Test
void testPMEThreshold() {
// Vérifier le seuil PME
double threshold = IvorianTaxService.PME_TURNOVER_THRESHOLD;
assertEquals(200_000_000.0, threshold); // 200M FCFA
// Test avec montant juste en dessous du seuil PME
double belowThreshold = threshold - 1000000.0;
TaxCalculation pmeResult = taxService.calculateIS(belowThreshold * 0.1, true); // 10% de marge
assertEquals(20.0, pmeResult.getTaxRate()); // Taux PME
// Test avec montant au-dessus du seuil
double aboveThreshold = threshold + 1000000.0;
TaxCalculation standardResult = taxService.calculateIS(aboveThreshold * 0.1, false); // 10% de marge
assertEquals(25.0, standardResult.getTaxRate()); // Taux standard
}
}