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

69 lines
2.7 KiB
TypeScript

import { test, expect } from "@playwright/test";
test.describe("Cart Flow", () => {
test("should render warenkorb page with heading", async ({ page }) => {
await page.goto("/warenkorb");
await expect(page.locator("h1")).toContainText("Warenkorb");
});
test("should show empty state when cart is empty", async ({ page }) => {
await page.goto("/warenkorb");
await expect(page.getByTestId("warenkorb-empty")).toBeVisible();
await expect(page.getByTestId("warenkorb-empty-cta")).toBeVisible();
});
test("should have link to mietkatalog from empty state", async ({ page }) => {
await page.goto("/warenkorb");
const cta = page.getByTestId("warenkorb-empty-cta");
await expect(cta).toHaveAttribute("href", "/mietkatalog");
});
test("should show header cart icon", async ({ page }) => {
await page.goto("/");
await expect(page.getByTestId("header-cart-button")).toBeVisible();
});
test("should open cart drawer when header cart icon clicked", async ({ page }) => {
await page.goto("/");
await page.getByTestId("header-cart-button").click();
await expect(page.getByTestId("cart-drawer")).toBeVisible();
});
test("should show empty state in cart drawer", async ({ page }) => {
await page.goto("/");
await page.getByTestId("header-cart-button").click();
await expect(page.getByTestId("cart-drawer")).toBeVisible();
await expect(page.locator("text=Ihr Warenkorb ist leer")).toBeVisible();
});
test("should close cart drawer on backdrop click", async ({ page }) => {
await page.goto("/");
await page.getByTestId("header-cart-button").click();
await expect(page.getByTestId("cart-drawer")).toBeVisible();
await page.getByTestId("cart-drawer-backdrop").click();
await expect(page.getByTestId("cart-drawer")).not.toBeVisible();
});
test("should have checkout link in cart drawer", async ({ page }) => {
await page.goto("/");
await page.getByTestId("header-cart-button").click();
await expect(page.getByTestId("cart-drawer")).toBeVisible();
const checkout = page.getByTestId("cart-drawer-checkout");
await expect(checkout).toHaveAttribute("href", "/mietanfrage");
});
test("should have view cart link in cart drawer", async ({ page }) => {
await page.goto("/");
await page.getByTestId("header-cart-button").click();
await expect(page.getByTestId("cart-drawer")).toBeVisible();
const viewCart = page.getByTestId("cart-drawer-view-cart");
await expect(viewCart).toHaveAttribute("href", "/warenkorb");
});
test("should have mobile cart button", async ({ page }) => {
await page.goto("/");
await page.setViewportSize({ width: 375, height: 667 });
await expect(page.getByTestId("header-cart-button-mobile")).toBeVisible();
});
});