102 lines
3.2 KiB
TypeScript
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');
|
|
});
|
|
});
|
|
});
|