diff options
| author | Elizabeth Hunt <me@liz.coffee> | 2025-12-14 22:39:18 -0800 |
|---|---|---|
| committer | Elizabeth Hunt <me@liz.coffee> | 2025-12-14 22:39:18 -0800 |
| commit | 666674327f009e9b1013218fc384f193b64c6997 (patch) | |
| tree | acebae7b425b469584eb0a5bec396899c2739501 /tst/log_trace.test.ts | |
| parent | 594ce452693a71b501d3aff3f35ef3732c06c341 (diff) | |
| download | pengueno-666674327f009e9b1013218fc384f193b64c6997.tar.gz pengueno-666674327f009e9b1013218fc384f193b64c6997.zip | |
Adds unit tests
Diffstat (limited to 'tst/log_trace.test.ts')
| -rw-r--r-- | tst/log_trace.test.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tst/log_trace.test.ts b/tst/log_trace.test.ts new file mode 100644 index 0000000..29234f6 --- /dev/null +++ b/tst/log_trace.test.ts @@ -0,0 +1,55 @@ +import { LogLevel, LogTrace, type ILogger } from '../lib/index'; + +describe('trace/log/trace (LogTrace)', () => { + beforeEach(() => { + jest.useFakeTimers(); + jest.setSystemTime(new Date('2020-01-01T00:00:00.000Z')); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + test('uses defaultLevel when no explicit level', () => { + const logger: ILogger = { log: jest.fn() }; + const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.WARN]); + const trace = new LogTrace(logger, [], LogLevel.WARN, allowed); + + trace.trace('hello'); + expect(logger.log).toHaveBeenCalledTimes(1); + + const [level, ...rest] = (logger.log as jest.Mock).mock.calls[0]; + expect(level).toBe(LogLevel.WARN); + expect(rest.join(' ')).toContain('hello'); + }); + + test('picks highest log level across traces', () => { + const logger: ILogger = { log: jest.fn() }; + const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.INFO, LogLevel.WARN, LogLevel.ERROR]); + const trace = new LogTrace(logger, [], LogLevel.INFO, allowed); + + trace.traceScope(LogLevel.INFO).traceScope(LogLevel.ERROR).trace('boom'); + const [level] = (logger.log as jest.Mock).mock.calls[0]; + expect(level).toBe(LogLevel.ERROR); + }); + + test('filters disallowed levels', () => { + const logger: ILogger = { log: jest.fn() }; + const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.INFO]); + const trace = new LogTrace(logger, [], LogLevel.INFO, allowed); + + trace.traceScope(LogLevel.DEBUG).trace('nope'); + expect(logger.log).not.toHaveBeenCalled(); + }); + + test('formats Error objects in trace', () => { + const logger: ILogger = { log: jest.fn() }; + const allowed = () => new Set([LogLevel.UNKNOWN, LogLevel.ERROR]); + const trace = new LogTrace(logger, [], LogLevel.INFO, allowed); + + trace.traceScope(LogLevel.ERROR).trace(new Error('boom')); + const [_level, msg] = (logger.log as jest.Mock).mock.calls[0]; + expect(msg).toContain('TracedException.Name = Error'); + expect(msg).toContain('TracedException.Message = boom'); + }); +}); |
