2026-07-29 08:03:28 -04:00
|
|
|
import { test, expect } from '@playwright/test';
|
|
|
|
|
import { login } from './helpers/auth';
|
|
|
|
|
|
|
|
|
|
test.describe('Search', () => {
|
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
|
|
|
await login(page);
|
2026-08-10 08:53:18 +00:00
|
|
|
await page.goto('/search');
|
2026-07-29 08:03:28 -04:00
|
|
|
});
|
|
|
|
|
|
2026-08-10 08:53:18 +00:00
|
|
|
test('renders the search page with the query input', async ({ page }) => {
|
|
|
|
|
await expect(page.getByPlaceholder(/search tasks, notes/i)).toBeVisible();
|
|
|
|
|
await expect(page.getByRole('button', { name: 'Tasks' })).toBeVisible();
|
|
|
|
|
await expect(page.getByRole('button', { name: 'Notes' })).toBeVisible();
|
2026-07-29 08:03:28 -04:00
|
|
|
});
|
|
|
|
|
|
2026-08-10 08:53:18 +00:00
|
|
|
test('shows a no-results state for an unmatched query', async ({ page }) => {
|
|
|
|
|
await page.getByPlaceholder(/search tasks, notes/i).fill('zzz-no-such-thing-xyz');
|
|
|
|
|
await expect(page.getByText(/no results found/i)).toBeVisible({ timeout: 10_000 });
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
test('filters results by type', async ({ page }) => {
|
|
|
|
|
await page.getByPlaceholder(/search tasks, notes/i).fill('meeting');
|
|
|
|
|
await page.getByRole('button', { name: 'Habits' }).click();
|
|
|
|
|
|
|
|
|
|
// The filter buttons stay interactive after toggling a type off.
|
|
|
|
|
await expect(page.getByRole('button', { name: 'Habits' })).toBeVisible();
|
|
|
|
|
await expect(page.getByRole('button', { name: 'Tasks' })).toBeVisible();
|
2026-07-29 08:03:28 -04:00
|
|
|
});
|
|
|
|
|
});
|