diff options
| author | Adam <[email protected]> | 2026-01-18 05:36:02 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-19 09:03:52 -0600 |
| commit | 91a708b12e3dc0219517aa93dbd30ef2a4aea6c8 (patch) | |
| tree | c1ac266424ea4a7a7ce9c95ba5c5c497f892f49b | |
| parent | 19d15ca4dfb4eaad34e3b9e0a3b8f9e206d094c3 (diff) | |
| download | opencode-91a708b12e3dc0219517aa93dbd30ef2a4aea6c8.tar.gz opencode-91a708b12e3dc0219517aa93dbd30ef2a4aea6c8.zip | |
test(app): more e2e tests
| -rw-r--r-- | packages/app/e2e/navigation.spec.ts | 24 | ||||
| -rw-r--r-- | packages/app/e2e/palette.spec.ts | 34 | ||||
| -rw-r--r-- | packages/app/e2e/terminal.spec.ts | 33 |
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() +}) |
