stock-bot/libs/logger/test/advanced.test.ts
2025-06-07 11:04:35 -04:00

102 lines
3.2 KiB
TypeScript

/**
* Advanced Logger Tests
*
* Tests for advanced logger functionality.
*/
import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
import { Logger, getLogger } from '../src';
import { loggerTestHelpers } from './setup';
describe('Advanced Logger Tests', () => {
let logger: Logger;
beforeEach(() => {
loggerTestHelpers.clearCapturedLogs();
logger = loggerTestHelpers.createTestLogger('advanced-test');
});
afterEach(() => {
loggerTestHelpers.clearCapturedLogs();
});
describe('Basic Logging', () => {
it('should create logger instances', () => {
expect(logger).toBeDefined();
expect(typeof logger.info).toBe('function');
expect(typeof logger.error).toBe('function');
expect(typeof logger.warn).toBe('function');
expect(typeof logger.debug).toBe('function');
});
it('should log simple messages', () => {
logger.info('Test message');
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(1);
expect(logs[0].msg).toBe('Test message');
expect(logs[0].level).toBe('info');
}); it('should include service name in logs', () => {
logger.info('Service test');
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(1);
expect(logs[0].service).toBe('advanced-test');
});
it('should handle multiple log levels', () => {
logger.debug('Debug level');
logger.info('Info level');
logger.warn('Warn level');
logger.error('Error level');
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(4);
const levels = logs.map(log => log.level);
expect(levels).toEqual(['debug', 'info', 'warn', 'error']);
});
});
describe('Context and Metadata', () => {
it('should include metadata in logs', () => {
const metadata = { userId: '123', action: 'test' };
logger.info('User action', metadata);
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(1);
expect(logs[0].userId).toBe('123');
expect(logs[0].action).toBe('test');
});
it('should support child loggers', () => {
const childLogger = logger.child({ requestId: 'req-456' });
childLogger.info('Child log message');
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(1);
expect(logs[0].msg).toBe('Child log message');
});
});
describe('Error Logging', () => {
it('should log errors with error metadata', () => {
const error = new Error('Test error');
logger.error('Error occurred', { error });
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(1);
expect(logs[0].level).toBe('error');
expect(logs[0].msg).toBe('Error occurred');
});
it('should handle error-like objects', () => {
const errorLike = { name: 'CustomError', message: 'Custom message' };
logger.error('Custom error', { error: errorLike });
const logs = loggerTestHelpers.getCapturedLogs();
expect(logs.length).toBe(1);
expect(logs[0].level).toBe('error');
});
});
});