62 lines
2.2 KiB
PHP
62 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Domain\Models\ValueObjects\PrintableCoupon;
|
|
|
|
use Domain\Models\ValueObjects\Campaign\CampaignCode;
|
|
use Domain\Models\ValueObjects\Coupon\CouponCode;
|
|
use Domain\Models\ValueObjects\CrmHashcode;
|
|
use Domain\Models\ValueObjects\PrintableCoupon\MarketingDirectCode;
|
|
use Domain\Models\ValueObjects\PrintableCoupon\PrintableCouponCode;
|
|
use Domain\Models\ValueObjects\PrintableCoupon\PrintedCoupon;
|
|
use Domain\Models\ValueObjects\PrintableCoupon\PrintedCouponId;
|
|
use Ramsey\Uuid\Uuid;
|
|
|
|
covers(PrintedCoupon::class);
|
|
|
|
describe('printed coupon', function (): void {
|
|
$printableCode = PrintableCouponCode::generate();
|
|
$marketingCode = new MarketingDirectCode('0000000000001');
|
|
$couponCode = new CouponCode('AAA01');
|
|
$campaignCode = CampaignCode::generate();
|
|
$customer = new CrmHashcode(Uuid::uuid4());
|
|
|
|
it('keeps all the given values', function () use ($marketingCode, $printableCode, $couponCode, $campaignCode, $customer): void {
|
|
// GIVEN
|
|
$id = PrintedCouponId::generate();
|
|
$printedAt = new \DateTimeImmutable('2026-01-01 12:00:00');
|
|
|
|
// WHEN
|
|
$printed = new PrintedCoupon($id, $marketingCode, $printableCode, $couponCode, $campaignCode, $customer, $printedAt);
|
|
|
|
// THEN
|
|
expect($printed->id)->toBe($id)
|
|
->and($printed->printableCode)->toBe($printableCode)
|
|
->and($printed->couponCode)->toBe($couponCode)
|
|
->and($printed->campaignCode)->toBe($campaignCode)
|
|
->and($printed->customer)->toBe($customer)
|
|
->and($printed->printedAt)->toBe($printedAt);
|
|
});
|
|
|
|
it('derives the printing date from its id', function () use ($marketingCode, $printableCode, $couponCode, $campaignCode, $customer): void {
|
|
// GIVEN
|
|
$id = PrintedCouponId::generate();
|
|
$printed = new PrintedCoupon(
|
|
$id,
|
|
$marketingCode,
|
|
$printableCode,
|
|
$couponCode,
|
|
$campaignCode,
|
|
$customer,
|
|
new \DateTimeImmutable('2020-01-01'),
|
|
);
|
|
|
|
// WHEN
|
|
$date = $printed->printedAt();
|
|
|
|
// THEN
|
|
expect($date)->toEqual($id->toDateTime())
|
|
->and($date)->not->toEqual($printed->printedAt);
|
|
});
|
|
});
|