Skip to content
File

Blob: tests/e2e/specs/08-rapid-page-navigation.spec.ts

typescript51 lines
1import { test, expect, createTestPage } from "../fixtures/bland-test";
2 
3test.describe("rapid page navigation - authenticated", () => {
4 test("switching pages A -> B -> C quickly settles on C without freezing", async ({
5 authenticatedPage: { page, accessToken },
6 e2eWorkspace,
7 }) => {
8 // Track page errors (hard freeze / unrecoverable)
9 const pageErrors: string[] = [];
10 page.on("pageerror", (err) => pageErrors.push(err.message));
11 
12 // Create three pages via API
13 const [pageA, , pageC] = await Promise.all([
14 createTestPage(page, accessToken, "Page Alpha", e2eWorkspace),
15 createTestPage(page, accessToken, "Page Beta", e2eWorkspace),
16 createTestPage(page, accessToken, "Page Gamma", e2eWorkspace),
17 ]);
18 
19 // Navigate to page A first
20 await page.goto(`/${pageA.workspaceSlug}/${pageA.pageId}`);
21 const editor = page.locator(".tiptap");
22 await editor.waitFor({ timeout: 30_000 });
23 
24 // Rapid-click through sidebar: A -> B -> C
25 const sidebarLinkB = page.locator("aside nav a, aside nav button, nav a").filter({ hasText: "Page Beta" }).first();
26 const sidebarLinkC = page.locator("aside nav a, aside nav button, nav a").filter({ hasText: "Page Gamma" }).first();
27 
28 // Wait for sidebar to render page links
29 await sidebarLinkB.waitFor({ timeout: 15_000 });
30 await sidebarLinkC.waitFor({ timeout: 15_000 });
31 
32 // Click B then immediately click C (rapid switch)
33 await sidebarLinkB.click();
34 await sidebarLinkC.click();
35 
36 // Wait for the final page to settle
37 await page.waitForURL(`**/${pageC.pageId}`, { timeout: 15_000 });
38 
39 // Wait for editor to mount on the final page
40 await editor.waitFor({ timeout: 30_000 });
41 
42 // Verify the page is interactive: click and type
43 await editor.click();
44 await page.keyboard.type("test input");
45 await expect(editor).toContainText("test input");
46 
47 // No page errors should have occurred
48 expect(pageErrors).toEqual([]);
49 });
50});