import { describe, it, expect } from "vitest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; describe("AppHeader Component (prototype port)", () => { const componentPath = resolve(__dirname, "../../components/AppHeader.vue"); const content = readFileSync(componentPath, "utf-8"); it("should have hms-header class", () => { expect(content).toContain("hms-header"); }); it("should have nav items: Home, Referenzen, Mietkatalog, Kontakt", () => { expect(content).toContain("Home"); expect(content).toContain("Referenzen"); expect(content).toContain("Mietkatalog"); expect(content).toContain("Kontakt"); }); it("should have Warenkorb button with hms-btn-primary", () => { expect(content).toContain("Warenkorb"); expect(content).toContain("hms-btn-primary"); }); it("should have hms-nav-btn class for nav items", () => { expect(content).toContain("hms-nav-btn"); }); it("should have mobile burger menu with aria-expanded", () => { expect(content).toContain("aria-expanded"); expect(content).toContain("mobileMenuOpen"); }); it("should use HmsLogo component", () => { expect(content).toContain("HmsLogo"); }); it("should have NuxtLink for navigation", () => { expect(content).toContain("NuxtLink"); }); it("should have aria-current for active route", () => { expect(content).toContain("aria-current"); }); }); describe("AppFooter Component (prototype port)", () => { const componentPath = resolve(__dirname, "../../components/AppFooter.vue"); const content = readFileSync(componentPath, "utf-8"); it("should have hms-footer class", () => { expect(content).toContain("hms-footer"); }); it("should contain address with Leipheim", () => { expect(content).toContain("89340"); expect(content).toContain("Leipheim"); }); it("should contain phone number", () => { expect(content).toContain("tel:+498221204433"); expect(content).toContain("204433"); }); it("should contain email link info@hms-licht-ton.de", () => { expect(content).toContain("mailto:info@hms-licht-ton.de"); }); it("should contain Impressum link", () => { expect(content).toContain("Impressum"); expect(content).toContain("/impressum"); }); it("should contain DSGVO link", () => { expect(content).toContain("DSGVO"); expect(content).toContain("/datenschutz"); }); it("should contain AGB Vermietung link", () => { expect(content).toContain("AGB Vermietung"); expect(content).toContain("/agb-vermietung"); }); it("should contain Admin-Login link", () => { expect(content).toContain("Admin-Login"); expect(content).toContain("/admin"); }); it("should have 4-column grid layout", () => { expect(content).toContain("lg:grid-cols-4"); }); it("should include Facebook social icon link", () => { expect(content).toContain("facebook.com"); }); it("should include Instagram social icon link", () => { expect(content).toContain("instagram.com"); }); it("should use HmsLogo component", () => { expect(content).toContain("HmsLogo"); }); }); describe("Error Page (404, prototype port)", () => { const errorPath = resolve(__dirname, "../../error.vue"); const content = readFileSync(errorPath, "utf-8"); it("should contain 'Seite nicht gefunden' for 404", () => { expect(content).toContain("Seite nicht gefunden"); }); it("should contain 404 text", () => { expect(content).toContain("404"); }); it("should contain link to home", () => { expect(content).toContain('to="/"'); expect(content).toContain("Zur Startseite"); }); it("should include noindex meta tag", () => { expect(content).toContain("noindex"); expect(content).toContain("nofollow"); }); it("should have hms-btn hms-btn-primary", () => { expect(content).toContain("hms-btn"); expect(content).toContain("hms-btn-primary"); }); }); describe("HmsLogo Component (prototype port)", () => { const logoPath = resolve(__dirname, "../../components/HmsLogo.vue"); const content = readFileSync(logoPath, "utf-8"); it("should render SVG element", () => { expect(content).toContain(" { expect(content).toContain("#EC6925"); }); it("should have hms-logo-svg class", () => { expect(content).toContain("hms-logo-svg"); }); it("should accept size prop with default 40", () => { expect(content).toContain("size"); expect(content).toContain("40"); }); }); describe("robots.txt route", () => { const robotsPath = resolve(__dirname, "../../server/routes/robots.txt.ts"); const content = readFileSync(robotsPath, "utf-8"); it("should contain User-agent: *", () => { expect(content).toContain("User-agent: *"); }); it("should contain Disallow: /", () => { expect(content).toContain("Disallow: /"); }); });