chore(quarkus-327): bump to Quarkus 3.27.3 LTS, rename quarkus-resteasy-reactive → quarkus-rest, fix testGetAuditQuestions map vs list, rename deprecated config keys
This commit is contained in:
124
src/test/java/dev/lions/compliance/IvorianTaxServiceTest.java
Normal file
124
src/test/java/dev/lions/compliance/IvorianTaxServiceTest.java
Normal file
@@ -0,0 +1,124 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user