From 0a722de65c8db77defdd52f1f3d9e5099d9a1857 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 9 Jan 2026 02:54:04 +0100 Subject: [PATCH] test: cover log line parsing --- src/logging/parse-log-line.test.ts | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/logging/parse-log-line.test.ts diff --git a/src/logging/parse-log-line.test.ts b/src/logging/parse-log-line.test.ts new file mode 100644 index 000000000..09da3a554 --- /dev/null +++ b/src/logging/parse-log-line.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, it } from "vitest"; + +import { parseLogLine } from "./parse-log-line.js"; + +describe("parseLogLine", () => { + it("parses structured JSON log lines", () => { + const line = JSON.stringify({ + time: "2026-01-09T01:38:41.523Z", + 0: '{"subsystem":"gateway/providers/whatsapp"}', + 1: "connected", + _meta: { + name: '{"subsystem":"gateway/providers/whatsapp"}', + logLevelName: "INFO", + }, + }); + + const parsed = parseLogLine(line); + + expect(parsed).not.toBeNull(); + expect(parsed?.time).toBe("2026-01-09T01:38:41.523Z"); + expect(parsed?.level).toBe("info"); + expect(parsed?.subsystem).toBe("gateway/providers/whatsapp"); + expect(parsed?.message).toBe("{\"subsystem\":\"gateway/providers/whatsapp\"} connected"); + expect(parsed?.raw).toBe(line); + }); + + it("falls back to meta timestamp when top-level time is missing", () => { + const line = JSON.stringify({ + 0: "hello", + _meta: { + name: "{\"subsystem\":\"gateway\"}", + logLevelName: "WARN", + date: "2026-01-09T02:10:00.000Z", + }, + }); + + const parsed = parseLogLine(line); + + expect(parsed?.time).toBe("2026-01-09T02:10:00.000Z"); + expect(parsed?.level).toBe("warn"); + }); + + it("returns null for invalid JSON", () => { + expect(parseLogLine("not-json")).toBeNull(); + }); +});