map(fn ($result): string => (string) $result->title)->all(); } it('returns no admin global-search results without canonical tenant context', function (): void { [$user, $tenant] = createUserWithTenant(role: 'owner'); EntraGroup::factory()->for($tenant)->create([ 'display_name' => 'Admin search group', ]); $this->actingAs($user); Filament::setCurrentPanel('admin'); Filament::setTenant(null, true); Filament::bootCurrentPanel(); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenant->workspace_id); expect(EntraGroupResource::getGlobalSearchResults('Admin search')) ->toHaveCount(0); }); it('scopes admin global-search results to the remembered tenant context', function (): void { $tenantA = Tenant::factory()->create(); [$user, $tenantA] = createUserWithTenant(tenant: $tenantA, role: 'owner'); $tenantB = Tenant::factory()->create([ 'workspace_id' => (int) $tenantA->workspace_id, ]); createUserWithTenant(tenant: $tenantB, user: $user, role: 'owner'); $groupA = EntraGroup::factory()->for($tenantA)->create([ 'display_name' => 'Remembered search group', ]); EntraGroup::factory()->for($tenantB)->create([ 'display_name' => 'Other search group', ]); $this->actingAs($user); Filament::setCurrentPanel('admin'); Filament::setTenant(null, true); Filament::bootCurrentPanel(); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenantA->workspace_id); session()->put(WorkspaceContext::LAST_TENANT_IDS_SESSION_KEY, [ (string) $tenantA->workspace_id => (int) $tenantA->getKey(), ]); $results = EntraGroupResource::getGlobalSearchResults('search group'); expect(entraGroupSearchTitles($results))->toBe([ 'Remembered search group', ]); expect($results->first()?->url) ->toBe(EntraGroupResource::getUrl('view', ['record' => $groupA], panel: 'admin', tenant: $tenantA)); }); it('keeps tenant-panel global-search results panel-native', function (): void { $tenantA = Tenant::factory()->create(); [$user, $tenantA] = createUserWithTenant(tenant: $tenantA, role: 'owner'); $tenantB = Tenant::factory()->create([ 'workspace_id' => (int) $tenantA->workspace_id, ]); createUserWithTenant(tenant: $tenantB, user: $user, role: 'owner'); $groupA = EntraGroup::factory()->for($tenantA)->create([ 'display_name' => 'Tenant panel group', ]); EntraGroup::factory()->for($tenantB)->create([ 'display_name' => 'Tenant panel outsider', ]); $this->actingAs($user); Filament::setCurrentPanel('tenant'); Filament::setTenant($tenantA, true); Filament::bootCurrentPanel(); session()->put(WorkspaceContext::SESSION_KEY, (int) $tenantA->workspace_id); $results = EntraGroupResource::getGlobalSearchResults('Tenant panel'); expect(entraGroupSearchTitles($results))->toBe([ 'Tenant panel group', ]); expect($results->first()?->url) ->toBe(EntraGroupResource::getUrl('view', ['record' => $groupA], panel: 'tenant', tenant: $tenantA)); });