ldc-boutique-cnc-sable/tests/Integration/WithApp/App/Dto/PickupExceptionDtoTest.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');
});
});