Files
opencode/packages/app/e2e/session.spec.ts
2026-01-19 09:03:52 -06:00

39 lines
1.4 KiB
TypeScript

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)
}
})