summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-18 05:15:34 -0600
committerAdam <[email protected]>2026-01-19 09:03:52 -0600
commit19d15ca4dfb4eaad34e3b9e0a3b8f9e206d094c3 (patch)
tree97f713903e043816c7d102c8ba5a4688c70fada0
parent03d7467ea268f2f0f8d99f48ea1522741014b4bf (diff)
downloadopencode-19d15ca4dfb4eaad34e3b9e0a3b8f9e206d094c3.tar.gz
opencode-19d15ca4dfb4eaad34e3b9e0a3b8f9e206d094c3.zip
test(app): more e2e tests
-rw-r--r--packages/app/e2e/home.spec.ts22
-rw-r--r--packages/app/e2e/session.spec.ts38
2 files changed, 58 insertions, 2 deletions
diff --git a/packages/app/e2e/home.spec.ts b/packages/app/e2e/home.spec.ts
index ff57923d5..29a070609 100644
--- a/packages/app/e2e/home.spec.ts
+++ b/packages/app/e2e/home.spec.ts
@@ -1,6 +1,24 @@
import { test, expect } from "@playwright/test"
-test("home shows recent projects header", async ({ page }) => {
+test("home renders and shows an open project entrypoint", async ({ page }) => {
await page.goto("/")
- await expect(page.getByText("Recent projects")).toBeVisible()
+
+ await expect(page.getByText("Recent projects").or(page.getByText("No recent projects"))).toBeVisible()
+ await expect(page.getByRole("button", { name: "Open project" }).first()).toBeVisible()
+})
+
+test("server picker dialog opens from home", async ({ page }) => {
+ const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
+ const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
+ const name = `${host}:${port}`
+
+ await page.goto("/")
+
+ const trigger = page.getByRole("button", { name })
+ await expect(trigger).toBeVisible()
+ await trigger.click()
+
+ const dialog = page.getByRole("dialog", { name: "Servers" })
+ await expect(dialog).toBeVisible()
+ await expect(dialog.getByPlaceholder("Search servers")).toBeVisible()
})
diff --git a/packages/app/e2e/session.spec.ts b/packages/app/e2e/session.spec.ts
new file mode 100644
index 000000000..e1ca12449
--- /dev/null
+++ b/packages/app/e2e/session.spec.ts
@@ -0,0 +1,38 @@
+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("can open an existing session and type into the prompt", async ({ page }) => {
+ const directory = await getWorktree()
+ const sdk = createOpencodeClient({ baseUrl: url, directory, throwOnError: true })
+ const title = `e2e smoke ${Date.now()}`
+ const created = await sdk.session.create({ title }).then((r) => r.data)
+
+ if (!created?.id) throw new Error("Session create did not return an id")
+ const sessionID = created.id
+
+ try {
+ await page.goto(`/${base64Encode(directory)}/session/${sessionID}`)
+
+ const prompt = page.locator('[data-component="prompt-input"]')
+ await expect(prompt).toBeVisible()
+
+ await prompt.click()
+ await page.keyboard.type("hello from e2e")
+ await expect(prompt).toContainText("hello from e2e")
+ } finally {
+ await sdk.session.delete({ sessionID }).catch(() => undefined)
+ }
+})