Files
Agent Zero cd465e0564 feat: add MCP server with resources, tools, auth, and Traefik routing
- Add backend/app/mcp_server.py with FastMCP server (hms-cms)
- Resources: design-rules, page-structure, sync-status
- Tools: trigger_sync, get_sync_log, set_rentman_token, read_file,
  write_file, create_page, deploy, git_commit, git_status
- Bearer token auth via MCP_AUTH_TOKEN env var
- Mount MCP at /mcp with streamable HTTP transport
- Integrate session manager in FastAPI lifespan
- Add Traefik labels for external /mcp route on hms.media-on.de
- Add git, docker.io, curl to backend Dockerfile
- Mount repo root + docker socket in backend container
- Add mcp>=1.0.0 to requirements.txt
2026-07-12 15:58:22 +02:00

75 lines
2.7 KiB
TypeScript

import { test, expect } from "@playwright/test";
test.describe("Header", () => {
test.beforeEach(async ({ page }) => {
await page.goto("/");
});
test("should display sticky header with logo", async ({ page }) => {
const header = page.locator("header");
await expect(header).toBeVisible();
await expect(header).toHaveClass(/sticky/);
});
test("should have navigation items", async ({ page }) => {
await expect(page.getByRole("navigation").filter({ hasText: "Home" })).toBeVisible();
await expect(page.getByRole("link", { name: "Referenzen" })).toBeVisible();
await expect(page.getByRole("link", { name: "Mietkatalog" })).toBeVisible();
await expect(page.getByRole("link", { name: "Kontakt" })).toBeVisible();
});
test("should have clickable phone link", async ({ page }) => {
const phoneLink = page.locator('a[href="tel:+491726264796"]');
await expect(phoneLink).toBeVisible();
});
test("should have social icons", async ({ page }) => {
await expect(page.locator('a[aria-label="Facebook"]')).toBeVisible();
await expect(page.locator('a[aria-label="Instagram"]')).toBeVisible();
});
test("should open mobile burger menu on click", async ({ page }) => {
const burger = page.locator('button[aria-label="Menü öffnen/schließen"]');
await expect(burger).toBeVisible();
await burger.click();
await expect(page.locator("#mobile-nav")).toBeVisible();
});
});
test.describe("Footer", () => {
test.beforeEach(async ({ page }) => {
await page.goto("/");
});
test("should display footer with address", async ({ page }) => {
const footer = page.locator("footer");
await expect(footer).toBeVisible();
await expect(footer).toContainText("Leipheim");
await expect(footer).toContainText("89340");
});
test("should have phone number", async ({ page }) => {
await expect(page.locator('a[href="tel:+498221204433"]')).toBeVisible();
});
test("should have email link", async ({ page }) => {
await expect(page.locator('a[href="mailto:info@hms-licht-ton.de"]')).toBeVisible();
});
test("should have legal links", async ({ page }) => {
await expect(page.getByRole("link", { name: "Impressum" })).toBeVisible();
await expect(page.getByRole("link", { name: "DSGVO" })).toBeVisible();
await expect(page.getByRole("link", { name: "AGB Vermietung" })).toBeVisible();
});
test("should NOT contain 'Neu in der Vermietung'", async ({ page }) => {
const footer = page.locator("footer");
await expect(footer).not.toContainText("Neu in der Vermietung");
});
test("should NOT contain 'AGB Shop'", async ({ page }) => {
const footer = page.locator("footer");
await expect(footer).not.toContainText("AGB Shop");
});
});