test(app/e2e): stream auto-scroll and working-indicator→copy-button (Cluster G5) (#743)
* test(app/e2e): stream auto-scroll and working-indicator→copy-button (Cluster G5) Wire in the unused agent-bottom-anchor helpers and add two new agent stream UI specs: auto-scroll stays pinned to the bottom across token bursts, and the inline working-indicator transitions to a copy-button when the stream ends. Both tests use the mock provider so there is no real LLM dependency in CI. Adds three helpers to helpers/agent-stream.ts: - expectInlineWorkingIndicator - expectTurnCopyButton - expectScrolledToBottom (wraps agent-bottom-anchor) * fixup: address review blockers and nits - Replace expectScrolledToBottom passthrough with expectScrollFollowsNewContent that encapsulates readScrollMetrics → waitForContentGrowth → expectNearBottom - Remove direct agent-bottom-anchor imports from spec body (DSL leak) - Add awaitAssistantMessage before expectInlineWorkingIndicator to anchor on real content before asserting the working indicator - Add comment to expectInlineWorkingIndicator explaining why testId is used (animated spinner View has no ARIA role)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import { test } from "./fixtures";
|
||||
import {
|
||||
awaitAssistantMessage,
|
||||
expectAgentIdle,
|
||||
expectInlineWorkingIndicator,
|
||||
expectTurnCopyButton,
|
||||
expectScrollFollowsNewContent,
|
||||
} from "./helpers/agent-stream";
|
||||
import { startRunningMockAgent } from "./helpers/composer";
|
||||
|
||||
test.describe("Agent stream UI", () => {
|
||||
test("auto-scroll sticks to bottom across token bursts", async ({ page }) => {
|
||||
test.setTimeout(120_000);
|
||||
const { client, repo } = await startRunningMockAgent(page, {
|
||||
prefix: "stream-scroll-",
|
||||
model: "one-minute-stream",
|
||||
prompt: "Stream for auto-scroll test.",
|
||||
});
|
||||
try {
|
||||
await awaitAssistantMessage(page);
|
||||
await expectScrollFollowsNewContent(page);
|
||||
} finally {
|
||||
await client.close();
|
||||
await repo.cleanup();
|
||||
}
|
||||
});
|
||||
|
||||
test("working-indicator transitions to copy-button when stream ends", async ({ page }) => {
|
||||
test.setTimeout(60_000);
|
||||
const { client, repo } = await startRunningMockAgent(page, {
|
||||
prefix: "stream-indicator-",
|
||||
model: "ten-second-stream",
|
||||
prompt: "Stream briefly for indicator transition test.",
|
||||
});
|
||||
try {
|
||||
await awaitAssistantMessage(page);
|
||||
await expectInlineWorkingIndicator(page);
|
||||
await expectAgentIdle(page, 30_000);
|
||||
await expectTurnCopyButton(page);
|
||||
} finally {
|
||||
await client.close();
|
||||
await repo.cleanup();
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user