ldc-boutique-cnc-sable/tests/Unit/Domain/Enums/TaxRateTest.php
2026-10-27 09:58:12 +01:00

54 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Domain\Enums;
use Domain\Enums\TaxRate;
use Money\Currency;
use Money\Money;
describe('TaxRateEnum', function () {
it('returns correct percent', function () {
// GIVEN
$tax20 = TaxRate::TVA_20;
$tax55 = TaxRate::TVA_5_5;
// WHEN
$percent20 = $tax20->percent();
$percent55 = $tax55->percent();
// THEN
expect($percent20)->toBe(20.0)
->and($percent55)->toBe(5.5);
});
it('returns correct rate', function () {
// GIVEN
$tax20 = TaxRate::TVA_20;
$tax55 = TaxRate::TVA_5_5;
// WHEN
$rate20 = $tax20->rate();
$rate55 = $tax55->rate();
// THEN
expect($rate20)->toBe(0.2)
->and($rate55)->toBe(0.055);
});
it('applies tax correctly to money', function () {
// GIVEN
$price = new Money(10000, new Currency('EUR')); // 100.00 EUR
$tax20 = TaxRate::TVA_20;
$tax55 = TaxRate::TVA_5_5;
// WHEN
$amountWithTax20 = $tax20->applyTo($price)->getAmount();
$amountWithTax55 = $tax55->applyTo($price)->getAmount();
// THEN
expect($amountWithTax20)->toBe('12000') // 120.00 EUR
->and($amountWithTax55)->toBe('10550'); // 105.50 EUR
});
});