Spaces:
Running
Running
| import { EventEmitter } from "node:events"; | |
| import { afterEach, describe, expect, it, vi } from "vitest"; | |
| vi.mock("../globals.js", () => ({ | |
| logVerbose: vi.fn(), | |
| })); | |
| import { logVerbose } from "../globals.js"; | |
| import { attachDiscordGatewayLogging } from "./gateway-logging.js"; | |
| const makeRuntime = () => ({ | |
| log: vi.fn(), | |
| }); | |
| describe("attachDiscordGatewayLogging", () => { | |
| afterEach(() => { | |
| vi.clearAllMocks(); | |
| }); | |
| it("logs debug events and promotes reconnect/close to info", () => { | |
| const emitter = new EventEmitter(); | |
| const runtime = makeRuntime(); | |
| const cleanup = attachDiscordGatewayLogging({ | |
| emitter, | |
| runtime, | |
| }); | |
| emitter.emit("debug", "WebSocket connection opened"); | |
| emitter.emit("debug", "WebSocket connection closed with code 1001"); | |
| emitter.emit("debug", "Reconnecting with backoff: 1000ms after code 1001"); | |
| const logVerboseMock = vi.mocked(logVerbose); | |
| expect(logVerboseMock).toHaveBeenCalledTimes(3); | |
| expect(runtime.log).toHaveBeenCalledTimes(2); | |
| expect(runtime.log).toHaveBeenNthCalledWith( | |
| 1, | |
| "discord gateway: WebSocket connection closed with code 1001", | |
| ); | |
| expect(runtime.log).toHaveBeenNthCalledWith( | |
| 2, | |
| "discord gateway: Reconnecting with backoff: 1000ms after code 1001", | |
| ); | |
| cleanup(); | |
| }); | |
| it("logs warnings and metrics only to verbose", () => { | |
| const emitter = new EventEmitter(); | |
| const runtime = makeRuntime(); | |
| const cleanup = attachDiscordGatewayLogging({ | |
| emitter, | |
| runtime, | |
| }); | |
| emitter.emit("warning", "High latency detected: 1200ms"); | |
| emitter.emit("metrics", { latency: 42, errors: 1 }); | |
| const logVerboseMock = vi.mocked(logVerbose); | |
| expect(logVerboseMock).toHaveBeenCalledTimes(2); | |
| expect(runtime.log).not.toHaveBeenCalled(); | |
| cleanup(); | |
| }); | |
| it("removes listeners on cleanup", () => { | |
| const emitter = new EventEmitter(); | |
| const runtime = makeRuntime(); | |
| const cleanup = attachDiscordGatewayLogging({ | |
| emitter, | |
| runtime, | |
| }); | |
| cleanup(); | |
| const logVerboseMock = vi.mocked(logVerbose); | |
| logVerboseMock.mockClear(); | |
| emitter.emit("debug", "WebSocket connection closed with code 1001"); | |
| emitter.emit("warning", "High latency detected: 1200ms"); | |
| emitter.emit("metrics", { latency: 42 }); | |
| expect(logVerboseMock).not.toHaveBeenCalled(); | |
| expect(runtime.log).not.toHaveBeenCalled(); | |
| }); | |
| }); | |