create(); $backupSet = BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup', 'status' => 'completed', 'item_count' => 0, ]); $statuses = [ 'completed', 'failed', 'aborted', 'completed_with_errors', 'partial', 'running', 'pending', ]; foreach ($statuses as $status) { RestoreRun::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $backupSet->id, 'status' => $status, 'is_dry_run' => true, 'requested_by' => 'tester@example.com', ]); } $deletableStatuses = RestoreRun::query() ->deletable() ->pluck('status') ->unique() ->sort() ->values() ->all(); expect($deletableStatuses)->toBe([ 'aborted', 'completed', 'completed_with_errors', 'failed', 'partial', ]); }); test('isDeletable accepts partial even if status casing/format differs', function () { $tenant = Tenant::factory()->create(); $backupSet = BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup', 'status' => 'completed', 'item_count' => 0, ]); $partial = RestoreRun::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $backupSet->id, 'status' => 'Partial', 'is_dry_run' => true, 'requested_by' => 'tester@example.com', ]); $completedWithErrors = RestoreRun::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $backupSet->id, 'status' => 'completed-with-errors', 'is_dry_run' => true, 'requested_by' => 'tester@example.com', ]); expect($partial->isDeletable())->toBeTrue(); expect($completedWithErrors->isDeletable())->toBeTrue(); });