54 lines
1.3 KiB
PHP
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
|
|
});
|
|
});
|