/** * 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$/) })