| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import { seedSessionTask, withSession } from "../actions"
- import { test, expect } from "../fixtures"
- import { inputMatch } from "../prompt/mock"
- test("task tool child-session link does not trigger stale show errors", async ({ page, llm, project }) => {
- test.setTimeout(120_000)
- const errs: string[] = []
- const onError = (err: Error) => {
- errs.push(err.message)
- }
- page.on("pageerror", onError)
- try {
- await project.open()
- await withSession(project.sdk, `e2e child nav ${Date.now()}`, async (session) => {
- const taskInput = {
- description: "Open child session",
- prompt: "Search the repository for AssistantParts and then reply with exactly CHILD_OK.",
- subagent_type: "general",
- }
- await llm.toolMatch(inputMatch(taskInput), "task", taskInput)
- const child = await seedSessionTask(project.sdk, {
- sessionID: session.id,
- description: taskInput.description,
- prompt: taskInput.prompt,
- })
- project.trackSession(child.sessionID)
- await project.gotoSession(session.id)
- const header = page.locator("[data-session-title]")
- await expect(header.getByRole("button", { name: "More options" })).toBeVisible({ timeout: 30_000 })
- const card = page
- .locator('[data-component="task-tool-card"]')
- .filter({ hasText: /open child session/i })
- .first()
- await expect(card).toBeVisible({ timeout: 30_000 })
- await card.click()
- await expect(page).toHaveURL(new RegExp(`/session/${child.sessionID}(?:[/?#]|$)`), { timeout: 30_000 })
- await expect(header.locator('[data-slot="session-title-parent"]')).toHaveText(session.title)
- await expect(header.locator('[data-slot="session-title-child"]')).toHaveText(taskInput.description)
- await expect(header.locator('[data-slot="session-title-separator"]')).toHaveText("/")
- await expect
- .poll(
- () =>
- header.locator('[data-slot="session-title-separator"]').evaluate((el) => ({
- left: getComputedStyle(el).paddingLeft,
- right: getComputedStyle(el).paddingRight,
- })),
- { timeout: 30_000 },
- )
- .toEqual({ left: "8px", right: "8px" })
- await expect(header.getByRole("button", { name: "More options" })).toHaveCount(0)
- await expect(page.getByText("Subagent sessions cannot be prompted.")).toBeVisible({ timeout: 30_000 })
- await expect(page.getByRole("button", { name: "Back to main session." })).toBeVisible({ timeout: 30_000 })
- await expect.poll(() => errs, { timeout: 5_000 }).toEqual([])
- })
- } finally {
- page.off("pageerror", onError)
- }
- })
|