59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import {
|
|
startRealtimeRefresh,
|
|
type RealtimeRefreshHandlers,
|
|
} from "@/lib/realtime/realtime-refresh";
|
|
|
|
function waitForRefresh() {
|
|
return new Promise((resolve) => setTimeout(resolve, 5));
|
|
}
|
|
|
|
describe("profile realtime refresh", () => {
|
|
test("refreshes for both XP and voice events", async () => {
|
|
let handlers: RealtimeRefreshHandlers | undefined;
|
|
let refreshes = 0;
|
|
const clean = startRealtimeRefresh({
|
|
filter: { kind: "profile" },
|
|
debounceMs: 0,
|
|
refresh: () => { refreshes += 1; },
|
|
subscribe: (nextHandlers) => {
|
|
handlers = nextHandlers;
|
|
return { clean() {} };
|
|
},
|
|
});
|
|
|
|
handlers?.onXp();
|
|
await waitForRefresh();
|
|
handlers?.onVc({ channelId: "1234567890" });
|
|
await waitForRefresh();
|
|
|
|
expect(refreshes).toBe(2);
|
|
clean();
|
|
});
|
|
|
|
test("debounces profile event bursts and refreshes after reconnect", async () => {
|
|
let handlers: RealtimeRefreshHandlers | undefined;
|
|
let refreshes = 0;
|
|
const clean = startRealtimeRefresh({
|
|
filter: { kind: "profile" },
|
|
debounceMs: 1,
|
|
refresh: () => { refreshes += 1; },
|
|
subscribe: (nextHandlers) => {
|
|
handlers = nextHandlers;
|
|
return { clean() {} };
|
|
},
|
|
});
|
|
|
|
handlers?.onXp();
|
|
handlers?.onVc({ channelId: "1234567890" });
|
|
await waitForRefresh();
|
|
expect(refreshes).toBe(1);
|
|
|
|
handlers?.onOpen();
|
|
handlers?.onOpen();
|
|
await waitForRefresh();
|
|
expect(refreshes).toBe(2);
|
|
clean();
|
|
});
|
|
});
|