48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Dto\PickupExceptionDto;
|
|
use App\Models\PickupException;
|
|
use App\Models\Shop;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
describe('PickupExceptionDto Integration', function () {
|
|
test('fromModel works without pivot loaded', function () {
|
|
// GIVEN
|
|
$exception = PickupException::factory()->create();
|
|
|
|
// WHEN
|
|
$dto = PickupExceptionDto::fromModel($exception);
|
|
|
|
// THEN
|
|
expect($dto->id)->toBe($exception->id)
|
|
->and($dto->label)->toBe($exception->label)
|
|
->and($dto->pivot)->toBeNull();
|
|
});
|
|
|
|
test('fromModel works with pivot loaded from shop relationship', function () {
|
|
// GIVEN
|
|
$shop = Shop::factory()->create();
|
|
$exception = PickupException::factory()->create();
|
|
|
|
$shop->pickupExceptions()->attach($exception->id, [
|
|
'replacement_date' => '2026-05-02',
|
|
'order_deadline_at' => '2026-05-01 18:00:00',
|
|
]);
|
|
|
|
$loadedShop = Shop::query()->with('pickupExceptions')->find($shop->id);
|
|
$loadedException = $loadedShop?->pickupExceptions->first();
|
|
|
|
// WHEN
|
|
$dto = PickupExceptionDto::fromModel($loadedException);
|
|
|
|
// THEN
|
|
expect($dto->id)->toBe($exception->id)
|
|
->and($dto->pivot)->not->toBeNull()
|
|
->and($dto->pivot?->replacement_date?->format('Y-m-d'))->toBe('2026-05-02')
|
|
->and($dto->pivot?->order_deadline_at?->format('Y-m-d H:i:s'))->toBe('2026-05-01 18:00:00');
|
|
});
|
|
});
|