Extract the shouldRunNow() method from ScheduledJobManager and ServerManagerJob into a reusable shouldRunCronNow() helper function. This centralizes cron scheduling logic and enables consistent deduplication behavior across all scheduled job types. - Create shouldRunCronNow() helper in bootstrap/helpers/shared.php with timezone and dedup support - Refactor ScheduledJobManager and ServerManagerJob to use the shared helper - Add ScheduledJobDiagnostics command for inspecting cache state and scheduling decisions across all scheduled jobs - Simplify shouldRunNow tests to directly test the helper function - Add DockerCleanupJob test for error handling and execution tracking - Increase scheduled log retention from 1 to 7 days
50 lines
1.6 KiB
PHP
50 lines
1.6 KiB
PHP
<?php
|
|
|
|
use App\Jobs\DockerCleanupJob;
|
|
use App\Models\DockerCleanupExecution;
|
|
use App\Models\Server;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
it('creates a failed execution record when server is not functional', function () {
|
|
$user = User::factory()->create();
|
|
$team = $user->teams()->first();
|
|
$server = Server::factory()->create(['team_id' => $team->id]);
|
|
|
|
// Make server not functional by setting is_reachable to false
|
|
$server->settings->update(['is_reachable' => false]);
|
|
|
|
$job = new DockerCleanupJob($server);
|
|
$job->handle();
|
|
|
|
$execution = DockerCleanupExecution::where('server_id', $server->id)->first();
|
|
|
|
expect($execution)->not->toBeNull()
|
|
->and($execution->status)->toBe('failed')
|
|
->and($execution->message)->toContain('not functional')
|
|
->and($execution->finished_at)->not->toBeNull();
|
|
});
|
|
|
|
it('creates a failed execution record when server is force disabled', function () {
|
|
$user = User::factory()->create();
|
|
$team = $user->teams()->first();
|
|
$server = Server::factory()->create(['team_id' => $team->id]);
|
|
|
|
// Make server not functional by force disabling
|
|
$server->settings->update([
|
|
'is_reachable' => true,
|
|
'is_usable' => true,
|
|
'force_disabled' => true,
|
|
]);
|
|
|
|
$job = new DockerCleanupJob($server);
|
|
$job->handle();
|
|
|
|
$execution = DockerCleanupExecution::where('server_id', $server->id)->first();
|
|
|
|
expect($execution)->not->toBeNull()
|
|
->and($execution->status)->toBe('failed')
|
|
->and($execution->message)->toContain('not functional');
|
|
});
|