summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-18 05:36:02 -0600
committerAdam <[email protected]>2026-01-19 09:03:52 -0600
commit91a708b12e3dc0219517aa93dbd30ef2a4aea6c8 (patch)
treec1ac266424ea4a7a7ce9c95ba5c5c497f892f49b
parent19d15ca4dfb4eaad34e3b9e0a3b8f9e206d094c3 (diff)
downloadopencode-91a708b12e3dc0219517aa93dbd30ef2a4aea6c8.tar.gz
opencode-91a708b12e3dc0219517aa93dbd30ef2a4aea6c8.zip
test(app): more e2e tests
-rw-r--r--packages/app/e2e/navigation.spec.ts24
-rw-r--r--packages/app/e2e/palette.spec.ts34
-rw-r--r--packages/app/e2e/terminal.spec.ts33
3 files changed, 91 insertions, 0 deletions
diff --git a/packages/app/e2e/navigation.spec.ts b/packages/app/e2e/navigation.spec.ts
new file mode 100644
index 000000000..2783c5222
--- /dev/null
+++ b/packages/app/e2e/navigation.spec.ts
@@ -0,0 +1,24 @@
+import { test, expect } from "@playwright/test"
+import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
+import { base64Encode } from "@opencode-ai/util/encode"
+
+const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
+const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
+const url = `http://${host}:${port}`
+
+async function getWorktree() {
+ const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true })
+ const result = await sdk.path.get()
+ const data = result.data
+ if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`)
+ return data.worktree
+}
+
+test("project route redirects to /session", async ({ page }) => {
+ const directory = await getWorktree()
+ const slug = base64Encode(directory)
+
+ await page.goto(`/${slug}`)
+ await expect(page).toHaveURL(new RegExp(`/${slug}/session`))
+ await expect(page.locator('[data-component="prompt-input"]')).toBeVisible()
+})
diff --git a/packages/app/e2e/palette.spec.ts b/packages/app/e2e/palette.spec.ts
new file mode 100644
index 000000000..062945629
--- /dev/null
+++ b/packages/app/e2e/palette.spec.ts
@@ -0,0 +1,34 @@
+import { test, expect } from "@playwright/test"
+import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
+import { base64Encode } from "@opencode-ai/util/encode"
+
+const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
+const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
+const url = `http://${host}:${port}`
+
+async function getWorktree() {
+ const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true })
+ const result = await sdk.path.get()
+ const data = result.data
+ if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`)
+ return data.worktree
+}
+
+const mod = process.platform === "darwin" ? "Meta" : "Control"
+
+test("search palette opens and closes", async ({ page }) => {
+ const directory = await getWorktree()
+ const slug = base64Encode(directory)
+
+ await page.goto(`/${slug}/session`)
+ await expect(page.locator('[data-component="prompt-input"]')).toBeVisible()
+
+ await page.keyboard.press(`${mod}+P`)
+
+ const dialog = page.getByRole("dialog")
+ await expect(dialog).toBeVisible()
+ await expect(dialog.getByRole("textbox").first()).toBeVisible()
+
+ await page.keyboard.press("Escape")
+ await expect(dialog).toHaveCount(0)
+})
diff --git a/packages/app/e2e/terminal.spec.ts b/packages/app/e2e/terminal.spec.ts
new file mode 100644
index 000000000..9bb9947fe
--- /dev/null
+++ b/packages/app/e2e/terminal.spec.ts
@@ -0,0 +1,33 @@
+import { test, expect } from "@playwright/test"
+import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
+import { base64Encode } from "@opencode-ai/util/encode"
+
+const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
+const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
+const url = `http://${host}:${port}`
+
+async function getWorktree() {
+ const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true })
+ const result = await sdk.path.get()
+ const data = result.data
+ if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`)
+ return data.worktree
+}
+
+test("terminal panel can be toggled", async ({ page }) => {
+ const directory = await getWorktree()
+ const slug = base64Encode(directory)
+
+ await page.goto(`/${slug}/session`)
+ await expect(page.locator('[data-component="prompt-input"]')).toBeVisible()
+
+ const terminal = page.locator('[data-component="terminal"]')
+ const initiallyOpen = await terminal.isVisible()
+ if (initiallyOpen) {
+ await page.keyboard.press("Control+Backquote")
+ await expect(terminal).toHaveCount(0)
+ }
+
+ await page.keyboard.press("Control+Backquote")
+ await expect(terminal).toBeVisible()
+})