67 lines
3.0 KiB
TypeScript
67 lines
3.0 KiB
TypeScript
/**
|
|
* 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()
|
|
})
|
|
})
|