create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => 'policy.sync', 'status' => 'queued', 'outcome' => 'pending', 'initiator_name' => 'System', ]); $this->actingAs($user); Bus::fake(); Filament::setTenant(null, true); assertNoOutboundHttp(function () use ($tenant, $run) { $this->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get('/admin/operations') ->assertOk(); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get(route('admin.operations.view', ['run' => (int) $run->getKey()])) ->assertOk(); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->followingRedirects() ->get('/admin/alerts') ->assertOk() ->assertSee('Alert targets') ->assertSee('Alert rules') ->assertSee('Alert deliveries'); $this->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get('/admin/audit-log') ->assertOk(); }); Bus::assertNothingDispatched(); }); it('shows lifecycle aggregate visibility for stale and reconciled runs', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); OperationRun::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => 'policy.sync', 'status' => 'running', 'outcome' => 'pending', 'started_at' => now()->subMinutes(30), 'created_at' => now()->subMinutes(30), ]); OperationRun::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => 'restore.execute', 'status' => 'completed', 'outcome' => 'failed', 'context' => [ 'reason_code' => 'run.adapter_out_of_sync', 'reconciliation' => [ 'reconciled_at' => now()->toIso8601String(), 'reason' => 'run.adapter_out_of_sync', 'reason_code' => 'run.adapter_out_of_sync', 'source' => 'adapter_reconciler', ], ], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get('/admin/operations') ->assertOk() ->assertSee('active run(s) are beyond their lifecycle window') ->assertSee('run(s) have already been automatically reconciled'); }); it('renders completed operation rows without leaking array-state unknown badges', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); OperationRun::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => 'baseline_compare', 'status' => 'completed', 'outcome' => 'partially_succeeded', 'initiator_name' => 'Ahmed Darrazi', 'created_at' => now()->subHours(6), 'started_at' => now()->subHours(6), 'completed_at' => now()->subHours(6)->addMinute(), ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get('/admin/operations') ->assertOk() ->assertSee('Run finished') ->assertSee('Completed with follow-up') ->assertDontSee('Run finished Unknown') ->assertDontSee('Completed with follow-up Unknown'); });