my_gradio / client /js /src /test /stream.test.ts
xray918's picture
Upload folder using huggingface_hub
0ad74ed verified
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);
});
});