import { test, expect } from '@playwright/test'; import { setupApiMocks, login, navigateTo } from './helpers'; test.describe('Global Search E2E', () => { test.beforeEach(async ({ page }) => { await setupApiMocks(page); await login(page); }); test('search page renders with input and submit button', async ({ page }) => { await navigateTo(page, '/search'); await expect(page.locator('[data-testid="global-search-page"]')).toBeVisible({ timeout: 10_000 }); await expect(page.locator('[data-testid="search-input"]')).toBeVisible(); await expect(page.locator('[data-testid="search-submit-btn"]')).toBeVisible(); }); test('search for contact name shows results', async ({ page }) => { await navigateTo(page, '/search'); await expect(page.locator('[data-testid="global-search-page"]')).toBeVisible({ timeout: 10_000 }); // Type search query await page.locator('[data-testid="search-input"]').fill('TechCorp'); await page.locator('[data-testid="search-submit-btn"]').click(); // Wait for results await expect(page.locator('[data-testid="search-results-list"], [data-testid="search-results-all"]')).toBeVisible({ timeout: 10_000 }); // Should show at least one result const resultItem = page.locator('[data-testid^="search-result-"]').first(); await expect(resultItem).toBeVisible({ timeout: 10_000 }); }); test('search results are grouped by type tabs', async ({ page }) => { await navigateTo(page, '/search'); await expect(page.locator('[data-testid="global-search-page"]')).toBeVisible({ timeout: 10_000 }); await page.locator('[data-testid="search-input"]').fill('TechCorp'); await page.locator('[data-testid="search-submit-btn"]').click(); // Tabs should be visible await expect(page.locator('[data-testid="search-tabs"]')).toBeVisible({ timeout: 10_000 }); }); test('search with empty query shows all results', async ({ page }) => { await navigateTo(page, '/search'); await expect(page.locator('[data-testid="global-search-page"]')).toBeVisible({ timeout: 10_000 }); // Submit without typing await page.locator('[data-testid="search-submit-btn"]').click(); // Should show results or empty state await expect(page.locator('[data-testid="search-results-list"], [data-testid="search-results-all"], [data-testid="search-query-display"]')).toBeVisible({ timeout: 10_000 }); }); test('search dropdown in topbar works', async ({ page }) => { // The topbar has a search dropdown await expect(page.locator('[data-testid="topbar"]')).toBeVisible(); const searchDropdown = page.locator('[data-testid="search-dropdown"]'); if (await searchDropdown.isVisible()) { // Type in search await searchDropdown.locator('input').fill('test'); // Wait for results dropdown await expect(page.locator('[data-testid="search-results"]')).toBeVisible({ timeout: 10_000 }); } }); });