create(); [$user, $tenant] = createUserWithTenant($tenant, role: 'owner'); Filament::setTenant($tenant, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $tenant->workspace_id]) ->get('/admin/operations') ->assertOk() ->assertSee('Scope: Tenant — '.$tenant->name) ->assertSee('Back to '.$tenant->name) ->assertSee('Show all tenants'); }); it('treats stale tenant context as workspace-wide without tenant identity hints', function (): void { $entitledTenant = Tenant::factory()->create(); [$user, $entitledTenant] = createUserWithTenant($entitledTenant, role: 'owner', workspaceRole: 'readonly'); $staleTenant = Tenant::factory()->create([ 'workspace_id' => (int) $entitledTenant->workspace_id, ]); Filament::setTenant($staleTenant, true); $this->actingAs($user) ->withSession([WorkspaceContext::SESSION_KEY => (int) $entitledTenant->workspace_id]) ->get('/admin/operations') ->assertOk() ->assertSee('Scope: Workspace — all tenants') ->assertDontSee('Back to '.$staleTenant->name) ->assertDontSee($staleTenant->name) ->assertDontSee('Show all tenants'); }); it('clears filament tenant context and last-tenant session state via clear-tenant-context endpoint', function (): void { $tenant = Tenant::factory()->create(); [$user, $tenant] = createUserWithTenant($tenant, role: 'owner'); $workspaceId = (int) $tenant->workspace_id; $lastTenantIds = [ (string) $workspaceId => (int) $tenant->getKey(), ]; Filament::setTenant($tenant, true); $this->actingAs($user) ->withSession([ WorkspaceContext::SESSION_KEY => $workspaceId, WorkspaceContext::LAST_TENANT_IDS_SESSION_KEY => $lastTenantIds, ]) ->from('/admin/alerts') ->post('/admin/clear-tenant-context') ->assertRedirect('/admin/alerts'); expect(Filament::getTenant())->toBeNull(); expect(session()->get(WorkspaceContext::LAST_TENANT_IDS_SESSION_KEY, [])) ->not->toHaveKey((string) $workspaceId); $this->withSession([ WorkspaceContext::SESSION_KEY => $workspaceId, ]) ->get('/admin/operations') ->assertOk() ->assertSee('Scope: Workspace — all tenants') ->assertDontSee('Scope: Tenant — '.$tenant->name); });