mirror of
https://github.com/anomalyco/opencode.git
synced 2026-09-09 06:55:21 +00:00
61 lines
4 KiB
TypeScript
61 lines
4 KiB
TypeScript
import { expect, story } from "../../storybook/playwright/story"
|
|
|
|
// Moved from packages/app/e2e/regression/session-timeline-collapse-state.spec.ts
|
|
story("keeps a manually collapsed tool collapsed when later assistant content streams", async ({ mount }) => {
|
|
const timeline = await mount("current-session-file-changes--changing-files", { args: { scenario: "streaming" } })
|
|
const tool = timeline.locator('[data-timeline-part-id="tool_edit_status"]')
|
|
const trigger = tool.locator('[data-scope="apply-patch"] button')
|
|
await expect(trigger).toHaveAttribute("aria-expanded", "true")
|
|
await tool.evaluate((element) => ((element as HTMLElement).dataset.regressionMarker = "before-stream"))
|
|
await trigger.click()
|
|
await expect(trigger).toHaveAttribute("aria-expanded", "false")
|
|
await timeline.getByRole("button", { name: "Stream sibling content" }).click()
|
|
await expect(timeline.getByText("Streaming added a later assistant text part.", { exact: true })).toBeVisible()
|
|
await expect(tool).toHaveAttribute("data-regression-marker", "before-stream")
|
|
await expect(trigger).toHaveAttribute("aria-expanded", "false")
|
|
await expect(tool.locator("xpath=ancestor::*[@data-timeline-row]")).toHaveAttribute(
|
|
"data-timeline-row",
|
|
"AssistantPart",
|
|
)
|
|
})
|
|
|
|
// Moved from packages/app/e2e/regression/session-timeline-projection.spec.ts
|
|
story("renders interruption independently when the turn is not compacted", async ({ mount }) => {
|
|
const timeline = await mount("current-session-timeline-rows--conversation", { args: { scenario: "interruption" } })
|
|
await expect(timeline.getByText("Interrupted", { exact: true })).toBeVisible()
|
|
await expect(timeline.getByText("Before", { exact: true })).toBeVisible()
|
|
await expect(timeline.getByText("After", { exact: true })).toBeVisible()
|
|
const rows = await timeline
|
|
.locator('[data-timeline-row="AssistantPart"], [data-timeline-row="TurnDivider"]')
|
|
.evaluateAll((elements) => elements.map((element) => element.getAttribute("data-timeline-row")))
|
|
expect(rows).toEqual(["AssistantPart", "TurnDivider", "AssistantPart"])
|
|
})
|
|
|
|
// Moved from packages/app/e2e/regression/session-timeline-projection.spec.ts
|
|
story("renders aliased and long custom model notices", async ({ mount, page }) => {
|
|
await page.setViewportSize({ width: 420, height: 700 })
|
|
const timeline = await mount("current-session-timeline-rows--conversation", { args: { scenario: "models" } })
|
|
const shortName = "GPT-5.4 nano"
|
|
const longName = "Company Gateway Extra Long Context Model for Narrow Timeline Layouts"
|
|
const short = timeline.locator('[data-slot="session-timeline-notice"]').filter({ hasText: shortName })
|
|
const long = timeline.locator('[data-slot="session-timeline-notice"]').filter({ hasText: longName })
|
|
await expect(short).toBeVisible()
|
|
await expect(short.getByText(`Switched to ${shortName}`, { exact: true })).toBeVisible()
|
|
await expect(short.locator('[data-slot="session-timeline-notice-variant"]')).toHaveText("xhigh")
|
|
await expect(timeline.getByText("fast-nano", { exact: true })).toHaveCount(0)
|
|
await expect(short.locator('[data-component="provider-icon"]')).toBeVisible()
|
|
await expect(long).toBeVisible()
|
|
await expect(long.locator('[data-component="provider-icon"]')).toBeVisible()
|
|
await expect(long.locator('[data-slot="session-timeline-notice-variant"]')).toHaveCount(0)
|
|
await expect(long.locator("[title]")).toHaveAttribute("title", `Switched to ${longName}`)
|
|
await expect.poll(() => long.evaluate((element) => element.scrollWidth <= element.clientWidth)).toBe(true)
|
|
})
|
|
|
|
// Moved from packages/app/e2e/regression/session-timeline-projection.spec.ts
|
|
story("renders user image, file attachment, file reference, and agent reference", async ({ mount }) => {
|
|
const timeline = await mount("current-session-timeline-rows--conversation", { args: { scenario: "attachments" } })
|
|
await expect(timeline.getByAltText("pixel.png")).toBeVisible()
|
|
await expect(timeline.getByText("tsconfig.json")).toBeVisible()
|
|
await expect(timeline.getByText("@src/a.ts", { exact: true })).toBeVisible()
|
|
await expect(timeline.getByText("@explore", { exact: true })).toBeVisible()
|
|
})
|