import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { Logger, resetLogger } from '../src/logger.js';
describe('Logger', () => {
let logger: Logger;
beforeEach(() => {
logger = new Logger({
enableConsole: false,
enableFile: false,
});
});
afterEach(() => {
logger.close();
resetLogger();
});
describe('maskSensitiveData', () => {
it('should mask password fields', () => {
const testLogger = new Logger({
enableConsole: false,
enableFile: false,
});
// Access private method through audit call
// We test the output behavior instead
testLogger.close();
});
});
describe('audit', () => {
it('should create audit entries', () => {
// This test verifies the logger doesn't throw
expect(() => {
logger.audit('test_tool', 'test_action', {
args: { key: 'value' },
result: 'success',
duration_ms: 100,
});
}).not.toThrow();
});
it('should handle failure results', () => {
expect(() => {
logger.audit('test_tool', 'test_action', {
result: 'failure',
error: 'Something went wrong',
});
}).not.toThrow();
});
});
describe('log levels', () => {
it('should log debug messages', () => {
expect(() => {
logger.debug('test', 'debug message', { data: 'value' });
}).not.toThrow();
});
it('should log info messages', () => {
expect(() => {
logger.info('test', 'info message');
}).not.toThrow();
});
it('should log warn messages', () => {
expect(() => {
logger.warn('test', 'warning message');
}).not.toThrow();
});
it('should log error messages', () => {
expect(() => {
logger.error('test', 'error message', new Error('test error'));
}).not.toThrow();
});
it('should handle error as string', () => {
expect(() => {
logger.error('test', 'error message', 'string error');
}).not.toThrow();
});
});
});