summaryrefslogtreecommitdiffhomepage
path: root/packages/app/e2e/utils.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-18 05:43:34 -0600
committerAdam <[email protected]>2026-01-19 09:03:52 -0600
commitdd19c3d8f2cfbb7d1b157bbe6f5a9a969cb6c239 (patch)
treec472127b923b308bae6619fde93e67210aaeb229 /packages/app/e2e/utils.ts
parentf5eb90514aca136e0aa2f48954f71d51b52e2b16 (diff)
downloadopencode-dd19c3d8f2cfbb7d1b157bbe6f5a9a969cb6c239.tar.gz
opencode-dd19c3d8f2cfbb7d1b157bbe6f5a9a969cb6c239.zip
test(app): e2e utilities
Diffstat (limited to 'packages/app/e2e/utils.ts')
-rw-r--r--packages/app/e2e/utils.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/packages/app/e2e/utils.ts b/packages/app/e2e/utils.ts
new file mode 100644
index 000000000..c18b36802
--- /dev/null
+++ b/packages/app/e2e/utils.ts
@@ -0,0 +1,45 @@
+import { createOpencodeClient } from "@opencode-ai/sdk/v2/client"
+import { base64Encode } from "@opencode-ai/util/encode"
+import type { Page } from "@playwright/test"
+
+export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost"
+export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096"
+
+export const serverUrl = `http://${serverHost}:${serverPort}`
+export const serverName = `${serverHost}:${serverPort}`
+
+export const modKey = process.platform === "darwin" ? "Meta" : "Control"
+export const terminalToggleKey = "Control+Backquote"
+
+export const promptSelector = '[data-component="prompt-input"]'
+export const terminalSelector = '[data-component="terminal"]'
+
+export function createSdk(directory?: string) {
+ return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true })
+}
+
+export async function getWorktree() {
+ const sdk = createSdk()
+ const result = await sdk.path.get()
+ const data = result.data
+ if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${serverUrl}/path`)
+ return data.worktree
+}
+
+export function dirSlug(directory: string) {
+ return base64Encode(directory)
+}
+
+export function dirPath(directory: string) {
+ return `/${dirSlug(directory)}`
+}
+
+export function sessionPath(directory: string, sessionID?: string) {
+ return `${dirPath(directory)}/session${sessionID ? `/${sessionID}` : ""}`
+}
+
+export async function gotoSession(page: Page, sessionID?: string) {
+ const directory = await getWorktree()
+ await page.goto(sessionPath(directory, sessionID))
+ return { directory, slug: dirSlug(directory) }
+}