refactor, tests

This commit is contained in:
icefox 2026-02-25 17:47:17 -03:00
parent fc46fe20ee
commit b827038df3
No known key found for this signature in database
11 changed files with 304 additions and 103 deletions

View file

@ -6,7 +6,7 @@ namespace Tests\Values;
use Carbon\CarbonPeriod;
use Icefox\DTO\Attributes\CastWith;
use Icefox\DTO\ValueFactory;
use Icefox\DTO\Factories\ValueFactory;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
@ -216,3 +216,58 @@ test('with object cast', function () {
expect($object->period->start->format('Y-m-d'))->toBe('1980-10-01');
expect($object->period->end->format('Y-m-d'))->toBe('1990-06-01');
});
enum Status: string
{
case ACTIVE = 'active';
case INACTIVE = 'inactive';
case PENDING = 'pending';
}
readonly class TaskDTOWithEnum
{
public function __construct(
public string $title,
public Status $status,
) {}
}
readonly class TaskDTOWithNullableEnum
{
public function __construct(
public string $title,
public ?Status $status,
) {}
}
test('backed enum properly cast from validated data', function () {
$object = ValueFactory::make(TaskDTOWithEnum::class, [
'title' => 'Task 1',
'status' => 'active',
]);
expect($object->title)->toBe('Task 1')
->and($object->status)->toBeInstanceOf(Status::class)
->and($object->status)->toBe(Status::ACTIVE);
});
test('nullable backed enum with null', function () {
$object = ValueFactory::make(TaskDTOWithNullableEnum::class, [
'title' => 'Task 1',
'status' => null,
]);
expect($object->title)->toBe('Task 1')
->and($object->status)->toBeNull();
});
test('nullable backed enum with valid value', function () {
$object = ValueFactory::make(TaskDTOWithNullableEnum::class, [
'title' => 'Task 1',
'status' => 'pending',
]);
expect($object->title)->toBe('Task 1')
->and($object->status)->toBeInstanceOf(Status::class)
->and($object->status)->toBe(Status::PENDING);
});