diff --git a/tests/e2e/remote/comments.spec.ts b/tests/e2e/remote/comments.spec.ts index b562659..2dd560a 100644 --- a/tests/e2e/remote/comments.spec.ts +++ b/tests/e2e/remote/comments.spec.ts @@ -32,9 +32,13 @@ test.describe('Kommentare', () => { await expect(delBtn).toBeVisible(); await delBtn.click(); - // ConfirmDialog "Kommentar loeschen?" mit Loeschen-Button - await expect(page.getByRole('heading', { name: /Kommentar löschen/i })).toBeVisible(); - await page.getByRole('button', { name: 'Löschen' }).click(); + // ConfirmDialog "Kommentar loeschen?" mit Loeschen-Button. + // Es gibt mehrere "Löschen"-Buttons auf der Seite (Rezept-Delete, + // Kommentar-Trash, Dialog-Bestaetigung) — deshalb Locator auf den + // Dialog einschraenken. + const dialog = page.getByRole('dialog', { name: /Kommentar löschen/i }); + await expect(dialog).toBeVisible(); + await dialog.getByRole('button', { name: 'Löschen' }).click(); await expect(page.getByText(unique)).not.toBeVisible({ timeout: 5000 }); }); diff --git a/tests/e2e/remote/recipe-detail.spec.ts b/tests/e2e/remote/recipe-detail.spec.ts index f788104..49b6195 100644 --- a/tests/e2e/remote/recipe-detail.spec.ts +++ b/tests/e2e/remote/recipe-detail.spec.ts @@ -35,9 +35,14 @@ test.describe('Rezept-Detail', () => { await page.getByRole('button', { name: 'Mehr' }).first().click(); await page.getByRole('button', { name: 'Mehr' }).first().click(); await expect(page.locator('.srv-value strong').first()).toHaveText('6'); - // Skalierte Mengen 1.5x - await expect(page.getByText(/\b750 g/).first()).toBeVisible(); - await expect(page.getByText(/\b150 ml/).first()).toBeVisible(); + // Skalierte Mengen 1.5x — ueber das Item-Name-Filter, robuster + // gegenueber Whitespace-Quirks zwischen -Teilen. + await expect( + page.locator('.ing-list li', { hasText: 'Hähnchenbrustfilet' }) + ).toContainText('750 g'); + await expect( + page.locator('.ing-list li', { hasText: 'Sojasauce' }) + ).toContainText('150 ml'); }); test('Favorit toggelt heart-Klasse sauber', async ({ page }) => { diff --git a/tests/e2e/remote/search.spec.ts b/tests/e2e/remote/search.spec.ts index ff37692..d595e5a 100644 --- a/tests/e2e/remote/search.spec.ts +++ b/tests/e2e/remote/search.spec.ts @@ -17,11 +17,18 @@ test.describe('Suche', () => { await expect(page.getByText(/chefkoch\.de|rezeptwelt\.de/i).first()).toBeVisible(); }); - test('echter Empty-State bei Nonsense-Begriff', async ({ page }) => { + test('Nonsense-Query rendert Fallback ohne Crash', async ({ page }) => { + // SearXNG matcht loose — selbst Nonsense gibt oft Fuzzy-Treffer. + // Wir pruefen deshalb nur, dass die Seite sinnvoll reagiert + // (entweder echter Empty-State ODER Web-Fallback) und kein JS-Fehler + // fliegt. + const errors: string[] = []; + page.on('pageerror', (err) => errors.push(err.message)); await page.goto('/?q=xxyyzznotarecipexxxxxxxx'); await expect( - page.getByText(/Schaue unter den Topfdeckeln|Noch nichts gefunden|keine Rezepte/i) + page.getByText(/Schaue unter den Topfdeckeln|Keine lokalen Rezepte/i) ).toBeVisible({ timeout: 15000 }); + expect(errors).toEqual([]); }); test('Deep-Link ?q=lasagne stellt Query im Input wieder her', async ({ page }) => {