From 7493eb5fac52834b2f8da901d07c89423af4b55b Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 1 Aug 2026 11:49:51 +0200 Subject: [PATCH] test(app): cover submitted prompt rewind roundtrip --- packages/app/e2e/agent-message-rewind.spec.ts | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 packages/app/e2e/agent-message-rewind.spec.ts diff --git a/packages/app/e2e/agent-message-rewind.spec.ts b/packages/app/e2e/agent-message-rewind.spec.ts new file mode 100644 index 0000000000..7b8cd19263 --- /dev/null +++ b/packages/app/e2e/agent-message-rewind.spec.ts @@ -0,0 +1,51 @@ +import type { Locator } from "@playwright/test"; +import { expect, test, type Page } from "./fixtures"; +import { expectComposerDraft, expectComposerVisible, submitMessage } from "./helpers/composer"; +import { openAgentRoute, seedMockAgentWorkspace } from "./helpers/mock-agent"; + +async function completeSubmittedTurn( + page: Page, + agent: Awaited>, + prompt: string, +): Promise { + await submitMessage(page, prompt); + const userMessage = page.getByTestId("user-message").filter({ hasText: prompt }); + await expect(userMessage).toBeVisible(); + + const finish = await agent.client.waitForFinish(agent.agentId, 30_000); + expect(finish.status).toBe("idle"); + await expect(page.getByText("(end of synthetic stream)", { exact: true })).toBeVisible(); + await expect(userMessage).toHaveAttribute("aria-busy", "false"); + return userMessage; +} + +async function rewindConversation(page: Page, userMessage: Locator, prompt: string): Promise { + await userMessage.getByText(prompt, { exact: true }).hover(); + await userMessage.getByRole("button", { name: "Rewind to this message", exact: true }).click(); + await page.getByRole("button", { name: "Rewind conversation", exact: true }).click(); +} + +test.describe("Agent message rewind", () => { + test("rewinds a submitted prompt and restores it to the composer", async ({ page }) => { + test.setTimeout(90_000); + const prompt = "Restore this submitted prompt after rewind."; + const agent = await seedMockAgentWorkspace({ + repoPrefix: "message-rewind-roundtrip-", + title: "Message rewind roundtrip", + model: "ten-second-stream", + }); + + try { + await openAgentRoute(page, agent); + await expectComposerVisible(page); + const userMessage = await completeSubmittedTurn(page, agent, prompt); + + await rewindConversation(page, userMessage, prompt); + + await expect(page.getByText("(end of synthetic stream)", { exact: true })).toHaveCount(0); + await expectComposerDraft(page, prompt); + } finally { + await agent.cleanup(); + } + }); +});