summaryrefslogtreecommitdiffhomepage
path: root/packages/app/e2e/fixtures.ts
diff options
context:
space:
mode:
authorFilip <[email protected]>2026-02-04 00:45:49 +0100
committerGitHub <[email protected]>2026-02-03 17:45:49 -0600
commitacac05f22eb3c23eebea3c13ed0a0f5495425384 (patch)
treed189ec0c52436b3ed91b68f92f1a8365d4a43b7c /packages/app/e2e/fixtures.ts
parentb5a4671c648fd428425f759f9d487754b425dc75 (diff)
downloadopencode-acac05f22eb3c23eebea3c13ed0a0f5495425384.tar.gz
opencode-acac05f22eb3c23eebea3c13ed0a0f5495425384.zip
refactor(e2e): faster tests (#12021)
Diffstat (limited to 'packages/app/e2e/fixtures.ts')
-rw-r--r--packages/app/e2e/fixtures.ts57
1 files changed, 44 insertions, 13 deletions
diff --git a/packages/app/e2e/fixtures.ts b/packages/app/e2e/fixtures.ts
index bace8cd59..ea41ed851 100644
--- a/packages/app/e2e/fixtures.ts
+++ b/packages/app/e2e/fixtures.ts
@@ -1,5 +1,5 @@
-import { test as base, expect } from "@playwright/test"
-import { seedProjects } from "./actions"
+import { test as base, expect, type Page } from "@playwright/test"
+import { cleanupTestProject, createTestProject, seedProjects } from "./actions"
import { promptSelector } from "./selectors"
import { createSdk, dirSlug, getWorktree, sessionPath } from "./utils"
@@ -8,6 +8,14 @@ export const settingsKey = "settings.v3"
type TestFixtures = {
sdk: ReturnType<typeof createSdk>
gotoSession: (sessionID?: string) => Promise<void>
+ withProject: <T>(
+ callback: (project: {
+ directory: string
+ slug: string
+ gotoSession: (sessionID?: string) => Promise<void>
+ }) => Promise<T>,
+ options?: { extra?: string[] },
+ ) => Promise<T>
}
type WorkerFixtures = {
@@ -33,17 +41,7 @@ export const test = base.extend<TestFixtures, WorkerFixtures>({
await use(createSdk(directory))
},
gotoSession: async ({ page, directory }, use) => {
- await seedProjects(page, { directory })
- await page.addInitScript(() => {
- localStorage.setItem(
- "opencode.global.dat:model",
- JSON.stringify({
- recent: [{ providerID: "opencode", modelID: "big-pickle" }],
- user: [],
- variant: {},
- }),
- )
- })
+ await seedStorage(page, { directory })
const gotoSession = async (sessionID?: string) => {
await page.goto(sessionPath(directory, sessionID))
@@ -51,6 +49,39 @@ export const test = base.extend<TestFixtures, WorkerFixtures>({
}
await use(gotoSession)
},
+ 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 gotoSession = async (sessionID?: string) => {
+ await page.goto(sessionPath(directory, sessionID))
+ await expect(page.locator(promptSelector)).toBeVisible()
+ }
+
+ try {
+ await gotoSession()
+ return await callback({ directory, slug, gotoSession })
+ } finally {
+ await cleanupTestProject(directory)
+ }
+ })
+ },
})
+async function seedStorage(page: Page, input: { directory: string; extra?: string[] }) {
+ await seedProjects(page, input)
+ await page.addInitScript(() => {
+ localStorage.setItem(
+ "opencode.global.dat:model",
+ JSON.stringify({
+ recent: [{ providerID: "opencode", modelID: "big-pickle" }],
+ user: [],
+ variant: {},
+ }),
+ )
+ })
+}
+
export { expect }