summaryrefslogtreecommitdiff
path: root/tst/log_trace.test.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-12-14 22:39:18 -0800
committerElizabeth Hunt <me@liz.coffee>2025-12-14 22:39:18 -0800
commit666674327f009e9b1013218fc384f193b64c6997 (patch)
treeacebae7b425b469584eb0a5bec396899c2739501 /tst/log_trace.test.ts
parent594ce452693a71b501d3aff3f35ef3732c06c341 (diff)
downloadpengueno-666674327f009e9b1013218fc384f193b64c6997.tar.gz
pengueno-666674327f009e9b1013218fc384f193b64c6997.zip
Adds unit tests
Diffstat (limited to 'tst/log_trace.test.ts')
-rw-r--r--tst/log_trace.test.ts55
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');
+ });
+});