54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
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:<script>alert("x")</script>'`);
|
|
expect(escaped).toContain("<script>alert("x")</script>'");
|
|
expect(escaped).toContain("AA:BB:");
|
|
|
|
const fallback = renderControlUi(null);
|
|
expect(fallback).toContain("not set");
|
|
});
|
|
});
|
|
|