import { expect, test } from "@playwright/test"; test("home page loads with Buzz heading", async ({ page }) => { await page.goto("/"); await expect(page.locator("header")).toContainText("Buzz"); }); test("home page shows repositories section", async ({ page }) => { await page.goto("/"); await expect(page.getByText("Repositories")).toBeVisible(); }); test("invite requires age and legal consent before opening Buzz", async ({ page, }) => { await page.route("**/api/join-policy", async (route) => { await route.fulfill({ status: 200, contentType: "application/json", body: JSON.stringify({ policy: { terms_markdown: "# Terms", privacy_markdown: "# Privacy", age_attestation_required: true, version: "policy-v1", }, }), }); }); await page.goto("/invite/demo-code"); const ageConfirmation = page.getByLabel("I am 18 years of age or older."); const agreementConfirmation = page.getByLabel( "I agree to the Buzz Terms of Service and Privacy Policy.", ); const acceptInvite = page.getByRole("button", { name: "Accept invite in Buzz", }); await expect(ageConfirmation).toBeVisible(); await expect(agreementConfirmation).toBeVisible(); await expect(acceptInvite).toBeDisabled(); const termsLink = page.getByRole("button", { name: "Terms of Service" }); const privacyLink = page.getByRole("button", { name: "Privacy Policy" }); await expect(termsLink).toHaveCSS("text-decoration-line", "none"); await expect(privacyLink).toHaveCSS("text-decoration-line", "none"); await termsLink.hover(); await expect(termsLink).toHaveCSS("text-decoration-line", "underline"); await page.mouse.move(0, 0); await privacyLink.hover(); await expect(privacyLink).toHaveCSS("text-decoration-line", "underline"); await page .locator("label") .filter({ hasText: "I am 18 years of age or older." }) .click(); await expect(ageConfirmation).toBeChecked(); await expect(acceptInvite).toBeDisabled(); await page .locator("label") .filter({ hasText: "I agree to the Buzz Terms of Service and Privacy Policy.", }) .click({ position: { x: 8, y: 8 } }); await expect(agreementConfirmation).toBeChecked(); await expect(acceptInvite).toBeEnabled(); const consentBox = await page .getByTestId("invite-join-policy-notice") .boundingBox(); const acceptButtonBox = await acceptInvite.boundingBox(); expect(consentBox?.y).toBeLessThan(acceptButtonBox?.y ?? 0); expect(consentBox?.width).toBe(acceptButtonBox?.width); });