create(); $user = User::factory()->create(); $policies = Policy::factory()->count(3)->create(['tenant_id' => $tenant->id]); $policyIds = $policies->pluck('id')->toArray(); Bus::fake(); $run = OperationRun::factory()->create([ 'tenant_id' => $tenant->getKey(), 'user_id' => $user->getKey(), 'initiator_name' => $user->name, 'type' => 'policy.delete', 'status' => 'queued', 'outcome' => 'pending', 'context' => ['scope' => 'subset', 'policy_ids' => $policyIds], 'summary_counts' => [], ]); $job = new BulkPolicyDeleteJob( tenantId: (int) $tenant->getKey(), userId: (int) $user->getKey(), policyIds: $policyIds, operationRun: $run, ); $job->handle(app(OperationRunService::class)); $run->refresh(); expect($run->status)->toBe('running'); expect((int) ($run->summary_counts['total'] ?? 0))->toBe(3); Bus::assertDispatched(PolicyBulkDeleteWorkerJob::class, 3); Bus::assertDispatched(PolicyBulkDeleteWorkerJob::class, function (PolicyBulkDeleteWorkerJob $worker) use ($tenant, $user, $policyIds, $run) { return $worker->tenantId === (int) $tenant->getKey() && $worker->userId === (int) $user->getKey() && in_array($worker->policyId, $policyIds, true) && $worker->operationRun?->is($run); }); }); test('job dispatches workers for all normalized IDs (including missing)', function () { $tenant = Tenant::factory()->create(); $user = User::factory()->create(); $policies = Policy::factory()->count(2)->create(['tenant_id' => $tenant->id]); $policyIds = $policies->pluck('id')->toArray(); $policyIds[] = 99999; Bus::fake(); $run = OperationRun::factory()->create([ 'tenant_id' => $tenant->getKey(), 'user_id' => $user->getKey(), 'initiator_name' => $user->name, 'type' => 'policy.delete', 'status' => 'queued', 'outcome' => 'pending', 'context' => ['scope' => 'subset', 'policy_ids' => $policyIds], 'summary_counts' => [], ]); $job = new BulkPolicyDeleteJob( tenantId: (int) $tenant->getKey(), userId: (int) $user->getKey(), policyIds: $policyIds, operationRun: $run, ); $job->handle(app(OperationRunService::class)); $run->refresh(); expect($run->status)->toBe('running'); expect((int) ($run->summary_counts['total'] ?? 0))->toBe(3); Bus::assertDispatched(PolicyBulkDeleteWorkerJob::class, 3); });