2026-09-23 13:13:49 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
namespace Tests\Unit\Domain\Models\ValueObjects\Campaign;
|
|
|
|
|
|
|
|
|
|
use Domain\Models\ValueObjects\Campaign\CampaignCode;
|
2026-10-20 17:39:31 +02:00
|
|
|
use Ramsey\Uuid\Uuid;
|
2026-09-23 13:13:49 +02:00
|
|
|
|
|
|
|
|
covers(CampaignCode::class);
|
|
|
|
|
|
|
|
|
|
describe('campaign code', function (): void {
|
2026-10-20 17:39:31 +02:00
|
|
|
it('generates a valid uuid v7 code', function (): void {
|
|
|
|
|
// GIVEN / WHEN
|
|
|
|
|
$code = CampaignCode::generate();
|
2026-09-23 13:13:49 +02:00
|
|
|
|
2026-10-20 17:39:31 +02:00
|
|
|
// THEN
|
|
|
|
|
expect(Uuid::isValid($code->value))->toBeTrue()
|
|
|
|
|
->and(Uuid::fromString($code->value)->getVersion())->toBe(7);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('generates a different code each time', function (): void {
|
2026-10-01 12:04:26 +02:00
|
|
|
// GIVEN / WHEN
|
2026-10-20 17:39:31 +02:00
|
|
|
$first = CampaignCode::generate();
|
|
|
|
|
$second = CampaignCode::generate();
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
expect($first->value)->not->toBe($second->value);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('wraps a given uuid v7', function (): void {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$uuid = Uuid::uuid7();
|
|
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$code = new CampaignCode($uuid);
|
2026-09-23 13:13:49 +02:00
|
|
|
|
|
|
|
|
// THEN
|
2026-10-20 17:39:31 +02:00
|
|
|
expect($code->value)->toBe($uuid->toString());
|
2026-09-23 13:13:49 +02:00
|
|
|
});
|
|
|
|
|
|
2026-10-20 17:39:31 +02:00
|
|
|
it('rejects a uuid that is not v7', function (): void {
|
2026-10-01 12:04:26 +02:00
|
|
|
// GIVEN / WHEN / THEN
|
2026-10-20 17:39:31 +02:00
|
|
|
expect(fn (): CampaignCode => new CampaignCode(Uuid::uuid4()))
|
2026-10-12 17:08:07 +02:00
|
|
|
->toThrow(\DomainException::class);
|
2026-09-23 13:13:49 +02:00
|
|
|
});
|
|
|
|
|
});
|