From fac72a53625c952c35b0c0061cf42aed6e08c532 Mon Sep 17 00:00:00 2001 From: Ishaan Jaffer Date: Wed, 6 May 2026 15:09:27 -0700 Subject: [PATCH] test(e2e/agents): add composer spec for Validation #6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Type a message, send; assert the user_message bubble count strictly grows. Mock provider acks the user_message synchronously — that's enough to verify the composer plumbing without Epic A. --- .../e2e_tests/tests/agents/composer.spec.ts | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 ui/litellm-dashboard/e2e_tests/tests/agents/composer.spec.ts diff --git a/ui/litellm-dashboard/e2e_tests/tests/agents/composer.spec.ts b/ui/litellm-dashboard/e2e_tests/tests/agents/composer.spec.ts new file mode 100644 index 00000000000..ec706db70b1 --- /dev/null +++ b/ui/litellm-dashboard/e2e_tests/tests/agents/composer.spec.ts @@ -0,0 +1,26 @@ +/** + * LIT-2881 Validation #6 — Followup composer. + * + * Type message + send. user_message bubble appears (mock provider). + * (assistant_message follows in real proxy mode; the mock client only + * acks the user_message synchronously, which is enough to verify the + * composer plumbing.) + */ +import { test, expect } from "@playwright/test"; +import { AGENTS_DEV_URL, authenticateAgentsPage } from "./_helpers"; + +test("composer send surfaces a user_message in the conversation pane", async ({ page }) => { + await authenticateAgentsPage(page); + await page.goto(`${AGENTS_DEV_URL}/agents/agt_01/sessions/ses_01`); + await expect(page.getByTestId("composer")).toBeVisible(); + + const userBubblesBefore = await page.getByTestId("message-bubble-user").count(); + + await page.getByTestId("composer-input").fill("ping from e2e"); + await page.getByTestId("composer-send").click(); + + // user_message bubble count strictly grows + await expect + .poll(async () => page.getByTestId("message-bubble-user").count(), { timeout: 5_000 }) + .toBeGreaterThan(userBubblesBefore); +});