33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
|
|
import { test, expect } from '@playwright/test';
|
||
|
|
|
||
|
|
test.describe('Suche', () => {
|
||
|
|
test('lokaler Treffer erscheint live beim Tippen', async ({ page }) => {
|
||
|
|
await page.goto('/');
|
||
|
|
await page.getByRole('searchbox', { name: 'Suchbegriff' }).fill('lasagne');
|
||
|
|
await expect(page.getByRole('link', { name: /Pfannen Lasagne/i })).toBeVisible({
|
||
|
|
timeout: 5000
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
test('Web-Fallback bei unbekanntem Begriff', async ({ page }) => {
|
||
|
|
// Direkt per URL — spart den Debounce-Timer.
|
||
|
|
await page.goto('/?q=pizza+margherita');
|
||
|
|
await expect(page.getByText(/Keine lokalen Rezepte/i)).toBeVisible({ timeout: 15000 });
|
||
|
|
// Mindestens ein Web-Treffer mit einer Domain-Labeling.
|
||
|
|
await expect(page.getByText(/chefkoch\.de|rezeptwelt\.de/i).first()).toBeVisible();
|
||
|
|
});
|
||
|
|
|
||
|
|
test('echter Empty-State bei Nonsense-Begriff', async ({ page }) => {
|
||
|
|
await page.goto('/?q=xxyyzznotarecipexxxxxxxx');
|
||
|
|
await expect(
|
||
|
|
page.getByText(/Schaue unter den Topfdeckeln|Noch nichts gefunden|keine Rezepte/i)
|
||
|
|
).toBeVisible({ timeout: 15000 });
|
||
|
|
});
|
||
|
|
|
||
|
|
test('Deep-Link ?q=lasagne stellt Query im Input wieder her', async ({ page }) => {
|
||
|
|
await page.goto('/?q=lasagne');
|
||
|
|
const sb = page.getByRole('searchbox', { name: 'Suchbegriff' });
|
||
|
|
await expect(sb).toHaveValue('lasagne');
|
||
|
|
});
|
||
|
|
});
|