import { describe, expect, test } from "bun:test"; import { isSseTopic, sse } from "@/lib/realtime/sse"; describe("leaderboard SSE contract", () => { test("registers the public leaderboards topic", () => { expect(isSseTopic("leaderboards")).toBeTrue(); expect(sse.leaderboards.adminOnly).toBeFalse(); }); test("accepts only the minimal XP envelope", () => { expect(sse.leaderboards.parseRedisMessage( JSON.stringify({ event: "xp", data: {} }), )).toEqual({ event: "xp", data: {} }); expect(sse.leaderboards.parseRedisMessage( JSON.stringify({ event: "xp", data: { userId: "1" } }), )).toBeNull(); expect(sse.leaderboards.parseRedisMessage( JSON.stringify({ event: "xp", data: {}, extra: true }), )).toBeNull(); }); test("validates VC channel IDs and rejects malformed messages", () => { expect(sse.leaderboards.parseRedisMessage( JSON.stringify({ event: "vc", data: { channelId: "1234567890" } }), )).toEqual({ event: "vc", data: { channelId: "1234567890" }, }); expect(sse.leaderboards.parseRedisMessage( JSON.stringify({ event: "vc", data: { channelId: "voice-one" } }), )).toBeNull(); expect(sse.leaderboards.parseRedisMessage("{")).toBeNull(); expect(sse.leaderboards.parseRedisMessage( JSON.stringify({ event: "unknown", data: {} }), )).toBeNull(); }); });