create(); $user = User::factory()->create(); $user->tenants()->syncWithoutDetaching([ $tenant->getKey() => ['role' => 'owner'], ]); Filament::setTenant($tenant, true); $sets = collect(range(1, 3))->map(function (int $i) use ($tenant) { return BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup '.$i, 'status' => 'completed', 'item_count' => 1, ]); }); $sets->each(function (BackupSet $set) use ($tenant) { BackupItem::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $set->id, 'policy_id' => null, 'policy_identifier' => 'policy-'.$set->id, 'policy_type' => 'deviceConfiguration', 'platform' => 'windows10', 'payload' => ['id' => 'policy-'.$set->id], 'metadata' => null, ]); }); Livewire::actingAs($user) ->test(BackupSetResource\Pages\ListBackupSets::class) ->callTableBulkAction('bulk_delete', $sets) ->assertHasNoTableBulkActionErrors(); $sets->each(fn (BackupSet $set) => expect(BackupSet::withTrashed()->find($set->id)?->trashed())->toBeTrue()); $bulkRun = BulkOperationRun::query() ->where('resource', 'backup_set') ->where('action', 'delete') ->latest('id') ->first(); expect($bulkRun)->not->toBeNull(); expect($bulkRun->status)->toBe('completed'); }); test('backup sets can be archived even when referenced by restore runs', function () { $tenant = Tenant::factory()->create(); $user = User::factory()->create(); $user->tenants()->syncWithoutDetaching([ $tenant->getKey() => ['role' => 'owner'], ]); Filament::setTenant($tenant, true); $set = BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup', 'status' => 'completed', 'item_count' => 0, ]); $restoreRun = RestoreRun::create([ 'tenant_id' => $tenant->id, 'backup_set_id' => $set->id, 'status' => 'completed', 'is_dry_run' => true, 'requested_by' => 'tester@example.com', ]); Livewire::actingAs($user) ->test(BackupSetResource\Pages\ListBackupSets::class) ->callTableBulkAction('bulk_delete', collect([$set])) ->assertHasNoTableBulkActionErrors(); expect(BackupSet::withTrashed()->find($set->id)?->trashed())->toBeTrue(); expect(RestoreRun::withTrashed()->find($restoreRun->id))->not->toBeNull(); }); test('backup sets table bulk archive requires type-to-confirm for 10+ sets', function () { $tenant = Tenant::factory()->create(); $user = User::factory()->create(); $user->tenants()->syncWithoutDetaching([ $tenant->getKey() => ['role' => 'owner'], ]); Filament::setTenant($tenant, true); $sets = collect(range(1, 10))->map(function (int $i) use ($tenant) { return BackupSet::create([ 'tenant_id' => $tenant->id, 'name' => 'Backup '.$i, 'status' => 'completed', 'item_count' => 0, ]); }); Livewire::actingAs($user) ->test(BackupSetResource\Pages\ListBackupSets::class) ->callTableBulkAction('bulk_delete', $sets) ->assertHasTableBulkActionErrors(); Livewire::actingAs($user) ->test(BackupSetResource\Pages\ListBackupSets::class) ->callTableBulkAction('bulk_delete', $sets, data: [ 'confirmation' => 'DELETE', ]) ->assertHasNoTableBulkActionErrors(); });