Spaces:
Sleeping
Sleeping
| 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/channels/whatsapp"}', | |
| 1: "connected", | |
| _meta: { | |
| name: '{"subsystem":"gateway/channels/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/channels/whatsapp"); | |
| expect(parsed?.message).toBe('{"subsystem":"gateway/channels/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(); | |
| }); | |
| }); | |