File
Blob: tests/e2e/specs/11-share-invalid-token.spec.ts
| 1 | import { test, expect } from "../fixtures/bland-test"; |
| 2 | |
| 3 | test.describe("invalid share token - terminal error", () => { |
| 4 | test("invalid token renders clean terminal error without share chrome", async ({ browser }) => { |
| 5 | const ctx = await browser.newContext(); |
| 6 | const page = await ctx.newPage(); |
| 7 | |
| 8 | const pageErrors: string[] = []; |
| 9 | page.on("pageerror", (err) => pageErrors.push(err.message)); |
| 10 | |
| 11 | await page.goto("/s/definitely-not-a-real-token"); |
| 12 | |
| 13 | // Terminal error content should be visible |
| 14 | const errorMessage = page.locator("text=Share link not found or expired"); |
| 15 | await expect(errorMessage).toBeVisible({ timeout: 15_000 }); |
| 16 | |
| 17 | // "Go home" action button should be present |
| 18 | const goHome = page.locator("button", { hasText: "Go home" }); |
| 19 | await expect(goHome).toBeVisible(); |
| 20 | |
| 21 | // Share header must NOT be rendered (no <header> element) |
| 22 | await expect(page.locator("header")).toHaveCount(0); |
| 23 | |
| 24 | // Share sidebar must NOT be rendered (no sidebar nav) |
| 25 | await expect(page.locator("nav[aria-hidden]")).toHaveCount(0); |
| 26 | |
| 27 | // Share footer must NOT be rendered |
| 28 | await expect(page.locator("footer")).toHaveCount(0); |
| 29 | |
| 30 | // No JS errors |
| 31 | expect(pageErrors).toEqual([]); |
| 32 | |
| 33 | await ctx.close(); |
| 34 | }); |
| 35 | |
| 36 | test("expired share token renders terminal error without share chrome (authenticated)", async ({ |
| 37 | authenticatedPage: { page }, |
| 38 | }) => { |
| 39 | // Use an authenticated context navigating to a bad token to verify |
| 40 | // the terminal state is the same regardless of auth status |
| 41 | const pageErrors: string[] = []; |
| 42 | page.on("pageerror", (err) => pageErrors.push(err.message)); |
| 43 | |
| 44 | await page.goto("/s/this-token-does-not-exist"); |
| 45 | |
| 46 | const errorMessage = page.locator("text=Share link not found or expired"); |
| 47 | await expect(errorMessage).toBeVisible({ timeout: 15_000 }); |
| 48 | |
| 49 | await expect(page.locator("header")).toHaveCount(0); |
| 50 | await expect(page.locator("footer")).toHaveCount(0); |
| 51 | |
| 52 | expect(pageErrors).toEqual([]); |
| 53 | }); |
| 54 | }); |