File size: 2,179 Bytes
0ad74ed |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
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);
});
});
|