Files
myep/tests/Form/Model/AcceptedVouchersTest.php
T

108 lines
3.2 KiB
PHP

<?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());
}
}