active()->create([ 'name' => 'Primary Truth Tenant', 'app_status' => 'ok', ]); [$user, $tenant] = createUserWithTenant( tenant: $tenant, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); ProviderConnection::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'display_name' => 'Primary Truth Connection', 'is_default' => true, 'consent_status' => ProviderConsentStatus::Granted->value, 'verification_status' => ProviderVerificationStatus::Unknown->value, 'status' => 'connected', 'health_status' => 'ok', ]); $this->actingAs($user); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); Filament::setTenant(null, true); $component = Livewire::actingAs($user) ->test(ListTenants::class) ->assertCanSeeTableRecords([$tenant]); $table = $component->instance()->getTable(); $filterNames = array_keys($table->getFilters()); $visibleColumnNames = collect($table->getVisibleColumns()) ->map(fn ($column): string => $column->getName()) ->values() ->all(); expect($filterNames)->not->toContain('app_status') ->and($visibleColumnNames)->not->toContain('app_status') ->and($visibleColumnNames)->not->toContain('consent_status') ->and($visibleColumnNames)->not->toContain('verification_status') ->and($visibleColumnNames)->not->toContain('provider_connection_state'); }); it('keeps lifecycle and rbac separate while leading the provider summary with consent and verification', function (): void { $tenant = Tenant::factory()->create([ 'status' => Tenant::STATUS_ONBOARDING, 'app_status' => 'consent_required', 'rbac_status' => 'failed', 'name' => 'Truth Cleanup Tenant', ]); [$user, $tenant] = createUserWithTenant( tenant: $tenant, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); ProviderConnection::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'display_name' => 'Truth Cleanup Connection', 'is_default' => true, 'consent_status' => ProviderConsentStatus::Granted->value, 'verification_status' => ProviderVerificationStatus::Blocked->value, 'status' => 'connected', 'health_status' => 'ok', ]); $this->actingAs($user); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); Filament::setTenant(null, true); Livewire::test(ViewTenant::class, ['record' => $tenant->getRouteKey()]) ->assertSee('Lifecycle summary') ->assertSee('This tenant is still onboarding. It remains visible on management and review surfaces, but it is not selectable as active context until onboarding completes.') ->assertSee('RBAC status') ->assertSee('Failed') ->assertDontSee('App status') ->assertSee('Truth Cleanup Connection') ->assertSee('Granted') ->assertSee('Blocked') ->assertSee('Legacy status') ->assertSee('Connected') ->assertSee('Legacy health') ->assertSee('OK'); }); it('flags tenants that have microsoft connections but no default connection configured', function (): void { $tenant = Tenant::factory()->active()->create([ 'name' => 'Missing Default Tenant', ]); [$user, $tenant] = createUserWithTenant( tenant: $tenant, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); ProviderConnection::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'display_name' => 'Fallback Microsoft Connection', 'is_default' => false, 'consent_status' => ProviderConsentStatus::Granted->value, 'verification_status' => ProviderVerificationStatus::Healthy->value, 'status' => 'connected', 'health_status' => 'ok', ]); $this->actingAs($user); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); Filament::setTenant(null, true); Livewire::test(ViewTenant::class, ['record' => $tenant->getRouteKey()]) ->assertSee('Needs action: set a default Microsoft provider connection.') ->assertSee('Fallback Microsoft Connection') ->assertSee('Open Provider Connections'); }); it('does not collapse active lifecycle and blocked provider verification into readiness language', function (): void { $tenant = Tenant::factory()->active()->create([ 'name' => 'No False Readiness Tenant', 'app_status' => 'ok', 'rbac_status' => 'configured', ]); [$user, $tenant] = createUserWithTenant( tenant: $tenant, role: 'owner', ensureDefaultMicrosoftProviderConnection: false, ); ProviderConnection::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'provider' => 'microsoft', 'display_name' => 'Blocked Connection', 'is_default' => true, 'consent_status' => ProviderConsentStatus::Granted->value, 'verification_status' => ProviderVerificationStatus::Blocked->value, 'status' => 'connected', 'health_status' => 'ok', ]); $this->actingAs($user); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); Filament::setTenant(null, true); Livewire::test(ViewTenant::class, ['record' => $tenant->getRouteKey()]) ->assertSee('Active') ->assertSee('Granted') ->assertSee('Blocked') ->assertSee('RBAC status') ->assertDontSee('Ready'); });