33 lines
952 B
TypeScript
33 lines
952 B
TypeScript
|
|
import { describe, expect, it, vi } from "vitest";
|
||
|
|
import { createBroadcaster } from "../../src/moderation/broadcaster";
|
||
|
|
|
||
|
|
function client() {
|
||
|
|
return { readyState: 1, send: vi.fn() };
|
||
|
|
}
|
||
|
|
|
||
|
|
describe("createBroadcaster", () => {
|
||
|
|
it("sends JSON events to open clients", () => {
|
||
|
|
const ws = client();
|
||
|
|
const broadcaster = createBroadcaster();
|
||
|
|
|
||
|
|
broadcaster.addClient(ws as any);
|
||
|
|
broadcaster.messageAnalyzed({ id: "m1", ai_status: "clean" } as any);
|
||
|
|
|
||
|
|
expect(ws.send).toHaveBeenCalledTimes(1);
|
||
|
|
expect(JSON.parse(ws.send.mock.calls[0][0])).toMatchObject({
|
||
|
|
type: "message_analyzed",
|
||
|
|
data: { id: "m1", ai_status: "clean" },
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|
||
|
|
it("skips closed clients", () => {
|
||
|
|
const ws = { readyState: 3, send: vi.fn() };
|
||
|
|
const broadcaster = createBroadcaster();
|
||
|
|
|
||
|
|
broadcaster.addClient(ws as any);
|
||
|
|
broadcaster.messageDeleted({ id: "m1", deleted_at: 123 });
|
||
|
|
|
||
|
|
expect(ws.send).not.toHaveBeenCalled();
|
||
|
|
});
|
||
|
|
});
|