summaryrefslogtreecommitdiffhomepage
path: root/packages/app/e2e/prompt
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/e2e/prompt')
-rw-r--r--packages/app/e2e/prompt/prompt-drop-file-uri.spec.ts22
-rw-r--r--packages/app/e2e/prompt/prompt-drop-file.spec.ts30
-rw-r--r--packages/app/e2e/prompt/prompt-multiline.spec.ts18
-rw-r--r--packages/app/e2e/prompt/prompt-slash-terminal.spec.ts23
4 files changed, 93 insertions, 0 deletions
diff --git a/packages/app/e2e/prompt/prompt-drop-file-uri.spec.ts b/packages/app/e2e/prompt/prompt-drop-file-uri.spec.ts
new file mode 100644
index 000000000..add2d8d8b
--- /dev/null
+++ b/packages/app/e2e/prompt/prompt-drop-file-uri.spec.ts
@@ -0,0 +1,22 @@
+import { test, expect } from "../fixtures"
+import { promptSelector } from "../selectors"
+
+test("dropping text/plain file: uri inserts a file pill", async ({ page, gotoSession }) => {
+ await gotoSession()
+
+ const prompt = page.locator(promptSelector)
+ await prompt.click()
+
+ const path = process.platform === "win32" ? "C:\\opencode-e2e-drop.txt" : "/tmp/opencode-e2e-drop.txt"
+ const dt = await page.evaluateHandle((text) => {
+ const dt = new DataTransfer()
+ dt.setData("text/plain", text)
+ return dt
+ }, `file:${path}`)
+
+ await page.dispatchEvent("body", "drop", { dataTransfer: dt })
+
+ const pill = page.locator(`${promptSelector} [data-type="file"]`).first()
+ await expect(pill).toBeVisible()
+ await expect(pill).toHaveAttribute("data-path", path)
+})
diff --git a/packages/app/e2e/prompt/prompt-drop-file.spec.ts b/packages/app/e2e/prompt/prompt-drop-file.spec.ts
new file mode 100644
index 000000000..0a138de99
--- /dev/null
+++ b/packages/app/e2e/prompt/prompt-drop-file.spec.ts
@@ -0,0 +1,30 @@
+import { test, expect } from "../fixtures"
+import { promptSelector } from "../selectors"
+
+test("dropping an image file adds an attachment", async ({ page, gotoSession }) => {
+ await gotoSession()
+
+ const prompt = page.locator(promptSelector)
+ await prompt.click()
+
+ const png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO3+4uQAAAAASUVORK5CYII="
+ const dt = await page.evaluateHandle((b64) => {
+ const dt = new DataTransfer()
+ const bytes = Uint8Array.from(atob(b64), (c) => c.charCodeAt(0))
+ const file = new File([bytes], "drop.png", { type: "image/png" })
+ dt.items.add(file)
+ return dt
+ }, png)
+
+ await page.dispatchEvent("body", "drop", { dataTransfer: dt })
+
+ const img = page.locator('img[alt="drop.png"]').first()
+ await expect(img).toBeVisible()
+
+ const remove = page.getByRole("button", { name: "Remove attachment" }).first()
+ await expect(remove).toBeVisible()
+
+ await img.hover()
+ await remove.click()
+ await expect(page.locator('img[alt="drop.png"]')).toHaveCount(0)
+})
diff --git a/packages/app/e2e/prompt/prompt-multiline.spec.ts b/packages/app/e2e/prompt/prompt-multiline.spec.ts
new file mode 100644
index 000000000..216aa3fda
--- /dev/null
+++ b/packages/app/e2e/prompt/prompt-multiline.spec.ts
@@ -0,0 +1,18 @@
+import { test, expect } from "../fixtures"
+import { promptSelector } from "../selectors"
+
+test("shift+enter inserts a newline without submitting", async ({ page, gotoSession }) => {
+ await gotoSession()
+
+ await expect(page).toHaveURL(/\/session\/?$/)
+
+ const prompt = page.locator(promptSelector)
+ await prompt.click()
+ await page.keyboard.type("line one")
+ await page.keyboard.press("Shift+Enter")
+ await page.keyboard.type("line two")
+
+ await expect(page).toHaveURL(/\/session\/?$/)
+ await expect(prompt).toContainText("line one")
+ await expect(prompt).toContainText("line two")
+})
diff --git a/packages/app/e2e/prompt/prompt-slash-terminal.spec.ts b/packages/app/e2e/prompt/prompt-slash-terminal.spec.ts
new file mode 100644
index 000000000..eefce19dc
--- /dev/null
+++ b/packages/app/e2e/prompt/prompt-slash-terminal.spec.ts
@@ -0,0 +1,23 @@
+import { test, expect } from "../fixtures"
+import { promptSelector, terminalSelector } from "../selectors"
+
+test("/terminal toggles the terminal panel", async ({ page, gotoSession }) => {
+ await gotoSession()
+
+ const prompt = page.locator(promptSelector)
+ const terminal = page.locator(terminalSelector)
+
+ await expect(terminal).not.toBeVisible()
+
+ await prompt.click()
+ await page.keyboard.type("/terminal")
+ await expect(page.locator('[data-slash-id="terminal.toggle"]').first()).toBeVisible()
+ await page.keyboard.press("Enter")
+ await expect(terminal).toBeVisible()
+
+ await prompt.click()
+ await page.keyboard.type("/terminal")
+ await expect(page.locator('[data-slash-id="terminal.toggle"]').first()).toBeVisible()
+ await page.keyboard.press("Enter")
+ await expect(terminal).not.toBeVisible()
+})