Files
GMW/tests/logger.test.ts
T

66 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-05-19 02:16:50 +07:00
import { describe, expect, it } from "vitest";
import { formatLogMetadataForTest, serializeLogValueForTest } from "../src/logger";
class TestError extends Error {
public code = "TEST_CODE";
public statusCode = 418;
constructor() {
super("test failure");
this.name = "TestError";
}
}
describe("logger serialization", () => {
it("serializes Error values with stable fields", () => {
const serialized = serializeLogValueForTest(new TestError());
expect(serialized).toMatchObject({
name: "TestError",
message: "test failure",
code: "TEST_CODE",
statusCode: 418,
});
expect(serialized).toHaveProperty("stack");
});
it("serializes nested error metadata keys", () => {
const error = new TestError();
expect(formatLogMetadataForTest({ error, err: error, reason: error })).toMatchObject({
error: {
name: "TestError",
message: "test failure",
code: "TEST_CODE",
statusCode: 418,
},
err: {
name: "TestError",
message: "test failure",
code: "TEST_CODE",
statusCode: 418,
},
reason: {
name: "TestError",
message: "test failure",
code: "TEST_CODE",
statusCode: 418,
},
});
});
it("preserves plain metadata", () => {
expect(
formatLogMetadataForTest({ context: "bot", signal: "SIGINT", count: 2 }),
).toEqual({ context: "bot", signal: "SIGINT", count: 2 });
});
2026-05-19 02:43:52 +07:00
it("serializes dates and regexps without dropping values", () => {
const createdAt = new Date("2026-05-19T00:00:00.000Z");
expect(formatLogMetadataForTest({ createdAt, pattern: /voice/i })).toEqual({
createdAt: "2026-05-19T00:00:00.000Z",
pattern: "/voice/i",
});
});
2026-05-19 02:16:50 +07:00
});