create(); $user = User::factory()->create(); $policies = Policy::factory()->count(10)->create(['tenant_id' => $tenant->id]); $policyIds = $policies->pluck('id')->toArray(); /** @var OperationRunService $service */ $service = app(OperationRunService::class); /** @var BulkSelectionIdentity $selection */ $selection = app(BulkSelectionIdentity::class); $selectionIdentity = $selection->fromIds($policyIds); $opRun = $service->enqueueBulkOperation( tenant: $tenant, type: 'policy.delete', targetScope: [ 'entra_tenant_id' => (string) ($tenant->tenant_id ?? $tenant->external_id ?? $tenant->getKey()), ], selectionIdentity: $selectionIdentity, dispatcher: function ($operationRun) use ($tenant, $user, $policyIds): void { // Simulate sync execution (workers will run immediately on sync queue) BulkPolicyDeleteJob::dispatchSync( tenantId: (int) $tenant->getKey(), userId: (int) $user->getKey(), policyIds: $policyIds, operationRun: $operationRun, ); }, initiator: $user, emitQueuedNotification: false, ); $opRun->refresh(); expect($opRun)->toBeInstanceOf(OperationRun::class); expect($opRun->status)->toBe('completed'); expect($opRun->outcome)->toBe('succeeded'); expect($opRun->summary_counts)->toMatchArray([ 'total' => 10, 'processed' => 10, 'succeeded' => 10, ]); expect(($opRun->summary_counts['failed'] ?? 0))->toBe(0); $policies->each(function ($policy) { expect($policy->refresh()->ignored_at)->not->toBeNull(); }); });