LibreChat/e2e/specs/mock/streaming.spec.ts
Danny Avila e108955c20
🧷 ci: Enforce Durable Agent Finalization for E2E tests (#14740)
* test: enforce agent generation finalization

* test(e2e): correlate canonical persisted turns
2026-08-11 08:27:50 -04:00

41 lines
1.4 KiB
TypeScript

import { expect, test } from '@playwright/test';
import {
MOCK_ENDPOINTS,
NEW_CHAT_PATH,
messagesView,
selectMockEndpoint,
sendMessageAndWaitForCompletion,
} from './helpers';
const ORDERED_PIECE_COUNT = 64;
const orderedPieces = () =>
Array.from(
{ length: ORDERED_PIECE_COUNT },
(_, index) => `piece-${String(index).padStart(3, '0')}`,
);
test.describe('stream transport fidelity', () => {
test('renders and persists every LLM chunk exactly once and in order', async ({ page }) => {
const label = `ordered-${Date.now()}`;
const expected = `E2E ordered reply ${label} ${orderedPieces().join(' ')}`;
await page.goto(NEW_CHAT_PATH, { timeout: 10000 });
await selectMockEndpoint(page, MOCK_ENDPOINTS[0]);
const response = await sendMessageAndWaitForCompletion(page, `E2E_ORDERED_REPLY:${label}`);
expect(response.ok()).toBeTruthy();
const assistantContent = messagesView(page)
.locator('.message-render')
.last()
.locator('.message-content');
await expect(assistantContent).toContainText('piece-010', { timeout: 30000 });
await expect(assistantContent).toHaveText(expected, { timeout: 30000 });
await page.reload({ timeout: 10000 });
await expect(
messagesView(page).locator('.message-render').last().locator('.message-content'),
).toHaveText(expected, { timeout: 30000 });
});
});