mirror of
https://github.com/anomalyco/opencode.git
synced 2026-02-01 14:44:46 +00:00
116 lines
3.8 KiB
TypeScript
116 lines
3.8 KiB
TypeScript
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,
|
|
})
|
|
})
|
|
})
|