60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const tauriMock = vi.hoisted(() => {
|
|
let listenerCleanup: (() => void) | null = null;
|
|
|
|
const connect = vi.fn(async () => {
|
|
let listenerActive = false;
|
|
|
|
return {
|
|
addListener: vi.fn(() => {
|
|
listenerActive = true;
|
|
listenerCleanup = vi.fn(() => {
|
|
if (!listenerActive) {
|
|
throw new TypeError(
|
|
"undefined is not an object (evaluating 'listeners[eventId].handlerId')"
|
|
);
|
|
}
|
|
listenerActive = false;
|
|
});
|
|
return listenerCleanup;
|
|
}),
|
|
send: vi.fn(async () => undefined),
|
|
disconnect: vi.fn(async () => {
|
|
listenerCleanup?.();
|
|
}),
|
|
};
|
|
});
|
|
|
|
return {
|
|
connect,
|
|
getListenerCleanup: () => listenerCleanup,
|
|
};
|
|
});
|
|
|
|
vi.mock("./tauri", () => ({
|
|
getTauri: () => ({
|
|
websocket: {
|
|
connect: tauriMock.connect,
|
|
},
|
|
}),
|
|
}));
|
|
|
|
describe("tauri-daemon-transport", () => {
|
|
beforeEach(() => {
|
|
tauriMock.connect.mockClear();
|
|
});
|
|
|
|
it("does not unregister the websocket listener twice during close", async () => {
|
|
const mod = await import("./tauri-daemon-transport");
|
|
const transportFactory = mod.createTauriWebSocketTransportFactory();
|
|
expect(transportFactory).not.toBeNull();
|
|
|
|
const transport = transportFactory!({ url: "ws://localhost:6767/ws" });
|
|
await Promise.resolve();
|
|
|
|
expect(() => transport.close()).not.toThrow();
|
|
expect(tauriMock.getListenerCleanup()).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|