import { Logger } from "../src/observability/Logger"; import { renderControlUi } from "../src/ui/template"; describe("Logger", () => { afterEach(() => { jest.restoreAllMocks(); }); it("suppresses lower-priority log lines", () => { const logSpy = jest.spyOn(console, "log").mockImplementation(() => undefined); const logger = new Logger("info", "gate-test"); logger.debug("not emitted", { key: "value" }); expect(logSpy).not.toHaveBeenCalled(); }); it("routes warn and error levels to the correct console methods", () => { const warnSpy = jest.spyOn(console, "warn").mockImplementation(() => undefined); const errorSpy = jest.spyOn(console, "error").mockImplementation(() => undefined); const logSpy = jest.spyOn(console, "log").mockImplementation(() => undefined); const logger = new Logger("debug", "gate-test"); logger.info("info-message", { context: 1 }); logger.warn("warn-message", { context: 2 }); logger.error("error-message", { context: 3 }); expect(logSpy).toHaveBeenCalledTimes(1); expect(warnSpy).toHaveBeenCalledTimes(1); expect(errorSpy).toHaveBeenCalledTimes(1); const warnPayload = JSON.parse(String(warnSpy.mock.calls[0]?.[0] ?? "{}")) as { level?: string; component?: string; context?: number; }; expect(warnPayload.level).toBe("warn"); expect(warnPayload.component).toBe("gate-test"); expect(warnPayload.context).toBe(2); }); }); describe("renderControlUi", () => { it("escapes unsafe MAC input and renders fallback when default MAC is missing", () => { const escaped = renderControlUi(`AA:BB:'`); expect(escaped).toContain("<script>alert("x")</script>'"); expect(escaped).toContain("AA:BB:"); const fallback = renderControlUi(null); expect(fallback).toContain("not set"); }); });