import { parseMessage } from "@/websocket/messaging/parseMessage"; import { WS_INBOUND_EVENTS } from "@/websocket/protocols"; describe("parseMessage", () => { it("should return empty set for non-object messages", () => { const result1 = parseMessage(null); const result2 = parseMessage("string"); const result3 = parseMessage(123); expect(result1.calendarsToRefresh).toEqual(new Set()); expect(result2.calendarsToRefresh).toEqual(new Set()); expect(result3.calendarsToRefresh).toEqual(new Set()); }); it("should handle registered event", () => { const message = { [WS_INBOUND_EVENTS.CLIENT_REGISTERED]: [ "/calendars/cal1/entry1", "/calendars/cal2/entry2", ], }; const result = parseMessage(message); expect(result.calendarsToRefresh).toContain("/calendars/cal1/entry1"); expect(result.calendarsToRefresh).toContain("/calendars/cal2/entry2"); expect(result.calendarsToRefresh.size).toBe(2); }); it("should handle unregistered event", () => { const message = { [WS_INBOUND_EVENTS.CLIENT_UNREGISTERED]: ["/calendars/cal1/entry1"], }; const result = parseMessage(message); expect(result.calendarsToHide).toContain("/calendars/cal1/entry1"); }); it("should handle calendar path updates", () => { const message = { "/calendars/cal1/entry1": { updated: true }, }; const result = parseMessage(message); expect(result.calendarsToRefresh).toContain("/calendars/cal1/entry1"); expect(result.calendarsToRefresh.size).toBe(1); }); it("should parse multiple calendar paths", () => { const message = { "/calendars/cal1/entry1": {}, "/calendars/cal2/entry2": {}, }; const result = parseMessage(message); expect(result.calendarsToRefresh.size).toBe(2); expect(result.calendarsToRefresh).toContain("/calendars/cal1/entry1"); expect(result.calendarsToRefresh).toContain("/calendars/cal2/entry2"); }); it("should handle multiple event types in single message", () => { const message = { [WS_INBOUND_EVENTS.CLIENT_REGISTERED]: ["/calendars/cal1/entry1"], [WS_INBOUND_EVENTS.CLIENT_UNREGISTERED]: ["/calendars/cal2/entry2"], "/calendars/cal1/entry1": {}, }; const result = parseMessage(message); expect(result.calendarsToRefresh.size).toBe(1); expect(result.calendarsToRefresh).toContain("/calendars/cal1/entry1"); }); });