active()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'name' => 'Baseline A', ]); $snapshot = BaselineSnapshot::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'baseline_profile_id' => (int) $profile->getKey(), ]); $profile->update(['active_snapshot_id' => (int) $snapshot->getKey()]); BaselineTenantAssignment::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'baseline_profile_id' => (int) $profile->getKey(), ]); return [$user, $tenant, $profile, $snapshot]; } function seedTrustworthyCompare(array $tenantContext): void { [$user, $tenant, $profile, $snapshot] = $tenantContext; OperationRun::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => OperationRunType::BaselineCompare->value, 'status' => OperationRunStatus::Completed->value, 'outcome' => OperationRunOutcome::Succeeded->value, 'completed_at' => now()->subHour(), 'context' => [ 'baseline_profile_id' => (int) $profile->getKey(), 'baseline_snapshot_id' => (int) $snapshot->getKey(), 'baseline_compare' => [ 'reason_code' => BaselineCompareReasonCode::NoDriftDetected->value, 'coverage' => [ 'effective_types' => ['deviceConfiguration'], 'covered_types' => ['deviceConfiguration'], 'uncovered_types' => [], 'proof' => true, ], ], ], ]); } it('suppresses calm dashboard wording when operations follow-up still exists', function (): void { $tenantContext = createTruthAlignedDashboardTenant(); [$user, $tenant] = $tenantContext; $this->actingAs($user); seedTrustworthyCompare($tenantContext); OperationRun::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => 'inventory_sync', 'status' => OperationRunStatus::Queued->value, 'outcome' => OperationRunOutcome::Pending->value, 'created_at' => now()->subHour(), ]); Filament::setCurrentPanel(Filament::getPanel('tenant')); Filament::setTenant($tenant, true); Livewire::test(NeedsAttention::class) ->assertSee('Operations need follow-up') ->assertSee('Open operations') ->assertDontSee('Current governance and findings signals look trustworthy.'); Livewire::test(BaselineCompareNow::class) ->assertSee('Action required') ->assertSee('operation') ->assertSee('Open operations') ->assertDontSee('Aligned'); }); it('suppresses compare calmness when high-severity active findings remain open', function (): void { $tenantContext = createTruthAlignedDashboardTenant(); [$user, $tenant] = $tenantContext; $this->actingAs($user); seedTrustworthyCompare($tenantContext); Finding::factory()->for($tenant)->create([ 'status' => Finding::STATUS_TRIAGED, 'severity' => Finding::SEVERITY_CRITICAL, 'finding_type' => Finding::FINDING_TYPE_PERMISSION_POSTURE, ]); Filament::setCurrentPanel(Filament::getPanel('tenant')); Filament::setTenant($tenant, true); Livewire::test(NeedsAttention::class) ->assertSee('High severity active findings') ->assertSee('Open findings') ->assertDontSee('Current governance and findings signals look trustworthy.'); Livewire::test(BaselineCompareNow::class) ->assertSee('Action required') ->assertSee('high-severity active finding') ->assertSee('Open findings') ->assertDontSee('Aligned'); }); it('keeps healthy operations-only activity separate from governance attention', function (): void { $tenantContext = createTruthAlignedDashboardTenant(); [$user, $tenant] = $tenantContext; $this->actingAs($user); seedTrustworthyCompare($tenantContext); OperationRun::factory()->create([ 'tenant_id' => (int) $tenant->getKey(), 'workspace_id' => (int) $tenant->workspace_id, 'type' => 'inventory_sync', 'status' => OperationRunStatus::Running->value, 'outcome' => OperationRunOutcome::Pending->value, 'created_at' => now()->subMinute(), 'started_at' => now()->subMinute(), ]); Filament::setCurrentPanel(Filament::getPanel('tenant')); Filament::setTenant($tenant, true); Livewire::test(NeedsAttention::class) ->assertSee('Current governance and findings signals look trustworthy.') ->assertSee('Operations are active') ->assertDontSee('Operations need follow-up'); Livewire::test(BaselineCompareNow::class) ->assertSee('Aligned') ->assertSee('No action needed') ->assertDontSee('Action required'); }); it('keeps overdue and governance-lapsed attention actionable without falling back to calm wording', function (): void { $tenantContext = createTruthAlignedDashboardTenant(); [$user, $tenant] = $tenantContext; $this->actingAs($user); seedTrustworthyCompare($tenantContext); Finding::factory()->for($tenant)->create([ 'status' => Finding::STATUS_TRIAGED, 'due_at' => now()->subDay(), ]); $lapsedFinding = Finding::factory()->for($tenant)->create([ 'status' => Finding::STATUS_RISK_ACCEPTED, ]); FindingException::query()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'finding_id' => (int) $lapsedFinding->getKey(), 'requested_by_user_id' => (int) $user->getKey(), 'owner_user_id' => (int) $user->getKey(), 'approved_by_user_id' => (int) $user->getKey(), 'status' => FindingException::STATUS_ACTIVE, 'current_validity_state' => FindingException::VALIDITY_MISSING_SUPPORT, 'request_reason' => 'Lapsed governance', 'approval_reason' => 'Approved', 'requested_at' => now()->subDays(5), 'approved_at' => now()->subDays(4), 'effective_from' => now()->subDays(4), 'review_due_at' => now()->subDay(), 'expires_at' => now()->subDay(), 'evidence_summary' => ['reference_count' => 0], ]); Filament::setCurrentPanel(Filament::getPanel('tenant')); Filament::setTenant($tenant, true); Livewire::test(NeedsAttention::class) ->assertSee('Overdue findings') ->assertSee('Lapsed accepted-risk governance') ->assertSee('Open findings') ->assertDontSee('Current governance and findings signals look trustworthy.'); Livewire::test(BaselineCompareNow::class) ->assertSee('Action required') ->assertSee('Open findings') ->assertDontSee('Aligned'); });