ldc-mesbr-app/tests/Unit/Domain/Models/ValueObjects/PrintableCoupon/PrintedCouponTest.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 = CouponCode::generate();
$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);
});
});