create(['tenant_id' => $entraTenantId]); $user = User::factory()->create(); $selectionIdentity = app(BulkSelectionIdentity::class)->fromIds(['a', 'b', 'c']); $service = app(OperationRunService::class); $dispatchCount = 0; $runA = $service->enqueueBulkOperation( tenant: $tenant, type: 'policy.delete', targetScope: ['entra_tenant_id' => $entraTenantId], selectionIdentity: $selectionIdentity, dispatcher: function () use (&$dispatchCount): void { $dispatchCount++; }, initiator: $user, ); $runB = $service->enqueueBulkOperation( tenant: $tenant, type: 'policy.delete', targetScope: ['entra_tenant_id' => $entraTenantId], selectionIdentity: $selectionIdentity, dispatcher: function () use (&$dispatchCount): void { $dispatchCount++; }, initiator: $user, ); expect($runA->getKey())->toBe($runB->getKey()); expect($dispatchCount)->toBe(1); expect(OperationRun::query()->where('tenant_id', $tenant->id)->count())->toBe(1); })->group('ops-ux'); it('passes the OperationRun to the dispatcher when accepted', function (): void { $entraTenantId = '00000000-0000-0000-0000-000000000001'; $tenant = Tenant::factory()->create(['tenant_id' => $entraTenantId]); $user = User::factory()->create(); $selectionIdentity = app(BulkSelectionIdentity::class)->fromIds(['a']); /** @var OperationRunService $service */ $service = app(OperationRunService::class); $receivedId = null; $run = $service->enqueueBulkOperation( tenant: $tenant, type: 'policy.delete', targetScope: ['entra_tenant_id' => $entraTenantId], selectionIdentity: $selectionIdentity, dispatcher: function (OperationRun $operationRun) use (&$receivedId): void { $receivedId = $operationRun->getKey(); }, initiator: $user, ); expect($receivedId)->toBe($run->getKey()); })->group('ops-ux');