2026-06-14 21:32:07 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
|
|
use App\Casts\OrderReferenceCast;
|
|
|
|
|
use Domain\Models\ValueObjects\OrderReference;
|
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
2026-10-03 10:51:42 +02:00
|
|
|
use Ramsey\Uuid\Uuid;
|
2026-10-27 16:09:39 +01:00
|
|
|
use Shared\Helpers\UuidHelper;
|
2026-06-14 21:32:07 +02:00
|
|
|
|
|
|
|
|
it('gets a reference', function () {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$cast = new OrderReferenceCast();
|
|
|
|
|
$model = \Mockery::mock(Model::class);
|
2026-10-03 10:51:42 +02:00
|
|
|
$uuid = Uuid::uuid7();
|
2026-10-27 16:09:39 +01:00
|
|
|
$value = UuidHelper::toBase58($uuid);
|
2026-06-14 21:32:07 +02:00
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$reference = $cast->get($model, 'reference', $value, []);
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
expect($reference)->toBeInstanceOf(OrderReference::class)
|
2026-10-03 10:51:42 +02:00
|
|
|
->and((string) $reference)->toBe($value)
|
|
|
|
|
->and($reference->value->equals($uuid))->toBeTrue();
|
2026-06-14 21:32:07 +02:00
|
|
|
});
|
|
|
|
|
|
2026-10-27 16:09:39 +01:00
|
|
|
it('gets a reference from raw uuid string', function () {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$cast = new OrderReferenceCast();
|
|
|
|
|
$model = \Mockery::mock(Model::class);
|
|
|
|
|
$uuid = Uuid::uuid7();
|
|
|
|
|
$value = $uuid->toString();
|
|
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$reference = $cast->get($model, 'reference', $value, []);
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
expect($reference)->toBeInstanceOf(OrderReference::class)
|
|
|
|
|
->and((string) $reference)->toBe(UuidHelper::toBase58($uuid))
|
|
|
|
|
->and($reference->value->equals($uuid))->toBeTrue();
|
|
|
|
|
});
|
|
|
|
|
|
2026-06-14 21:32:07 +02:00
|
|
|
it('throws exception when getting invalid reference', function () {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$cast = new OrderReferenceCast();
|
|
|
|
|
$model = \Mockery::mock(Model::class);
|
|
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$cast->get($model, 'reference', 123, []);
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
})->throws(\UnexpectedValueException::class, 'OrderReference cannot be null.');
|
|
|
|
|
|
|
|
|
|
it('throws exception when getting null reference', function () {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$cast = new OrderReferenceCast();
|
|
|
|
|
$model = \Mockery::mock(Model::class);
|
|
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$cast->get($model, 'reference', null, []);
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
})->throws(\UnexpectedValueException::class, 'OrderReference cannot be null.');
|
|
|
|
|
|
|
|
|
|
it('throws exception when setting invalid reference type', function () {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$cast = new OrderReferenceCast();
|
|
|
|
|
$model = \Mockery::mock(Model::class);
|
2026-10-27 16:09:39 +01:00
|
|
|
$value = UuidHelper::toBase58(Uuid::uuid7());
|
2026-06-14 21:32:07 +02:00
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$cast->set($model, 'reference', $value, []);
|
|
|
|
|
|
|
|
|
|
// THEN
|
|
|
|
|
})->throws(
|
|
|
|
|
\UnexpectedValueException::class,
|
|
|
|
|
'The given value is not an instance of OrderReference.'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
it('sets a reference', function () {
|
|
|
|
|
// GIVEN
|
|
|
|
|
$cast = new OrderReferenceCast();
|
|
|
|
|
$model = \Mockery::mock(Model::class);
|
2026-10-03 10:51:42 +02:00
|
|
|
$uuid = Uuid::uuid7();
|
|
|
|
|
$reference = new OrderReference($uuid);
|
2026-06-14 21:32:07 +02:00
|
|
|
|
|
|
|
|
// WHEN
|
|
|
|
|
$value = $cast->set($model, 'reference', $reference, []);
|
|
|
|
|
|
|
|
|
|
// THEN
|
2026-10-27 16:09:39 +01:00
|
|
|
expect($value)->toBe(UuidHelper::toBase58($uuid));
|
2026-06-14 21:32:07 +02:00
|
|
|
});
|