What Changed Removed per-file uses(TestCase::class ...) bindings in Unit tests to avoid Pest v4 “folder already uses the test case” discovery failure (kept RefreshDatabase where needed). Updated the backup scheduling job test to pass the newly required BulkOperationService when manually calling RunBackupScheduleJob::handle(). Where Unit (bulk cleanup across 56 files) RunBackupScheduleJobTest.php Verification ./vendor/bin/sail test → 443 passed, 5 skipped Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local> Reviewed-on: #45
43 lines
1.4 KiB
PHP
43 lines
1.4 KiB
PHP
<?php
|
|
|
|
use App\Models\BackupSchedule;
|
|
use App\Services\BackupScheduling\ScheduleTimeService;
|
|
use Carbon\CarbonImmutable;
|
|
|
|
it('skips nonexistent DST local time slots for daily schedules', function () {
|
|
$schedule = new BackupSchedule;
|
|
$schedule->forceFill([
|
|
'frequency' => 'daily',
|
|
'timezone' => 'Europe/Berlin',
|
|
'time_of_day' => '02:30:00',
|
|
'days_of_week' => [],
|
|
]);
|
|
|
|
$service = app(ScheduleTimeService::class);
|
|
|
|
// On 2026-03-29 in Europe/Berlin, the clock jumps from 02:00 to 03:00 (02:30 is nonexistent).
|
|
// Using an "after" cursor later than 02:30 on the previous day forces the candidate day to be 2026-03-29.
|
|
$after = CarbonImmutable::create(2026, 3, 28, 3, 0, 0, 'Europe/Berlin');
|
|
|
|
$next = $service->nextRunFor($schedule, $after);
|
|
|
|
expect($next)->not->toBeNull();
|
|
expect($next->timezone('UTC')->format('Y-m-d H:i:s'))->toBe('2026-03-30 00:30:00');
|
|
});
|
|
|
|
it('returns null for weekly schedules without allowed days', function () {
|
|
$schedule = new BackupSchedule;
|
|
$schedule->forceFill([
|
|
'frequency' => 'weekly',
|
|
'timezone' => 'UTC',
|
|
'time_of_day' => '10:00:00',
|
|
'days_of_week' => [],
|
|
]);
|
|
|
|
$service = app(ScheduleTimeService::class);
|
|
|
|
$next = $service->nextRunFor($schedule, CarbonImmutable::create(2026, 1, 5, 0, 0, 0, 'UTC'));
|
|
|
|
expect($next)->toBeNull();
|
|
});
|