91 lines
4.2 KiB
TypeScript
91 lines
4.2 KiB
TypeScript
/**
|
|
* 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$/)
|
|
})
|