Files
SnapOtter/tests/e2e-docker/analytics-privacy-policy.spec.ts
ashim-hq de7b353871 fix: analytics E2E tests for post-auth-setup consent state
The auth setup project accepts analytics consent for the admin user
before tests run. The E2E tests incorrectly expected the consent page
to appear on subsequent logins. Fixed by:

- analytics-consent: verify home loads without consent redirect instead
  of expecting the consent page to appear
- analytics-privacy-policy: use getByRole("link") for PostHog/Sentry
  links to avoid matching multiple elements with getByText
- analytics-no-data-leak: use page.evaluate with in-browser auth token
  to toggle analytics via API instead of separate login calls that hit
  the rate limiter; handle both "/" and "/analytics-consent" post-login
2026-04-23 10:51:58 +08:00

62 lines
2.3 KiB
TypeScript

import { expect, test } from "@playwright/test";
// ─── Privacy Policy Page ────────────────────────────────────────────
// Tests for the /privacy page content, verifying that the updated
// privacy policy reflects the analytics feature accurately.
test.describe("Privacy policy page", () => {
test("privacy policy page is accessible and loads", async ({ page }) => {
await page.goto("/privacy");
// Verify the page loads with the correct title
await expect(page.getByRole("heading", { name: "Privacy Policy" })).toBeVisible({
timeout: 10_000,
});
});
test("Product Analytics section exists", async ({ page }) => {
await page.goto("/privacy");
await expect(page.getByRole("heading", { name: "Product Analytics" })).toBeVisible({
timeout: 10_000,
});
});
test("Your Choice section exists", async ({ page }) => {
await page.goto("/privacy");
await expect(page.getByRole("heading", { name: "Your Choice" })).toBeVisible({
timeout: 10_000,
});
});
test("Third-Party Services section exists", async ({ page }) => {
await page.goto("/privacy");
await expect(page.getByRole("heading", { name: "Third-Party Services" })).toBeVisible({
timeout: 10_000,
});
});
test("mentions PostHog and Sentry by name", async ({ page }) => {
await page.goto("/privacy");
await expect(page.getByRole("link", { name: "PostHog" })).toBeVisible({ timeout: 10_000 });
await expect(page.getByRole("link", { name: "Sentry" })).toBeVisible({ timeout: 10_000 });
});
test("shows correct last-updated date", async ({ page }) => {
await page.goto("/privacy");
await expect(page.getByText("April 22, 2026")).toBeVisible({ timeout: 10_000 });
});
test("does NOT contain old 'No Tracking or Analytics' text", async ({ page }) => {
await page.goto("/privacy");
// The old privacy policy had this text — it should be gone now
const oldText = page.getByText("No Tracking or Analytics");
await expect(oldText).not.toBeVisible({ timeout: 5_000 });
});
test("back-to-app link is present", async ({ page }) => {
await page.goto("/privacy");
await expect(page.getByText("Back to app")).toBeVisible({ timeout: 10_000 });
});
});