create(); $user = User::factory()->create(); // 4 items total -> failure threshold is floor(4/2)=2, so 3 failures triggers circuit breaker. $okPolicy = Policy::factory()->create(['tenant_id' => $tenant->id]); PolicyVersion::create([ 'tenant_id' => $tenant->id, 'policy_id' => $okPolicy->id, 'policy_type' => $okPolicy->policy_type, 'version_number' => 1, 'snapshot' => ['ok' => true], 'captured_at' => now(), ]); $failA = Policy::factory()->create(['tenant_id' => $tenant->id]); $failB = Policy::factory()->create(['tenant_id' => $tenant->id]); $failC = Policy::factory()->create(['tenant_id' => $tenant->id]); /** @var OperationRunService $service */ $service = app(OperationRunService::class); $policyIds = [$okPolicy->id, $failA->id, $failB->id, $failC->id]; $opRun = $service->ensureRun( tenant: $tenant, type: 'policy.export', inputs: [ 'scope' => 'subset', 'policy_ids' => $policyIds, ], initiator: $user, ); (new BulkPolicyExportJob( tenantId: (int) $tenant->getKey(), userId: (int) $user->getKey(), policyIds: $policyIds, backupName: 'Circuit Breaker Backup', operationRun: $opRun, ))->handle($service); $opRun->refresh(); expect($opRun)->toBeInstanceOf(OperationRun::class); expect($opRun->status)->toBe('completed'); expect($opRun->outcome)->toBe('failed'); expect($opRun->failure_summary)->not->toBeEmpty(); $this->assertDatabaseHas('backup_sets', [ 'tenant_id' => $tenant->id, 'name' => 'Circuit Breaker Backup', 'status' => 'failed', ]); });