diff options
| author | Luke Parker <[email protected]> | 2026-03-07 16:33:12 +1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-07 16:33:12 +1000 |
| commit | 0b7a5b1e7bc7619c85e7cf4e30a1a0d4885779b6 (patch) | |
| tree | 6fcd11b17e890867a4c8d578452e90ed92fe7ffa /packages/app/e2e/fixtures.ts | |
| parent | 28bb16ca2a374439973d4f3f4b71d72f7fdae9cd (diff) | |
| download | opencode-0b7a5b1e7bc7619c85e7cf4e30a1a0d4885779b6.tar.gz opencode-0b7a5b1e7bc7619c85e7cf4e30a1a0d4885779b6.zip | |
test(app): abort sessions and wait for idle before e2e cleanup (#16439)
Diffstat (limited to 'packages/app/e2e/fixtures.ts')
| -rw-r--r-- | packages/app/e2e/fixtures.ts | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/packages/app/e2e/fixtures.ts b/packages/app/e2e/fixtures.ts index ea41ed851..6a35c6901 100644 --- a/packages/app/e2e/fixtures.ts +++ b/packages/app/e2e/fixtures.ts @@ -1,5 +1,5 @@ import { test as base, expect, type Page } from "@playwright/test" -import { cleanupTestProject, createTestProject, seedProjects } from "./actions" +import { cleanupSession, cleanupTestProject, createTestProject, seedProjects, sessionIDFromUrl } from "./actions" import { promptSelector } from "./selectors" import { createSdk, dirSlug, getWorktree, sessionPath } from "./utils" @@ -13,6 +13,8 @@ type TestFixtures = { directory: string slug: string gotoSession: (sessionID?: string) => Promise<void> + trackSession: (sessionID: string, directory?: string) => void + trackDirectory: (directory: string) => void }) => Promise<T>, options?: { extra?: string[] }, ) => Promise<T> @@ -51,20 +53,36 @@ export const test = base.extend<TestFixtures, WorkerFixtures>({ }, withProject: async ({ page }, use) => { await use(async (callback, options) => { - const directory = await createTestProject() - const slug = dirSlug(directory) - await seedStorage(page, { directory, extra: options?.extra }) + const root = await createTestProject() + const slug = dirSlug(root) + const sessions = new Map<string, string>() + const dirs = new Set<string>() + await seedStorage(page, { directory: root, extra: options?.extra }) const gotoSession = async (sessionID?: string) => { - await page.goto(sessionPath(directory, sessionID)) + await page.goto(sessionPath(root, sessionID)) await expect(page.locator(promptSelector)).toBeVisible() + const current = sessionIDFromUrl(page.url()) + if (current) trackSession(current) + } + + const trackSession = (sessionID: string, directory?: string) => { + sessions.set(sessionID, directory ?? root) + } + + const trackDirectory = (directory: string) => { + if (directory !== root) dirs.add(directory) } try { await gotoSession() - return await callback({ directory, slug, gotoSession }) + return await callback({ directory: root, slug, gotoSession, trackSession, trackDirectory }) } finally { - await cleanupTestProject(directory) + await Promise.allSettled( + Array.from(sessions, ([sessionID, directory]) => cleanupSession({ sessionID, directory })), + ) + await Promise.allSettled(Array.from(dirs, (directory) => cleanupTestProject(directory))) + await cleanupTestProject(root) } }) }, |
