53 lines
1.8 KiB
PHP
53 lines
1.8 KiB
PHP
<?php
|
|
|
|
use App\Services\AboHelper;
|
|
use Carbon\Carbon;
|
|
|
|
describe('getFirstAboDate', function () {
|
|
beforeEach(function () {
|
|
Carbon::setTestNow(Carbon::parse('2026-03-31 12:00:00', 'Europe/Berlin'));
|
|
});
|
|
|
|
afterEach(function () {
|
|
Carbon::setTestNow();
|
|
});
|
|
|
|
it('schiebt Liefertag 5 vom 31. März auf Mai, weil April unter 10 Tagen liegt', function () {
|
|
$first = AboHelper::getFirstAboDate(now(), 5);
|
|
|
|
expect($first->format('Y-m-d'))->toBe('2026-05-05');
|
|
});
|
|
|
|
it('behält Liefertag 10 im April, wenn genau 10 Tage Abstand', function () {
|
|
$first = AboHelper::getFirstAboDate(now(), 10);
|
|
|
|
expect($first->format('Y-m-d'))->toBe('2026-04-10');
|
|
});
|
|
|
|
it('schiebt Liefertag 9 auf Mai, wenn der April-Termin nur 9 Tage Abstand hat', function () {
|
|
// 31. März 2026 -> nächster Kandidat 9. April (9 Tage), muss auf Mai rutschen
|
|
$first = AboHelper::getFirstAboDate(now(), 9);
|
|
|
|
expect($first->format('Y-m-d'))->toBe('2026-05-09');
|
|
});
|
|
});
|
|
|
|
describe('calendarDaysUntil', function () {
|
|
it('zählt Kalendertage, nicht 24h-Intervalle bei Tageszeit von now()', function () {
|
|
Carbon::setTestNow(Carbon::parse('2026-03-31 14:30:00', 'Europe/Berlin'));
|
|
|
|
$apr10 = Carbon::parse('2026-04-10')->startOfDay();
|
|
expect(AboHelper::calendarDaysUntil(now(), $apr10))->toBe(10);
|
|
|
|
Carbon::setTestNow();
|
|
});
|
|
|
|
it('liefert für Liefertag 5 (Mai) genug Tage, dass die Warnung unter 20 Tage nicht greift', function () {
|
|
Carbon::setTestNow(Carbon::parse('2026-03-31 12:00:00', 'Europe/Berlin'));
|
|
$may5 = AboHelper::getFirstAboDate(now(), 5);
|
|
|
|
expect(AboHelper::calendarDaysUntil(now(), $may5))->toBeGreaterThanOrEqual(20);
|
|
|
|
Carbon::setTestNow();
|
|
});
|
|
});
|