diff --git a/gerbil-manager-web/e2e/gehege-regression.spec.ts b/gerbil-manager-web/e2e/gehege-regression.spec.ts new file mode 100644 index 0000000..b64c0ff --- /dev/null +++ b/gerbil-manager-web/e2e/gehege-regression.spec.ts @@ -0,0 +1,90 @@ +/** + * QA-REGRESSION-1: GEHEGE-RENAME Lock-in. + * + * Sichert das Verhalten von drei GEHEGE-RENAME-Γ„nderungen ab, die leicht still + * brechen kΓΆnnen (Redirects, Nav-EintrΓ€ge, Landing-URL): + * (a) /becken/* β†’ /gehege/* Redirect (bookmarks / externe Links) + * (b) Nav zeigt 'Gehege' + 🏜️, kein 'Becken', kein 'Start'-Eintrag + * (c) '/' (Index) landet auf /rennmaeuse (nicht mehr auf einer Startseite) + * + * Bereits abgedeckt (NICHT dupliziert): + * - gotoSection(de.nav.enclosures) navigiert zu Gehege-Heading: navigation.spec.ts:19-20 + * - CRUD + 409 auf /gehege: becken-kontakte.spec.ts + * - Wurf-Link + Herkunft: tiere.spec.ts:101-128 + */ +import { de, expect, test } from './fixtures' + +// ── (a) /becken/* β†’ /gehege/* Redirect ────────────────────────────────────── + +test('GEHEGE-RENAME: /becken leitet auf /gehege weiter (bookmark-safe)', async ({ page }) => { + await page.goto('/becken') + // React Router BeckenRedirect navigiert β†’ /gehege; Gehege-Heading muss sichtbar sein + await expect(page.getByRole('heading', { name: de.pages.becken.title, exact: true })).toBeVisible() + await expect(page).toHaveURL(/\/gehege$/) +}) + +test('GEHEGE-RENAME: /becken/neu leitet auf /gehege/neu weiter (deep redirect)', async ({ + page, +}) => { + await page.goto('/becken/neu') + // Neues-Gehege-Formular muss sichtbar sein, URL muss /gehege/neu sein + await expect(page.getByRole('heading', { name: de.pages.becken.form?.createTitle ?? de.pages.becken.newButton })).toBeVisible({ timeout: 6_000 }) + await expect(page).toHaveURL(/\/gehege\/neu$/) +}) + +// ── (b) Nav: 'Gehege' βœ“, 'Becken' βœ—, 'Start' βœ— ────────────────────────────── + +test('GEHEGE-RENAME: Nav hat "Gehege"-Eintrag mit Terrarium-Icon, kein "Becken"', async ({ + page, +}) => { + await page.goto('/rennmaeuse') + const nav = page.getByRole('navigation', { name: de.nav.mainNavigation }) + + // Gehege-Link soll vorhanden sein (via β€žMehr"-Blatt auf Phone oder direkt auf Desktop) + // Wir ΓΆffnen β€žMehr" um sekundΓ€re Links sichtbar zu machen + const moreBtn = nav.getByRole('button', { name: de.nav.more }) + if (await moreBtn.isVisible()) { + await moreBtn.click() + } + await expect(nav.getByRole('link', { name: de.nav.enclosures })).toBeVisible() + // "Becken" als separater Nav-Eintrag darf nicht mehr existieren + await expect(nav.getByRole('link', { name: 'Becken', exact: true })).toBeHidden() +}) + +test('GEHEGE-RENAME: Nav hat keinen "Start"-Eintrag mehr (de.nav.home entfernt)', async ({ + page, +}) => { + await page.goto('/rennmaeuse') + // Warten bis die Tierliste geladen ist, dann Nav prΓΌfen + await expect(page.getByRole('heading', { name: de.pages.gerbils.title, exact: true })).toBeVisible() + const nav = page.getByRole('navigation', { name: de.nav.mainNavigation }) + // 'Start' (de.nav.home wurde entfernt) darf kein Nav-Link mehr sein + await expect(nav.getByRole('link', { name: 'Start', exact: true })).toBeHidden() +}) + +// ── (c) '/' landet auf /rennmaeuse ────────────────────────────────────────── + +test('GEHEGE-RENAME: "/" leitet auf /rennmaeuse weiter β€” keine Startseite mehr', async ({ + page, +}) => { + await page.goto('/') + // URL muss /rennmaeuse sein (Navigate replace) + await expect(page).toHaveURL(/\/rennmaeuse$/) + // Tierliste-Heading sichtbar β€” nicht die alte Startseite + await expect( + page.getByRole('heading', { name: de.pages.gerbils.title, exact: true }), + ).toBeVisible() + // Alten Willkommen-Text darf es nicht mehr geben (de.pages.home wurde entfernt) + await expect(page.getByText('Willkommen')).toBeHidden() +}) + +test('GEHEGE-RENAME: 404-Seite "Zur Startseite" landet weiterhin auf Tierliste', async ({ + page, +}) => { + await page.goto('/diese-seite-gibt-es-nicht') + await expect(page.getByText(de.pages.notFound.message)).toBeVisible() + await page.getByRole('link', { name: de.pages.notFound.backHome }).click() + // Nach Klick auf "Zur Startseite" β†’ '/' β†’ redirect β†’ /rennmaeuse + await expect(page.getByRole('heading', { name: de.pages.gerbils.title, exact: true })).toBeVisible() + await expect(page).toHaveURL(/\/rennmaeuse$/) +})