import { expect, test } from "@playwright/test"; test.describe("Contact Page", () => { test.beforeEach(async ({ page }) => { await page.goto("/contact"); }); test("renders the page heading", async ({ page }) => { await expect(page.getByText("Get in touch")).toBeVisible(); }); test("renders all form fields", async ({ page }) => { await expect(page.getByLabel(/Name/)).toBeVisible(); await expect(page.getByLabel(/Email/)).toBeVisible(); await expect(page.getByLabel(/Company/)).toBeVisible(); await expect(page.getByLabel(/Subject/)).toBeVisible(); await expect(page.getByLabel(/Message/)).toBeVisible(); await expect(page.getByText("Send Message")).toBeVisible(); }); test("renders benefit cards", async ({ page }) => { await expect(page.getByText("Live Demo")).toBeVisible(); await expect(page.getByText("Deployment Support")).toBeVisible(); }); test("renders email fallback", async ({ page }) => { const emailLink = page.getByRole("link", { name: "contact@snapotter.com" }); await expect(emailLink).toBeVisible(); await expect(emailLink).toHaveAttribute("href", "mailto:contact@snapotter.com"); }); }); test.describe("Privacy Page", () => { test.beforeEach(async ({ page }) => { await page.goto("/privacy"); }); test("renders the page heading", async ({ page }) => { await expect(page.getByRole("heading", { name: "Privacy Policy" })).toBeVisible(); }); test("renders all section headings", async ({ page }) => { const headings = [ "Data Controller", "Overview", "Website (snapotter.com)", "Self-Hosted Software", "Optional Analytics", "Contact Form", "Open Source", "Changes", "Contact", ]; for (const heading of headings) { await expect(page.getByRole("heading", { name: heading, exact: true })).toBeVisible(); } }); test("renders the contact email", async ({ page }) => { const emailLink = page.getByRole("link", { name: "contact@snapotter.com" }); await expect(emailLink).toBeVisible(); }); }); test.describe("Terms Page", () => { test.beforeEach(async ({ page }) => { await page.goto("/terms"); }); test("renders the page heading", async ({ page }) => { await expect(page.getByRole("heading", { name: "Terms and Conditions" })).toBeVisible(); }); test("renders all section headings", async ({ page }) => { const headings = [ "Who We Are", "Overview", "Software License", "Website Use", "Self-Hosted Software", "Intellectual Property", "Limitation of Liability", "Changes", "Contact", ]; for (const heading of headings) { await expect(page.getByRole("heading", { name: heading, exact: true })).toBeVisible(); } }); test("mentions AGPL-3.0 license", async ({ page }) => { await expect(page.getByText(/AGPL-3.0/).first()).toBeVisible(); }); }); test.describe("Cross-Page Navigation", () => { test("footer Privacy link navigates to /privacy", async ({ page }) => { await page.goto("/"); await page.locator("footer").getByRole("link", { name: "Privacy" }).click(); await expect(page).toHaveURL("/privacy"); await expect(page.getByText("Privacy Policy").first()).toBeVisible(); }); test("footer Terms link navigates to /terms", async ({ page }) => { await page.goto("/"); await page.locator("footer").getByRole("link", { name: "Terms" }).click(); await expect(page).toHaveURL("/terms"); await expect(page.getByText("Terms and Conditions").first()).toBeVisible(); }); test("footer FAQ link navigates to /faq", async ({ page }) => { await page.goto("/"); await page.getByRole("link", { name: "FAQ" }).click(); await expect(page).toHaveURL("/faq"); await expect(page.getByText("Frequently Asked Questions")).toBeVisible(); }); test("navbar Contact link navigates to /contact", async ({ page }) => { await page.goto("/"); await page.getByRole("link", { name: "Contact" }).first().click(); await expect(page).toHaveURL("/contact"); await expect(page.getByText("Get in touch")).toBeVisible(); }); test("pricing Contact Sales links to /contact", async ({ page }) => { await page.goto("/"); const contactSales = page.getByRole("link", { name: /Contact Sales/ }); await expect(contactSales).toHaveAttribute("href", "/contact"); }); });