d2d.emegrendeles.hu/tests/Feature/NextDeliveryDateCalculatorServiceTest.php
E98Developer d26ba5e5e6 FIX EV3-466 hétvégi szállítási napok engedélyezése a heti sablonból
A DeliveryCalendarService 4. prioritása a WorkCalendarService::isWorkDay()-t
hívta, ami a naptárban nem szereplő napoknál a hétvégére esett vissza. Így egy
hétvégét is tartalmazó sablon szombat/vasárnap mezőit sosem érte el a
kiértékelés (5. prioritás), és csak egyedi felülbírálással lehetett hétvégi
szállítást engedni.

- WorkCalendarService: új isHoliday(), ami csak a work_calendars ünnepnap
  rekordjaira ad true-t, a naptári hétvégére nem. Az isWorkDay() változatlan.
- DeliveryCalendarService: a 4. prioritás mostantól isHoliday()-t használ, így
  a hétvégéről a heti sablon dönt. Ünnepnap továbbra is tilt.
- NextDeliveryDateCalculatorService: a szállítási nap keresése kikerült az
  isWorkDay() blokkból, különben a hétvége a következő szállítási nap
  számításánál továbbra is kimaradt volna. Az átfutási időbe az új
  countsTowardLeadTime() szerint a sablon hétvégi napjai is beleszámítanak,
  a H-P sablonok viselkedése változatlan.
- DeliveryCalendarWidget: a szürke "inaktív" festés csak a nem szállítási
  hétvégékre megy rá. Mellékesen a szállítási napok ciklusa $date->addDay()-jel
  mutálta a kollekció Carbon objektumait, ez copy()-ra javítva.

7 új teszt, köztük a H-P sablon regresszió-őre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 15:59:59 +02:00

82 lines
2.6 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use App\Models\DeliverySchedule;
use App\Models\ProfitCenter;
use App\Models\ProfitCenterSupplierSchedule;
use App\Models\Supplier;
use App\Services\NextDeliveryDateCalculatorService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Carbon;
use Tests\TestCase;
uses(TestCase::class, RefreshDatabase::class);
/**
* @param array<string, bool> $days
*/
function makeAssignment(array $days, bool $hasConstraint = true): array
{
$pc = ProfitCenter::factory()->create();
$supplier = Supplier::factory()->create([
'hasDeliveryConstraint' => $hasConstraint,
'orderCutOffTime' => 12,
'deliveryLeadTime' => 48, // 2 nap
]);
$schedule = DeliverySchedule::factory()->create($days);
ProfitCenterSupplierSchedule::factory()->create([
'profit_center_id' => $pc->id,
'supplier_id' => $supplier->id,
'delivery_schedule_id' => $schedule->id,
]);
return [$pc, $supplier];
}
const EVERY_DAY = [
'monday' => true,
'tuesday' => true,
'wednesday' => true,
'thursday' => true,
'friday' => true,
'saturday' => true,
'sunday' => true,
];
const WEEKDAYS_ONLY = [
'monday' => true,
'tuesday' => true,
'wednesday' => true,
'thursday' => true,
'friday' => true,
];
it('counts scheduled weekend days towards the lead time', function () {
[$pc, $supplier] = makeAssignment(EVERY_DAY);
$result = app(NextDeliveryDateCalculatorService::class)
->calculate($supplier->id, $pc->id, Carbon::parse('2026-04-17 08:00')); // Friday, cut-off előtt
// Péntek (1.) + szombat (2.) telik el az átfutásból, így vasárnap már szállítható.
expect($result?->toDateString())->toBe('2026-04-19'); // Sunday
});
it('does not count weekends for a weekday-only schedule', function () {
[$pc, $supplier] = makeAssignment(WEEKDAYS_ONLY);
$result = app(NextDeliveryDateCalculatorService::class)
->calculate($supplier->id, $pc->id, Carbon::parse('2026-04-17 08:00')); // Friday, cut-off előtt
// Péntek (1.) + hétfő (2.) telik el a hétvége kimarad , így kedd az első szállítási nap.
expect($result?->toDateString())->toBe('2026-04-21'); // Tuesday
});
it('returns a weekend day when there is no delivery constraint', function () {
[$pc, $supplier] = makeAssignment(EVERY_DAY, hasConstraint: false);
$result = app(NextDeliveryDateCalculatorService::class)
->calculate($supplier->id, $pc->id, Carbon::parse('2026-04-18 08:00')); // Saturday
// Átfutási idő nélkül a szombat maga az első szállítási nap.
expect($result?->toDateString())->toBe('2026-04-18'); // Saturday
});