Skip to content

Commit 7a5010f

Browse files
committed
test(app): cover large stacked review tree
1 parent 74417d1 commit 7a5010f

1 file changed

Lines changed: 47 additions & 12 deletions

File tree

packages/app/e2e/regression/review-terminal-stacked.spec.ts

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ const directory = "C:/OpenCode/ReviewTerminalStacked"
66
const projectID = "proj_review_terminal_stacked"
77
const sessionID = "ses_review_terminal_stacked"
88
const title = "Review terminal stacked"
9+
const branchDiffs = [
10+
fileDiff(".github/actions/setup-bun/action.yml", 7),
11+
...Array.from({ length: 2_739 }, (_, index) =>
12+
fileDiff(`src/branch/generated-${String(index).padStart(4, "0")}.ts`, 100),
13+
),
14+
]
915

1016
test("keeps the review tree and terminal sized when both panels are open", async ({ page }) => {
1117
await page.setViewportSize({ width: 1400, height: 900 })
@@ -41,18 +47,26 @@ test("keeps the review tree and terminal sized when both panels are open", async
4147
time: { created: 1700000000000, updated: 1700000000000 },
4248
},
4349
],
44-
vcsDiff: [
45-
{
46-
file: "src/example.ts",
47-
additions: 1,
48-
deletions: 1,
49-
status: "modified",
50-
patch:
51-
"diff --git a/src/example.ts b/src/example.ts\n--- a/src/example.ts\n+++ b/src/example.ts\n@@ -1 +1 @@\n-export const value = 'before'\n+export const value = 'after'\n",
52-
},
53-
],
5450
pageMessages: () => ({ items: [] }),
5551
})
52+
await page.route(/\/vcs(?:\?.*)?$/, (route) =>
53+
route.fulfill({
54+
status: 200,
55+
contentType: "application/json",
56+
body: JSON.stringify({ branch: "review-pane-performance", default_branch: "dev" }),
57+
}),
58+
)
59+
await page.route("**/vcs/diff**", (route) =>
60+
route.fulfill({
61+
status: 200,
62+
contentType: "application/json",
63+
body: JSON.stringify(
64+
new URL(route.request().url()).searchParams.get("mode") === "branch"
65+
? branchDiffs
66+
: [fileDiff("src/git.ts", 1)],
67+
),
68+
}),
69+
)
5670
await page.route("**/pty", (route) =>
5771
route.fulfill({
5872
status: 200,
@@ -71,11 +85,22 @@ test("keeps the review tree and terminal sized when both panels are open", async
7185
await page.goto(`/${base64Encode(directory)}/session/${sessionID}`)
7286
await expectSessionTitle(page, title)
7387
await page.getByRole("button", { name: "Toggle review" }).click()
74-
await expect(page.getByRole("button", { name: "example.ts" })).toBeVisible()
88+
await expect(page.getByRole("button", { name: "git.ts" })).toBeVisible()
7589

7690
await page.keyboard.press("Control+Backquote")
7791
await expect(page.locator("#terminal-panel")).toBeVisible()
78-
await expect(page.getByRole("button", { name: "example.ts" })).toBeVisible()
92+
// Terminal activation retries focus through 240ms; let that settle before opening the mode select.
93+
await page.waitForTimeout(300)
94+
await page.getByRole("button", { name: "Git changes" }).click()
95+
await page.getByRole("option", { name: "Branch changes" }).click()
96+
await expect(page.getByRole("tab", { name: "Review 2740" })).toBeVisible()
97+
await expect(page.getByRole("button", { name: "action.yml" })).toBeVisible()
98+
99+
const tree = page.locator('#review-panel [data-component="file-tree-v2"]')
100+
await expect(tree).toHaveAttribute("data-total-rows", "2745")
101+
const renderedRows = await tree.locator('[data-slot="file-tree-v2-row"]').count()
102+
expect(renderedRows).toBeGreaterThan(0)
103+
expect(renderedRows).toBeLessThanOrEqual(60)
79104

80105
const geometry = await page.evaluate(() => {
81106
const review = document.querySelector<HTMLElement>("#review-panel")!
@@ -96,3 +121,13 @@ test("keeps the review tree and terminal sized when both panels are open", async
96121
function base64Encode(value: string) {
97122
return Buffer.from(value, "utf8").toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "")
98123
}
124+
125+
function fileDiff(file: string, additions: number) {
126+
return {
127+
file,
128+
additions,
129+
deletions: 0,
130+
status: "modified",
131+
patch: `diff --git a/${file} b/${file}\n--- a/${file}\n+++ b/${file}\n@@ -1 +1 @@\n-export const value = 'before'\n+export const value = 'after'\n`,
132+
}
133+
}

0 commit comments

Comments
 (0)