refactor, tests
This commit is contained in:
parent
fc46fe20ee
commit
b827038df3
11 changed files with 304 additions and 103 deletions
|
|
@ -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);
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue