makePortfolioTriageActor('Overview Anchor Tenant'); $anchorBackup = $this->seedPortfolioBackupConcern($anchorTenant, TenantBackupHealthAssessment::POSTURE_HEALTHY); workspaceOverviewSeedRestoreHistory($anchorTenant, $anchorBackup, 'completed'); $reviewedTenant = $this->makePortfolioTriagePeer($user, $anchorTenant, 'Overview Reviewed Tenant'); $followUpTenant = $this->makePortfolioTriagePeer($user, $anchorTenant, 'Overview Follow-up Tenant'); $changedTenant = $this->makePortfolioTriagePeer($user, $anchorTenant, 'Overview Changed Tenant'); $calmTenant = $this->makePortfolioTriagePeer($user, $anchorTenant, 'Overview Calm Tenant'); foreach ([$reviewedTenant, $followUpTenant, $changedTenant] as $tenant) { $backupSet = $this->seedPortfolioBackupConcern($tenant, TenantBackupHealthAssessment::POSTURE_STALE); workspaceOverviewSeedRestoreHistory($tenant, $backupSet, 'completed'); } $calmBackup = $this->seedPortfolioBackupConcern($calmTenant, TenantBackupHealthAssessment::POSTURE_HEALTHY); workspaceOverviewSeedRestoreHistory($calmTenant, $calmBackup, 'completed'); $this->seedPortfolioTriageReview($reviewedTenant, PortfolioArrivalContextToken::FAMILY_BACKUP_HEALTH, TenantTriageReview::STATE_REVIEWED, $user); $this->seedPortfolioTriageReview($followUpTenant, PortfolioArrivalContextToken::FAMILY_BACKUP_HEALTH, TenantTriageReview::STATE_FOLLOW_UP_NEEDED, $user); $this->seedPortfolioTriageReview($changedTenant, PortfolioArrivalContextToken::FAMILY_BACKUP_HEALTH, TenantTriageReview::STATE_REVIEWED, $user, changedFingerprint: true); $workspace = $anchorTenant->workspace()->firstOrFail(); $overview = app(WorkspaceOverviewBuilder::class)->build($workspace, $user); $backupProgress = collect($overview['triage_review_progress']) ->firstWhere('concern_family', PortfolioArrivalContextToken::FAMILY_BACKUP_HEALTH); $backupMetric = collect($overview['summary_metrics'])->firstWhere('key', 'backup_attention_tenants'); expect($backupProgress['affected_total'])->toBe(3) ->and($backupProgress['reviewed_count'])->toBe(1) ->and($backupProgress['follow_up_needed_count'])->toBe(1) ->and($backupProgress['changed_since_review_count'])->toBe(1) ->and($backupProgress['not_reviewed_count'])->toBe(0) ->and($backupMetric['description'])->toContain('Reviewed 1/3.') ->and($backupProgress['not_reviewed_destination']['url'])->toContain('review_state%5B0%5D=not_reviewed'); }); it('omits triage review progress when the visible workspace slice is calm', function (): void { [$user, $tenant] = $this->makePortfolioTriageActor('Calm Overview Tenant'); $backupSet = $this->seedPortfolioBackupConcern($tenant, TenantBackupHealthAssessment::POSTURE_HEALTHY); workspaceOverviewSeedRestoreHistory($tenant, $backupSet, 'completed'); $workspace = $tenant->workspace()->firstOrFail(); $overview = app(WorkspaceOverviewBuilder::class)->build($workspace, $user); expect($overview['triage_review_progress'])->toBe([]); });