summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-04 10:10:16 -0600
committerAdam <[email protected]>2026-02-04 10:10:28 -0600
commit93592702c33c5105b25f177c4db967a8db53cb69 (patch)
tree81088ba38f38275f5f48c9db24e82bf7ba889c04
parent61d3f788b847593a865d1aa8a9a112911f55d117 (diff)
downloadopencode-93592702c33c5105b25f177c4db967a8db53cb69.tar.gz
opencode-93592702c33c5105b25f177c4db967a8db53cb69.zip
test(app): fix dated e2e tests
-rw-r--r--packages/app/e2e/actions.ts23
-rw-r--r--packages/app/e2e/session/session.spec.ts70
2 files changed, 76 insertions, 17 deletions
diff --git a/packages/app/e2e/actions.ts b/packages/app/e2e/actions.ts
index 5f80d67c2..ebcc9effd 100644
--- a/packages/app/e2e/actions.ts
+++ b/packages/app/e2e/actions.ts
@@ -182,13 +182,30 @@ export async function hoverSessionItem(page: Page, sessionID: string) {
}
export async function openSessionMoreMenu(page: Page, sessionID: string) {
- const sessionEl = await hoverSessionItem(page, sessionID)
+ await expect(page).toHaveURL(new RegExp(`/session/${sessionID}(?:[/?#]|$)`))
- const menuTrigger = sessionEl.locator(dropdownMenuTriggerSelector).first()
+ const scroller = page.locator(".session-scroller").first()
+ await expect(scroller).toBeVisible()
+ await expect(scroller.getByRole("heading", { level: 1 }).first()).toBeVisible({ timeout: 30_000 })
+
+ const menu = page
+ .locator(dropdownMenuContentSelector)
+ .filter({ has: page.getByRole("menuitem", { name: /rename/i }) })
+ .filter({ has: page.getByRole("menuitem", { name: /archive/i }) })
+ .filter({ has: page.getByRole("menuitem", { name: /delete/i }) })
+ .first()
+
+ const opened = await menu
+ .isVisible()
+ .then((x) => x)
+ .catch(() => false)
+
+ if (opened) return menu
+
+ const menuTrigger = scroller.getByRole("button", { name: /more options/i }).first()
await expect(menuTrigger).toBeVisible()
await menuTrigger.click()
- const menu = page.locator(dropdownMenuContentSelector).first()
await expect(menu).toBeVisible()
return menu
}
diff --git a/packages/app/e2e/session/session.spec.ts b/packages/app/e2e/session/session.spec.ts
index 05984bbee..4610fb331 100644
--- a/packages/app/e2e/session/session.spec.ts
+++ b/packages/app/e2e/session/session.spec.ts
@@ -11,57 +11,98 @@ 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 }) => {
+type Sdk = Parameters<typeof withSession>[0]
+
+async function seedMessage(sdk: Sdk, sessionID: string) {
+ await sdk.session.promptAsync({
+ sessionID,
+ noReply: true,
+ parts: [{ type: "text", text: "e2e seed" }],
+ })
+
+ await expect
+ .poll(
+ async () => {
+ const messages = await sdk.session.messages({ sessionID, limit: 1 }).then((r) => r.data ?? [])
+ return messages.length
+ },
+ { timeout: 30_000 },
+ )
+ .toBeGreaterThan(0)
+}
+
+test("session can be renamed via header menu", 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 seedMessage(sdk, session.id)
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()
+ const input = page.locator(".session-scroller").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)
+ await expect(page.getByRole("heading", { level: 1 }).first()).toContainText(newTitle)
})
})
-test("sidebar session can be archived", async ({ page, sdk, gotoSession }) => {
+test("session can be archived via header menu", async ({ page, sdk, gotoSession }) => {
const stamp = Date.now()
const title = `e2e archive test ${stamp}`
await withSession(sdk, title, async (session) => {
+ await seedMessage(sdk, session.id)
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()
+ await expect
+ .poll(
+ async () => {
+ const data = await sdk.session.get({ sessionID: session.id }).then((r) => r.data)
+ return data?.time?.archived
+ },
+ { timeout: 30_000 },
+ )
+ .not.toBeUndefined()
+
+ await openSidebar(page)
+ await expect(page.locator(sessionItemSelector(session.id))).toHaveCount(0)
})
})
-test("sidebar session can be deleted", async ({ page, sdk, gotoSession }) => {
+test("session can be deleted via header menu", async ({ page, sdk, gotoSession }) => {
const stamp = Date.now()
const title = `e2e delete test ${stamp}`
await withSession(sdk, title, async (session) => {
+ await seedMessage(sdk, session.id)
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()
+ await expect
+ .poll(
+ async () => {
+ const data = await sdk.session
+ .get({ sessionID: session.id })
+ .then((r) => r.data)
+ .catch(() => undefined)
+ return data?.id
+ },
+ { timeout: 30_000 },
+ )
+ .toBeUndefined()
+
+ await openSidebar(page)
+ await expect(page.locator(sessionItemSelector(session.id))).toHaveCount(0)
})
})
@@ -72,6 +113,7 @@ test("session can be shared and unshared via header button", async ({ page, sdk,
const title = `e2e share test ${stamp}`
await withSession(sdk, title, async (session) => {
+ await seedMessage(sdk, session.id)
await gotoSession(session.id)
const { rightSection, popoverBody } = await openSharePopover(page)