Spaces:
Running
Running
| import { vi, type Mock } from "vitest"; | |
| import { Client } from "../client"; | |
| import { readable_stream } from "../utils/stream"; | |
| import { initialise_server } from "./server"; | |
| import { direct_space_url } from "./handlers.ts"; | |
| import { | |
| describe, | |
| it, | |
| expect, | |
| afterEach, | |
| beforeAll, | |
| afterAll, | |
| beforeEach | |
| } from "vitest"; | |
| const server = initialise_server(); | |
| beforeAll(() => server.listen()); | |
| afterEach(() => server.resetHandlers()); | |
| afterAll(() => server.close()); | |
| describe("open_stream", () => { | |
| let app: Client; | |
| beforeEach(async () => { | |
| app = await Client.connect("hmb/hello_world"); | |
| app.stream = vi.fn().mockImplementation(() => { | |
| app.stream_instance = readable_stream( | |
| new URL(`${direct_space_url}/queue/data`) | |
| ); | |
| return app.stream_instance; | |
| }); | |
| }); | |
| afterEach(() => { | |
| vi.clearAllMocks(); | |
| }); | |
| it("should throw an error if config is not defined", () => { | |
| app.config = undefined; | |
| expect(async () => { | |
| await app.open_stream(); | |
| }).rejects.toThrow("Could not resolve app config"); | |
| }); | |
| it("should connect to the SSE endpoint and handle messages", async () => { | |
| await app.open_stream(); | |
| const eventsource_mock_call = (app.stream as Mock).mock.calls[0][0]; | |
| expect(eventsource_mock_call.href).toMatch( | |
| /https:\/\/hmb-hello-world\.hf\.space\/queue\/data\?session_hash/ | |
| ); | |
| expect(app.stream).toHaveBeenCalledWith(eventsource_mock_call); | |
| if (!app.stream_instance?.onmessage || !app.stream_instance?.onerror) { | |
| throw new Error("stream instance is not defined"); | |
| } | |
| const onMessageCallback = app.stream_instance.onmessage.bind(app); | |
| const onErrorCallback = app.stream_instance.onerror.bind(app); | |
| const message = { msg: "hello jerry" }; | |
| onMessageCallback({ data: JSON.stringify(message) }); | |
| expect(app.stream_status.open).toBe(true); | |
| expect(app.event_callbacks).toEqual({}); | |
| expect(app.pending_stream_messages).toEqual({}); | |
| const close_stream_message = { msg: "close_stream" }; | |
| onMessageCallback({ data: JSON.stringify(close_stream_message) }); | |
| expect(app.stream_status.open).toBe(false); | |
| onErrorCallback({ data: JSON.stringify("404") }); | |
| expect(app.stream_status.open).toBe(false); | |
| }); | |
| }); | |