create(); $user = User::factory()->create(); $set = BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup', 'status' => 'completed', 'item_count' => 2, ]); $items = collect(range(1, 2))->map(function (int $i) use ($tenant, $set) { return BackupItem::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $set->id, 'policy_id' => null, 'policy_identifier' => 'policy-'.$i, 'policy_type' => 'deviceConfiguration', 'platform' => 'windows10', 'payload' => ['id' => 'policy-'.$i], 'metadata' => null, ]); }); $service = app(BulkOperationService::class); $run = $service->createRun($tenant, $user, 'backup_set', 'delete', [$set->id], 1); (new BulkBackupSetDeleteJob($run->id))->handle($service); $run->refresh(); expect($run->status)->toBe('completed') ->and($run->processed_items)->toBe(1) ->and($run->succeeded)->toBe(1) ->and($run->failed)->toBe(0) ->and($run->skipped)->toBe(0); expect(BackupSet::withTrashed()->find($set->id)?->trashed())->toBeTrue(); $items->each(function (BackupItem $item) { expect(BackupItem::withTrashed()->find($item->id)?->trashed())->toBeTrue(); }); }); test('bulk backup set delete job archives sets even when referenced by restore runs', function () { $tenant = Tenant::factory()->create(); $user = User::factory()->create(); $set = BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup', 'status' => 'completed', 'item_count' => 0, ]); RestoreRun::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $set->id, 'status' => 'completed', 'is_dry_run' => true, 'requested_by' => 'tester@example.com', ]); $service = app(BulkOperationService::class); $run = $service->createRun($tenant, $user, 'backup_set', 'delete', [$set->id], 1); (new BulkBackupSetDeleteJob($run->id))->handle($service); $run->refresh(); expect($run->status)->toBe('completed') ->and($run->processed_items)->toBe(1) ->and($run->succeeded)->toBe(1) ->and($run->failed)->toBe(0) ->and($run->skipped)->toBe(0); expect(BackupSet::withTrashed()->find($set->id)?->trashed())->toBeTrue(); expect(RestoreRun::query()->where('backup_set_id', $set->id)->exists())->toBeTrue(); });