/** * WEB-3: Lokale Vorschau der öffentlichen Webseite — iframe lädt die * gerenderte Seite, Seiten-Wechsler (nur Veröffentlichte), Smartphone/ * Desktop-Umschalter, Einstiege von der Übersicht. * Mock-gebunden (Seed-Seiten) → skipUnlessMock. */ import { de, expect, skipUnlessMock, test } from './fixtures' const tw = de.pages.webseite const tv = tw.vorschau test.describe('Webseiten-Vorschau', () => { test('Vorschau öffnet die gerenderte Startseite im iframe', async ({ page }) => { skipUnlessMock() await page.goto('/webseite') await page.getByRole('link', { name: tv.button }).click() await expect(page.getByRole('heading', { name: tv.title })).toBeVisible() await expect(page.getByText(tv.intro)).toBeVisible() // Inhalt der gerenderten Seite (Mock-HTML) ist im iframe sichtbar const frame = page.frameLocator('.vorschau-iframe') await expect(frame.getByRole('heading', { name: 'Startseite' })).toBeVisible() }) test('Seiten-Wechsler listet nur Veröffentlichte und wechselt die Vorschau', async ({ page }) => { skipUnlessMock() await page.goto('/webseite/vorschau') const select = page.getByLabel(tv.pageSelect) // 2 veröffentlichte Seed-Seiten; Entwürfe (z. B. „Über die Zucht“) fehlen await expect(select.locator('option')).toHaveCount(2) await expect(select.locator('option', { hasText: 'Über die Zucht' })).toHaveCount(0) await select.selectOption({ label: 'Abgabetiere' }) const frame = page.frameLocator('.vorschau-iframe') await expect(frame.getByRole('heading', { name: 'Abgabetiere' })).toBeVisible() }) test('Smartphone/Desktop-Umschalter ändert die Rahmenbreite', async ({ page }) => { skipUnlessMock() await page.goto('/webseite/vorschau') // Standard: Smartphone-Rahmen await expect(page.locator('.vorschau-frame--phone')).toBeVisible() await page.getByRole('button', { name: tv.viewDesktop }).click() await expect(page.locator('.vorschau-frame--phone')).toHaveCount(0) await page.getByRole('button', { name: tv.viewPhone }).click() await expect(page.locator('.vorschau-frame--phone')).toBeVisible() }) test('Übersicht: „Ansehen“ nur bei Veröffentlichten, öffnet die richtige Seite', async ({ page }) => { skipUnlessMock() await page.goto('/webseite') // Veröffentlichte Karte hat den Ansehen-Link, Entwurf nicht const abgabeCard = page.locator('.webseite-card', { hasText: 'Abgabetiere' }) const draftCard = page.locator('.webseite-card', { hasText: 'Über die Zucht' }) await expect(abgabeCard.getByRole('link', { name: tv.openPage })).toBeVisible() await expect(draftCard.getByRole('link', { name: tv.openPage })).toHaveCount(0) await abgabeCard.getByRole('link', { name: tv.openPage }).click() await expect(page).toHaveURL(/\/webseite\/vorschau\?seite=abgabetiere/) const frame = page.frameLocator('.vorschau-iframe') await expect(frame.getByRole('heading', { name: 'Abgabetiere' })).toBeVisible() }) })