import { jest } from "@jest/globals"; import { RootCfg } from "./RootCfg"; import { Output } from "./Output"; import { MessageEnvelope, CommonConfig } from "./types"; const consoleLogLevels = ["error", "warn", "info", "log", "debug", "trace"]; class TestOutput extends Output { static writer = jest.fn(); writeLog(env: MessageEnvelope): Promise { TestOutput.writer(`${env.args}`); // console[this.getOutputLevel(env.level)](...env.args); return Promise.resolve(); } } afterEach(() => { TestOutput.writer.mockReset(); // TestOutput.outputDebugVarPatterns = []; // TestOutput.loggerDebugVarPatterns = []; }); // test.each([ // ['error', ['error']], // ['warn', ['error', 'warn']], // ['info', ['error', 'warn', 'info']], // ['log', ['error', 'warn', 'info', 'log']], // ['debug', ['error', 'warn', 'info', 'log', 'debug']], // ['trace', ['error', 'warn', 'info', 'log', 'debug', 'trace']], // ])('when root logLevel is %s and no logger logLevel is set the following log levels should write: %o', async (level, expected) => { // const rootCfg = new RootCfg({ // logLevels: consoleLogLevels, // logLevel: level, // }) // const output = new TestOutput("test", {}, rootCfg); // let i = 1; // for (const consoleLevel of consoleLogLevels) { // const result = output.isLogLevelEnabled(consoleLevel); // if (expected.indexOf(consoleLevel) === -1) { // expect(result).toBe(false); // } else { // expect(result).toBe(true); // } // } // }); // test.each([ // ['error', ['error']], // ['warn', ['error', 'warn']], // ['info', ['error', 'warn', 'info']], // ['log', ['error', 'warn', 'info', 'log']], // ['debug', ['error', 'warn', 'info', 'log', 'debug']], // ['trace', ['error', 'warn', 'info', 'log', 'debug', 'trace']], // ])('when output logLevel is %s the following log levels should write: %o', async (level, expected) => { // const rootCfg = new RootCfg({ // logLevels: consoleLogLevels, // logLevel: 'error', // }) // const output = new TestOutput("test", { // logLevel: level // }, rootCfg); // let i = 1; // for (const consoleLevel of consoleLogLevels) { // const result = output.isLogLevelEnabled(consoleLevel); // if (expected.indexOf(consoleLevel) === -1) { // expect(result).toBe(false); // } else { // expect(result).toBe(true); // } // } // }); // test.each([ // ['error', ['error']], // ['warn', ['error', 'warn']], // ['info', ['error', 'warn', 'info']], // ['log', ['error', 'warn', 'info', 'log']], // ['debug', ['error', 'warn', 'info', 'log', 'debug']], // ['trace', ['error', 'warn', 'info', 'log', 'debug', 'trace']], // ])('when logger logLevel is %s the following log levels should write: %o', async (level, expected) => { // const rootCfg = new RootCfg({ // logLevels: consoleLogLevels, // logLevel: 'error', // }) // const output = new TestOutput("test", {}, rootCfg); // let i = 1; // for (const consoleLevel of consoleLogLevels) { // const result = output.isLogLevelEnabled(consoleLevel, level); // if (expected.indexOf(consoleLevel) === -1) { // expect(result).toBe(false); // } else { // expect(result).toBe(true); // } // } // }); test('getOutputLevel returns global level when no outputLevelMap specified', () => { const rootCfg = new RootCfg({ logLevels: consoleLogLevels, }) const output = new TestOutput("test", {}, rootCfg); for (const level of consoleLogLevels) { expect(output.getOutputLevel(level)).toEqual(level); } }); test('getOutputLevel returns outputLevel when a map is specified', () => { const rootCfg = new RootCfg({ logLevels: consoleLogLevels, }) const output = new TestOutput("test", { outputLevelMap: { log: 'info' } }, rootCfg); expect(output.getOutputLevel('log')).toEqual('info'); expect(output.getOutputLevel('warn')).toEqual('warn'); expect(output.getOutputLevel('info')).toEqual('info'); expect(output.getOutputLevel('debug')).toEqual('debug'); }); // test('defaultOutputFormatter just returns args', () => { // const result = Output.defaultOutputFormatter({ // logger: 'somelogger', // ctx: {}, // level: 'info', // args: ['hi', 'there'], // }, {}); // expect(result).toMatchInlineSnapshot(` // Array [ // "hi", // "there", // ] // `); // })