active()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'name' => 'Security Baseline', ]); $currentSnapshot = BaselineSnapshot::factory()->complete()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'baseline_profile_id' => (int) $profile->getKey(), 'captured_at' => now()->subHour(), 'completed_at' => now()->subHour(), ]); $latestAttempt = BaselineSnapshot::factory()->incomplete()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'baseline_profile_id' => (int) $profile->getKey(), 'captured_at' => now(), ]); $profile->update(['active_snapshot_id' => (int) $currentSnapshot->getKey()]); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); $this->actingAs($user) ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin')) ->assertOk() ->assertSee('Baseline truth') ->assertSee('Current snapshot') ->assertSee('Snapshot #'.$currentSnapshot->getKey().' (Complete)') ->assertSee('Latest attempt') ->assertSee('Snapshot #'.$latestAttempt->getKey().' (Incomplete)') ->assertSee('Compare readiness') ->assertSee('No eligible compare target') ->assertSee('Assign this baseline to a tenant you can compare, or use an account with access to an assigned tenant.'); }); it('shows compare readiness as ready when a consumable snapshot and eligible target tenant exist', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $profile = BaselineProfile::factory()->active()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'name' => 'Security Baseline', ]); $currentSnapshot = BaselineSnapshot::factory()->complete()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'baseline_profile_id' => (int) $profile->getKey(), 'captured_at' => now()->subHour(), 'completed_at' => now()->subHour(), ]); $profile->update(['active_snapshot_id' => (int) $currentSnapshot->getKey()]); \App\Models\BaselineTenantAssignment::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'baseline_profile_id' => (int) $profile->getKey(), ]); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); $this->actingAs($user) ->get(BaselineProfileResource::getUrl('view', ['record' => $profile], panel: 'admin')) ->assertOk() ->assertSee('Compare readiness') ->assertSee('Ready') ->assertSee('No action needed.'); }); it('shows lifecycle and current-truth state across baseline snapshot list and detail surfaces', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); $profile = BaselineProfile::factory()->active()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'name' => 'Security Baseline', ]); $historicalSnapshot = BaselineSnapshot::factory()->complete()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'baseline_profile_id' => (int) $profile->getKey(), 'captured_at' => now()->subDay(), 'completed_at' => now()->subDay(), ]); $currentSnapshot = BaselineSnapshot::factory()->complete()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'baseline_profile_id' => (int) $profile->getKey(), 'captured_at' => now(), 'completed_at' => now(), ]); $profile->update(['active_snapshot_id' => (int) $currentSnapshot->getKey()]); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); $this->actingAs($user) ->get(BaselineSnapshotResource::getUrl(panel: 'admin')) ->assertOk() ->assertSee('Lifecycle') ->assertSee('Current truth') ->assertSee('Historical trace') ->assertSee('Current baseline'); $this->actingAs($user) ->get(BaselineSnapshotResource::getUrl('view', ['record' => $historicalSnapshot], panel: 'admin')) ->assertOk() ->assertSee('Snapshot truth') ->assertSee('Historical trace') ->assertSee('Superseded'); });