create([ 'status' => Tenant::STATUS_ONBOARDING, 'app_status' => 'consent_required', 'rbac_status' => 'failed', 'name' => 'Separated Status Tenant', ]), role: 'owner', ); $this->actingAs($user); Filament::setTenant($tenant, 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('App status') ->assertSee('Consent required') ->assertSee('RBAC status') ->assertSee('Failed'); }); it('keeps referenced tenant lifecycle context separate from run status in the tenantless operations viewer', function (): void { $tenant = Tenant::factory()->onboarding()->create([ 'name' => 'Viewer Separation Tenant', ]); [$user, $tenant] = createUserWithTenant(tenant: $tenant, role: 'owner'); $run = OperationRun::factory()->create([ 'workspace_id' => (int) $tenant->workspace_id, 'tenant_id' => (int) $tenant->getKey(), 'type' => 'policy.sync', 'status' => OperationRunStatus::Completed->value, 'outcome' => OperationRunOutcome::Succeeded->value, ]); Filament::setTenant(null, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get(route('admin.operations.view', ['run' => (int) $run->getKey()])) ->assertOk() ->assertSee('Status') ->assertSee('Completed') ->assertSee('Tenant lifecycle') ->assertSee('Onboarding') ->assertSee('Tenant selector context') ->assertSee('This tenant is currently onboarding and may not appear in the tenant selector.'); });