122 lines
4.1 KiB
PHP
122 lines
4.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Domain\Models\Entities;
|
|
|
|
use Domain\Models\Entities\PrintableCoupon;
|
|
use Domain\Models\ValueObjects\Campaign\CampaignCode;
|
|
use Domain\Models\ValueObjects\Coupon\CouponCode;
|
|
use Domain\Models\ValueObjects\Coupon\CouponName;
|
|
use Domain\Models\ValueObjects\CrmHashcode;
|
|
use Domain\Models\ValueObjects\PrintableCoupon\PrintableCouponCode;
|
|
use Ramsey\Uuid\Uuid;
|
|
|
|
covers(PrintableCoupon::class);
|
|
|
|
describe('printable coupon', function (): void {
|
|
$campaignCode = new CampaignCode('AAA01');
|
|
$couponCode = new CouponCode('AAA01');
|
|
$couponName = new CouponName('Coupon name');
|
|
$crmCustomerHashcode = new CrmHashcode(Uuid::uuid4());
|
|
$distributableUntil = new \DateTimeImmutable('2027-01-01');
|
|
|
|
it('creates a printable coupon with the given values', function () use (
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
): void {
|
|
// GIVEN / WHEN
|
|
$printable = PrintableCoupon::create(
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
);
|
|
|
|
// THEN
|
|
expect($printable->campaignCode)->toBe($campaignCode)
|
|
->and($printable->couponCode)->toBe($couponCode)
|
|
->and($printable->couponName)->toBe($couponName)
|
|
->and($printable->crmCustomerHashcode)->toBe($crmCustomerHashcode)
|
|
->and($printable->distributableUntil)->toBe($distributableUntil);
|
|
});
|
|
|
|
it('generates a new code on each creation', function () use (
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
): void {
|
|
// GIVEN / WHEN
|
|
$first = PrintableCoupon::create($campaignCode, $couponCode, $couponName, $crmCustomerHashcode, $distributableUntil);
|
|
$second = PrintableCoupon::create($campaignCode, $couponCode, $couponName, $crmCustomerHashcode, $distributableUntil);
|
|
|
|
// THEN
|
|
expect($first->code)->toBeInstanceOf(PrintableCouponCode::class)
|
|
->and($first->code->equals($second->code))->toBeFalse();
|
|
});
|
|
|
|
it('exposes its code as identifier', function () use (
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
): void {
|
|
// GIVEN
|
|
$printable = PrintableCoupon::create($campaignCode, $couponCode, $couponName, $crmCustomerHashcode, $distributableUntil);
|
|
|
|
// WHEN / THEN
|
|
expect($printable->id())->toBe($printable->code);
|
|
});
|
|
|
|
it('has an update date equal to its creation date', function () use (
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
): void {
|
|
// GIVEN / WHEN
|
|
$printable = PrintableCoupon::create($campaignCode, $couponCode, $couponName, $crmCustomerHashcode, $distributableUntil);
|
|
|
|
// THEN
|
|
expect($printable->updatedAt)->toEqual($printable->createdAt())
|
|
->and($printable->updatedAt())->toBe($printable->updatedAt);
|
|
});
|
|
|
|
it('hydrates a printable coupon with the given values', function () use (
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
): void {
|
|
// GIVEN
|
|
$code = PrintableCouponCode::generate();
|
|
|
|
// WHEN
|
|
$printable = PrintableCoupon::hydrate(
|
|
$code,
|
|
$campaignCode,
|
|
$couponCode,
|
|
$couponName,
|
|
$crmCustomerHashcode,
|
|
$distributableUntil,
|
|
);
|
|
|
|
// THEN
|
|
expect($printable->code)->toBe($code)
|
|
->and($printable->campaignCode)->toBe($campaignCode)
|
|
->and($printable->couponCode)->toBe($couponCode)
|
|
->and($printable->couponName)->toBe($couponName)
|
|
->and($printable->crmCustomerHashcode)->toBe($crmCustomerHashcode)
|
|
->and($printable->distributableUntil)->toBe($distributableUntil)
|
|
->and($printable->createdAt())->toEqual($code->toDateTime());
|
|
});
|
|
});
|