"use strict"; const { test, describe } = require("node:test"); const assert = require("node:assert/strict"); const { createLogger, singleLine, truncate } = require("../src/logger"); describe("logger", () => { test("formats output as JSON-lines with timestamp, level and message", () => { const lines = []; const fakeStream = { write: (str) => lines.push(str), }; const logger = createLogger({ level: "debug", stream: fakeStream }); logger.info("Тестовое сообщение", { foo: "bar" }); assert.equal(lines.length, 1); const parsed = JSON.parse(lines[0]); assert.equal(parsed.level, "info"); assert.equal(parsed.msg, "Тестовое сообщение"); assert.equal(parsed.foo, "bar"); assert.ok(parsed.ts); }); test("respects threshold and suppresses lower levels", () => { const lines = []; const fakeStream = { write: (str) => lines.push(str) }; const logger = createLogger({ level: "warn", stream: fakeStream }); logger.debug("Debug msg"); logger.info("Info msg"); assert.equal(lines.length, 0); logger.warn("Warn msg"); logger.error("Error msg"); assert.equal(lines.length, 2); }); test("sanitizes password, token and auth fields", () => { const lines = []; const fakeStream = { write: (str) => lines.push(str) }; const logger = createLogger({ level: "info", stream: fakeStream }); logger.info("Вход", { password: "secretpassword", sessionToken: "12345678abcdef", cookieHeader: "kadr_session=xyz", }); const parsed = JSON.parse(lines[0]); assert.equal(parsed.password, "[REDACTED]"); assert.equal(parsed.sessionToken, "[REDACTED]"); assert.equal(parsed.cookieHeader, "[REDACTED]"); }); test("singleLine and truncate helpers work properly", () => { assert.equal(singleLine(" hello \n\r\t world "), "hello world"); assert.equal(truncate("short", 10), "short"); assert.equal(truncate("123456789012345", 10), "123456789…"); }); });