create([ 'status' => 'active', 'name' => 'Alpha Tenant', 'external_id' => 'alpha-tenant', ]); [$user, $alphaTenant] = createUserWithTenant($alphaTenant, role: 'owner', workspaceRole: 'owner'); $bravoTenant = Tenant::factory()->create([ 'status' => 'active', 'workspace_id' => (int) $alphaTenant->workspace_id, 'name' => 'Bravo Tenant', 'external_id' => 'bravo-tenant', ]); $user->tenants()->syncWithoutDetaching([ (int) $bravoTenant->getKey() => ['role' => 'owner'], ]); Finding::factory() ->for($alphaTenant) ->assignedTo((int) $user->getKey()) ->ownedBy((int) $user->getKey()) ->overdueByHours() ->create(); Finding::factory() ->for($bravoTenant) ->reopened() ->create(); OperationRun::factory() ->forTenant($alphaTenant) ->create([ 'status' => OperationRunStatus::Completed->value, 'outcome' => OperationRunOutcome::Failed->value, 'completed_at' => now()->subMinute(), ]); AlertDelivery::factory()->create([ 'tenant_id' => null, 'workspace_id' => (int) $alphaTenant->workspace_id, 'status' => AlertDelivery::STATUS_FAILED, 'payload' => [ 'title' => 'Delivery failed', 'body' => 'A notification destination failed.', ], ]); $backupHealthResolver = app(TenantBackupHealthResolver::class); $fingerprints = app(TenantTriageReviewFingerprint::class); $alphaBackupFingerprint = $fingerprints->forBackupHealth($backupHealthResolver->assess($alphaTenant)); expect($alphaBackupFingerprint)->not->toBeNull(); TenantTriageReview::factory() ->for($alphaTenant) ->followUpNeeded() ->create([ 'workspace_id' => (int) $alphaTenant->workspace_id, 'reviewed_by_user_id' => (int) $user->getKey(), 'concern_family' => PortfolioArrivalContextToken::FAMILY_BACKUP_HEALTH, 'review_fingerprint' => $alphaBackupFingerprint['fingerprint'], 'review_snapshot' => $alphaBackupFingerprint['snapshot'], ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $alphaTenant->workspace_id]) ->get(GovernanceInbox::getUrl(panel: 'admin')) ->assertOk() ->assertSee('Assigned findings') ->assertSee('Findings intake') ->assertSee('Operations follow-up') ->assertSee('Alert delivery failures') ->assertSee('Review follow-up') ->assertSee('Open my findings') ->assertSee('Open terminal follow-up') ->assertSee('Open alert deliveries') ->assertSee('Open review follow-up'); }); it('renders honest empty states for tenant and family filtering on the governance inbox page', function (): void { $alphaTenant = Tenant::factory()->create([ 'status' => 'active', 'name' => 'Alpha Tenant', 'external_id' => 'alpha-tenant', ]); [$user, $alphaTenant] = createUserWithTenant($alphaTenant, role: 'owner', workspaceRole: 'owner'); $bravoTenant = Tenant::factory()->create([ 'status' => 'active', 'workspace_id' => (int) $alphaTenant->workspace_id, 'name' => 'Bravo Tenant', 'external_id' => 'bravo-tenant', ]); $user->tenants()->syncWithoutDetaching([ (int) $bravoTenant->getKey() => ['role' => 'owner'], ]); Finding::factory() ->for($bravoTenant) ->assignedTo((int) $user->getKey()) ->create(); AlertDelivery::factory()->create([ 'tenant_id' => null, 'workspace_id' => (int) $alphaTenant->workspace_id, 'status' => AlertDelivery::STATUS_FAILED, ]); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $alphaTenant->workspace_id]) ->get(GovernanceInbox::getUrl(panel: 'admin').'?tenant_id='.(string) $alphaTenant->getKey()) ->assertOk() ->assertSee('This tenant filter is hiding other visible attention') ->assertSee('Clear tenant filter'); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $alphaTenant->workspace_id]) ->get(GovernanceInbox::getUrl(panel: 'admin').'?tenant_id='.(string) $alphaTenant->getKey().'&family=alert_delivery_failures') ->assertOk() ->assertSee('Alert delivery failures') ->assertSee('No failed alert deliveries match this tenant filter right now.') ->assertDontSee('Open my findings'); });