70 lines
1.9 KiB
PHP
70 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Domain\Models\ValueObjects;
|
|
|
|
use Domain\Models\ValueObjects\OrderReference;
|
|
use Symfony\Component\Uid\Uuid;
|
|
|
|
describe('OrderReference', function () {
|
|
|
|
function getNewOrderReference(string $value): OrderReference
|
|
{
|
|
return new OrderReference($value);
|
|
}
|
|
|
|
it('can instantiate', function () {
|
|
// GIVEN
|
|
$uuidBase58 = Uuid::v7()->toBase58();
|
|
|
|
// WHEN
|
|
$vo = getNewOrderReference($uuidBase58);
|
|
|
|
// THEN
|
|
expect($vo)->toBeInstanceOf(OrderReference::class);
|
|
expect((string) $vo)->toBe($uuidBase58);
|
|
});
|
|
|
|
it('throws exception if order reference is empty', function () {
|
|
// GIVEN
|
|
$value = ' ';
|
|
|
|
// WHEN
|
|
$action = fn () => getNewOrderReference($value);
|
|
|
|
// THEN
|
|
expect($action)->toThrow(\DomainException::class);
|
|
});
|
|
|
|
it('throws exception if order reference is not a valid base58 string', function () {
|
|
// GIVEN
|
|
$value = 'invalid_base58_string!!!!';
|
|
|
|
// WHEN
|
|
$action = fn () => getNewOrderReference($value);
|
|
|
|
// THEN
|
|
expect($action)->toThrow(\DomainException::class);
|
|
});
|
|
|
|
it('throws exception if provided UUID is not v7', function () {
|
|
// GIVEN
|
|
$uuidV4Base58 = Uuid::v4()->toBase58();
|
|
|
|
// WHEN
|
|
$action = fn () => getNewOrderReference($uuidV4Base58);
|
|
|
|
// THEN
|
|
expect($action)->toThrow(\DomainException::class);
|
|
});
|
|
});
|
|
|
|
it('throws exception if base58 string is syntactically valid but invalid length when decoded', function (): void {
|
|
// GIVEN
|
|
$value = 'zzzzzzzzzzzzzzzzzzzzzz'; // 22 valid chars, but decodes to out-of-bounds UUID
|
|
// WHEN
|
|
$action = fn () => new OrderReference($value);
|
|
// THEN
|
|
expect($action)->toThrow(\DomainException::class, 'Order reference must be a valid base-58 string');
|
|
});
|