test(frontend): unit tests exercise named SSE events (fidelity) + cleanup
FakeEventSource.addEventListener was a no-op, so emit() only drove onmessage.
Production relies on addEventListener for the backend's NAMED events
(event: ui_request), so the unit tests could pass while prod silently broke.
- fakeEventSource: store named handlers in a Map<string,Set>; add emitNamed()
that dispatches to them; keep emit() for the unnamed/default onmessage path
- useSessionStream.test: ui_request now driven via emitNamed (production path);
add a separate test for the unnamed text_delta path via plain emit
- f1-loop.test: widget emission switched to emitNamed("ui_request", ...)
- verified: tests FAIL if addEventListener wiring is removed from
useSessionStream (then restored)
- cleanup: fake-pi.mjs drops unused execFileSync import, uses static spawnSync
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -41,9 +41,10 @@ test("F1: create session -> widget via SSE -> respond -> POST /response", async
|
||||
// Wait for the session to be created and SSE to connect
|
||||
await waitFor(() => expect(FakeEventSource.instances).toHaveLength(1));
|
||||
|
||||
// Simulate the backend emitting the F1 widget
|
||||
// Simulate the backend emitting the F1 widget via a NAMED SSE event
|
||||
// (`event: ui_request`) — the same addEventListener path production uses.
|
||||
act(() =>
|
||||
FakeEventSource.instances[0].emit({
|
||||
FakeEventSource.instances[0].emitNamed("ui_request", {
|
||||
type: "ui_request",
|
||||
ui_request: {
|
||||
id: "u1",
|
||||
|
||||
Reference in New Issue
Block a user