import { describe, test, it, expect } from 'vitest'; import { ILogOutput, TLogArgs, TLogLevel, TMessageContext } from './interfaces/logger.js'; import Logger, { LOGGER_LEVELS } from './Logger.js'; import { getDefaultTag } from './test/lib.js'; describe('log levels', () => { test('logs none with none', () => { expect(Logger.shouldLogLevel(LOGGER_LEVELS['none'], 'debug')).toBe(false); expect(Logger.shouldLogLevel(LOGGER_LEVELS['none'], 'info')).toBe(false); }); test('logs log with log', () => { expect(Logger.shouldLogLevel(LOGGER_LEVELS['log'], 'log')).toBe(true); }); test('does not log debug with log', () => { expect(Logger.shouldLogLevel(LOGGER_LEVELS['log'], 'debug')).toBe(false); }); }); describe('logger with subscriber', () => { test.skip('subscriber receives topic', async () => { const logger = new Logger({ level: 'debug' }); // FIXME const step = { '@type': 'Step', description: 'step 1', action: undefined, sourceFeature: { path: 'path', type: 'foo', base: 'foo', name: 'foo', content: 'foo' }, in: 'in', seq: 1, }; const subscriberPromise = new Promise((resolve) => { const subscriber: ILogOutput = { out(level: TLogLevel, args: TLogArgs, ctx?: TMessageContext) { expect(ctx).toBeDefined(); resolve(); }, }; logger.addSubscriber(subscriber); }); await subscriberPromise; // FIXME // Example updated logger call (if test were enabled): // const context: TMessageContext = { incident: EExecutionMessageType.ACTION, tag: getDefaultTag(0), incidentDetails: { result: { step } } }; // logger.log('test', context); }); }); describe('logger with output', () => { it.skip('output gets current tag', async () => { const outputPromise = new Promise((resolve) => { const output: ILogOutput = { out(level: string, args: TLogArgs, ctx?: TMessageContext) { // FIXME // expect(ctx?.tag?.sequence).toBe(0); resolve(); }, }; const dlogger = new Logger({ output, tag: getDefaultTag(0) }); dlogger.log('test'); }); await outputPromise; }); });