feat: finalize voucher handling and discount display in summary and overview
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Form\Model;
|
||||
|
||||
use App\Form\Model\AcceptedVoucherDto;
|
||||
use App\Form\Model\AcceptedVouchersDto;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class AcceptedVouchersTest extends TestCase
|
||||
{
|
||||
public function testAddVoucherCalculatesTotalDiscount(): void
|
||||
{
|
||||
$acceptedVouchers = new AcceptedVouchersDto();
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PROMOTIONAL,
|
||||
code: 'PROMO10',
|
||||
amount: 50.00
|
||||
));
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PURCHASE,
|
||||
code: 'G1234',
|
||||
amount: 100.00
|
||||
));
|
||||
|
||||
$this->assertEquals(150.0, $acceptedVouchers->getTotalDiscount());
|
||||
$this->assertCount(2, $acceptedVouchers->getVouchers());
|
||||
}
|
||||
|
||||
public function testFilterVouchersByType(): void
|
||||
{
|
||||
$acceptedVouchers = new AcceptedVouchersDto();
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PROMOTIONAL,
|
||||
code: 'PROMO10',
|
||||
amount: 50.00
|
||||
));
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PURCHASE,
|
||||
code: 'G1234',
|
||||
amount: 100.00
|
||||
));
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_GOODWILL,
|
||||
code: 'K5678',
|
||||
amount: 75.00
|
||||
));
|
||||
|
||||
$this->assertCount(1, $acceptedVouchers->getPromotionalVouchers());
|
||||
$this->assertCount(1, $acceptedVouchers->getPurchaseVouchers());
|
||||
$this->assertCount(1, $acceptedVouchers->getGoodwillVouchers());
|
||||
}
|
||||
|
||||
public function testHasVouchersReturnsFalseWhenEmpty(): void
|
||||
{
|
||||
$acceptedVouchers = new AcceptedVouchersDto();
|
||||
|
||||
$this->assertFalse($acceptedVouchers->hasVouchers());
|
||||
$this->assertEquals(0, $acceptedVouchers->count());
|
||||
}
|
||||
|
||||
public function testHasVouchersReturnsTrueWhenNotEmpty(): void
|
||||
{
|
||||
$acceptedVouchers = new AcceptedVouchersDto();
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PROMOTIONAL,
|
||||
code: 'PROMO10',
|
||||
amount: 50.00
|
||||
));
|
||||
|
||||
$this->assertTrue($acceptedVouchers->hasVouchers());
|
||||
$this->assertEquals(1, $acceptedVouchers->count());
|
||||
}
|
||||
|
||||
public function testFloatPrecisionHandling(): void
|
||||
{
|
||||
$acceptedVouchers = new AcceptedVouchersDto();
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PROMOTIONAL,
|
||||
code: 'PROMO1',
|
||||
amount: 33.33
|
||||
));
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PROMOTIONAL,
|
||||
code: 'PROMO2',
|
||||
amount: 33.33
|
||||
));
|
||||
|
||||
$acceptedVouchers->addVoucher(new AcceptedVoucherDto(
|
||||
type: AcceptedVoucherDto::TYPE_PROMOTIONAL,
|
||||
code: 'PROMO3',
|
||||
amount: 33.34
|
||||
));
|
||||
|
||||
// Should be exactly 100.00 with proper rounding
|
||||
$this->assertEquals(100.0, $acceptedVouchers->getTotalDiscount());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user