summaryrefslogtreecommitdiffhomepage
path: root/packages/app/e2e/session
diff options
context:
space:
mode:
authorFilip <[email protected]>2026-01-31 13:42:47 +0100
committerGitHub <[email protected]>2026-01-31 06:42:47 -0600
commit511c7abacaebb5e007139395078b6a848e5e9ea5 (patch)
treef135c6621283aa6bcd66a1a3e5831202c7ba42eb /packages/app/e2e/session
parentf834915d3fbcf05137fc61fc51b9fa07b815e82c (diff)
downloadopencode-511c7abacaebb5e007139395078b6a848e5e9ea5.tar.gz
opencode-511c7abacaebb5e007139395078b6a848e5e9ea5.zip
test(app): session actions (#11386)
Diffstat (limited to 'packages/app/e2e/session')
-rw-r--r--packages/app/e2e/session/session.spec.ts115
1 files changed, 115 insertions, 0 deletions
diff --git a/packages/app/e2e/session/session.spec.ts b/packages/app/e2e/session/session.spec.ts
new file mode 100644
index 000000000..05984bbee
--- /dev/null
+++ b/packages/app/e2e/session/session.spec.ts
@@ -0,0 +1,115 @@
+import { test, expect } from "../fixtures"
+import {
+ openSidebar,
+ openSessionMoreMenu,
+ clickMenuItem,
+ confirmDialog,
+ openSharePopover,
+ withSession,
+} from "../actions"
+import { sessionItemSelector, inlineInputSelector } from "../selectors"
+
+const shareDisabled = process.env.OPENCODE_DISABLE_SHARE === "true" || process.env.OPENCODE_DISABLE_SHARE === "1"
+
+test("sidebar session can be renamed", async ({ page, sdk, gotoSession }) => {
+ const stamp = Date.now()
+ const originalTitle = `e2e rename test ${stamp}`
+ const newTitle = `e2e renamed ${stamp}`
+
+ await withSession(sdk, originalTitle, async (session) => {
+ await gotoSession(session.id)
+ await openSidebar(page)
+
+ const menu = await openSessionMoreMenu(page, session.id)
+ await clickMenuItem(menu, /rename/i)
+
+ const input = page.locator(sessionItemSelector(session.id)).locator(inlineInputSelector).first()
+ await expect(input).toBeVisible()
+ await input.fill(newTitle)
+ await input.press("Enter")
+
+ await expect(page.locator(sessionItemSelector(session.id)).locator("a").first()).toContainText(newTitle)
+ })
+})
+
+test("sidebar session can be archived", async ({ page, sdk, gotoSession }) => {
+ const stamp = Date.now()
+ const title = `e2e archive test ${stamp}`
+
+ await withSession(sdk, title, async (session) => {
+ await gotoSession(session.id)
+ await openSidebar(page)
+
+ const sessionEl = page.locator(sessionItemSelector(session.id))
+ const menu = await openSessionMoreMenu(page, session.id)
+ await clickMenuItem(menu, /archive/i)
+
+ await expect(sessionEl).not.toBeVisible()
+ })
+})
+
+test("sidebar session can be deleted", async ({ page, sdk, gotoSession }) => {
+ const stamp = Date.now()
+ const title = `e2e delete test ${stamp}`
+
+ await withSession(sdk, title, async (session) => {
+ await gotoSession(session.id)
+ await openSidebar(page)
+
+ const sessionEl = page.locator(sessionItemSelector(session.id))
+ const menu = await openSessionMoreMenu(page, session.id)
+ await clickMenuItem(menu, /delete/i)
+ await confirmDialog(page, /delete/i)
+
+ await expect(sessionEl).not.toBeVisible()
+ })
+})
+
+test("session can be shared and unshared via header button", async ({ page, sdk, gotoSession }) => {
+ test.skip(shareDisabled, "Share is disabled in this environment (OPENCODE_DISABLE_SHARE).")
+
+ const stamp = Date.now()
+ const title = `e2e share test ${stamp}`
+
+ await withSession(sdk, title, async (session) => {
+ await gotoSession(session.id)
+
+ const { rightSection, popoverBody } = await openSharePopover(page)
+ await popoverBody.getByRole("button", { name: "Publish" }).first().click()
+
+ await expect
+ .poll(
+ async () => {
+ const data = await sdk.session.get({ sessionID: session.id }).then((r) => r.data)
+ return data?.share?.url || undefined
+ },
+ { timeout: 30_000 },
+ )
+ .not.toBeUndefined()
+
+ const copyButton = rightSection.locator('button[aria-label="Copy link"]').first()
+ await expect(copyButton).toBeVisible({ timeout: 30_000 })
+
+ const sharedPopover = await openSharePopover(page)
+ const unpublish = sharedPopover.popoverBody.getByRole("button", { name: "Unpublish" }).first()
+ await expect(unpublish).toBeVisible({ timeout: 30_000 })
+ await unpublish.click()
+
+ await expect
+ .poll(
+ async () => {
+ const data = await sdk.session.get({ sessionID: session.id }).then((r) => r.data)
+ return data?.share?.url || undefined
+ },
+ { timeout: 30_000 },
+ )
+ .toBeUndefined()
+
+ await expect(copyButton).not.toBeVisible({ timeout: 30_000 })
+
+ const unsharedPopover = await openSharePopover(page)
+ await expect(unsharedPopover.popoverBody.getByRole("button", { name: "Publish" }).first()).toBeVisible({
+ timeout: 30_000,
+ })
+ })
+})