From 60d5920132ce15ec2267d4a57f7c164baa72fd78 Mon Sep 17 00:00:00 2001 From: Sebastian Frank Date: Tue, 12 May 2026 22:43:27 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20add=20navigation=20and=20me?= =?UTF-8?q?dia=20library=20tests=20with=20structured=20controls=20and=20vi?= =?UTF-8?q?sibility=20checks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/e2e-admin/fixtures.ts | 41 ++++++++++++----- .../navigation-medialib-config.spec.ts | 44 +++++++++++++++++++ 2 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 tests/e2e-admin/navigation-medialib-config.spec.ts diff --git a/tests/e2e-admin/fixtures.ts b/tests/e2e-admin/fixtures.ts index b7dc144..4212205 100644 --- a/tests/e2e-admin/fixtures.ts +++ b/tests/e2e-admin/fixtures.ts @@ -48,21 +48,42 @@ export async function openNovaProjectDashboard(page: Page): Promise { } export async function openContentCollection(page: Page): Promise { - await openNovaProjectDashboard(page) - await page - .getByRole("link", { name: /Inhalte/ }) - .first() - .click() - - await expect(page).toHaveURL(/\/collections\/content$/) - await expect(page.locator("main h1")).toHaveText("Inhalte") + await openCollection(page, /Inhalte/, "content", "Inhalte") } export async function openNewContentEntry(page: Page): Promise { - await openContentCollection(page) + await openNewCollectionEntry(page, /Inhalte/, "content", "Inhalte") +} + +export async function openNavigationCollection(page: Page): Promise { + await openCollection(page, /Navigation/, "navigation", "Navigation") +} + +export async function openNewNavigationEntry(page: Page): Promise { + await openNewCollectionEntry(page, /Navigation/, "navigation", "Navigation") +} + +export async function openMedialibCollection(page: Page): Promise { + await openCollection(page, /Mediathek/, "medialib", "Mediathek") +} + +export async function openNewMedialibEntry(page: Page): Promise { + await openNewCollectionEntry(page, /Mediathek/, "medialib", "Mediathek") +} + +async function openCollection(page: Page, linkName: RegExp, slug: string, heading: string): Promise { + await openNovaProjectDashboard(page) + await page.getByRole("link", { name: linkName }).first().click() + + await expect(page).toHaveURL(new RegExp(`/collections/${slug}(\\?.*)?$`)) + await expect(page.locator("main h1")).toHaveText(heading) +} + +async function openNewCollectionEntry(page: Page, linkName: RegExp, slug: string, heading: string): Promise { + await openCollection(page, linkName, slug, heading) await page.getByRole("button", { name: /Neuer Eintrag|New Entry/i }).click() - await expect(page).toHaveURL(/\/collections\/content\/entries\/new/) + await expect(page).toHaveURL(new RegExp(`/collections/${slug}/entries/new`)) await expect(page.getByRole("heading", { level: 1, name: /Neuer Eintrag|New Entry/i })).toBeVisible() } diff --git a/tests/e2e-admin/navigation-medialib-config.spec.ts b/tests/e2e-admin/navigation-medialib-config.spec.ts new file mode 100644 index 0000000..018746f --- /dev/null +++ b/tests/e2e-admin/navigation-medialib-config.spec.ts @@ -0,0 +1,44 @@ +import { test, expect, openNavigationCollection, openMedialibCollection, openNewMedialibEntry } from "./fixtures" + +test.describe("Admin navigation and media config", () => { + test("renders the navigation collection with declared trees and structure controls", async ({ page }) => { + await openNavigationCollection(page) + + const main = page.locator("main") + await expect(page).toHaveURL(/\/collections\/navigation\?view=navigation$/) + await expect(page.getByRole("heading", { level: 2, name: "Deklarierte Bäume" })).toBeVisible() + await expect(main).toContainText("Header DE") + await expect(main).toContainText("Header EN") + await expect(main).toContainText("Footer DE") + await expect(main).toContainText("Footer EN") + await expect(main).toContainText("Wurzelknoten") + await expect(main).toContainText("Max. Ebene") + }) + + test("renders the media library list with subnavigation and previews", async ({ page }) => { + await openMedialibCollection(page) + + const main = page.locator("main") + await expect(page).toHaveURL(/\/collections\/medialib\?view=media$/) + await expect(page.getByRole("region", { name: "Mediathek-Raster" })).toBeVisible() + await expect(main).toContainText("Bilder") + await expect(main).toContainText("Dokumente") + await expect(main).toContainText("Dateien hinzufügen") + await expect( + page.getByRole("img", { name: /Technology Stack|Homepage Hero|About Team|Contact Hero|Workflow/ }).first() + ).toBeVisible() + }) + + test("shows the configured media widgets in the new entry form", async ({ page }) => { + await openNewMedialibEntry(page) + + await expect(page.getByText("Datei", { exact: true })).toBeVisible() + await expect(page.getByRole("button", { name: /Datei hochladen/ })).toBeVisible() + await expect(page.getByLabel("Titel")).toBeVisible() + await expect(page.getByText("Alt-Text")).toBeVisible() + await expect(page.getByRole("tab", { name: "de" })).toBeVisible() + await expect(page.getByRole("tab", { name: "en" })).toBeVisible() + await expect(page.getByLabel("Beschreibung")).toBeVisible() + await expect(page.getByLabel("Tags")).toBeVisible() + }) +})