create(); $user = User::factory()->create(); $policyA = Policy::factory()->create(['tenant_id' => $tenant->id]); $current = PolicyVersion::factory()->create([ 'tenant_id' => $tenant->id, 'policy_id' => $policyA->id, 'version_number' => 1, 'captured_at' => now()->subDays(120), ]); $policyB = Policy::factory()->create(['tenant_id' => $tenant->id]); $tooRecent = PolicyVersion::factory()->create([ 'tenant_id' => $tenant->id, 'policy_id' => $policyB->id, 'version_number' => 1, 'captured_at' => now()->subDays(10), ]); PolicyVersion::factory()->create([ 'tenant_id' => $tenant->id, 'policy_id' => $policyB->id, 'version_number' => 2, 'captured_at' => now()->subDays(10), ]); $tenant->forceFill(['is_current' => true])->save(); Livewire::actingAs($user) ->test(PolicyVersionResource\Pages\ListPolicyVersions::class) ->callTableBulkAction('bulk_prune_versions', collect([$current, $tooRecent]), data: [ 'retention_days' => 90, ]) ->assertHasNoTableBulkActionErrors(); $run = BulkOperationRun::query() ->where('tenant_id', $tenant->id) ->where('user_id', $user->id) ->where('resource', 'policy_version') ->where('action', 'prune') ->latest('id') ->first(); expect($run)->not->toBeNull(); $reasons = collect($run->failures ?? [])->pluck('reason')->all(); expect($reasons)->toContain('Current version') ->and($reasons)->toContain('Too recent'); });