/** * 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'); }); }); });