UNPKG

maildev

Version:

SMTP Server and Web Interface for reading and testing emails during development

184 lines 7.42 kB
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; import { Logger, createLogger } from '../../utils/logger.js'; describe('Logger', () => { let consoleSpy; beforeEach(() => { consoleSpy = { log: vi.spyOn(console, 'log').mockImplementation(() => { }), warn: vi.spyOn(console, 'warn').mockImplementation(() => { }), error: vi.spyOn(console, 'error').mockImplementation(() => { }), }; }); afterEach(() => { vi.restoreAllMocks(); }); describe('constructor', () => { it('should create logger with default options', () => { const logger = new Logger(); logger.info('test'); expect(consoleSpy.log).toHaveBeenCalled(); }); it('should respect verbose option', () => { const logger = new Logger({ verbose: true }); logger.debug('test debug'); expect(consoleSpy.log).toHaveBeenCalled(); }); it('should respect silent option', () => { const logger = new Logger({ silent: true }); logger.info('test'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('configure', () => { it('should update verbose setting', () => { const logger = new Logger({ verbose: false }); logger.debug('before'); expect(consoleSpy.log).not.toHaveBeenCalled(); logger.configure({ verbose: true }); logger.debug('after'); expect(consoleSpy.log).toHaveBeenCalled(); }); it('should update silent setting', () => { const logger = new Logger({ silent: false }); logger.info('before'); expect(consoleSpy.log).toHaveBeenCalledTimes(1); logger.configure({ silent: true }); logger.info('after'); expect(consoleSpy.log).toHaveBeenCalledTimes(1); // Still 1, not called again }); }); describe('debug', () => { it('should not log when not verbose', () => { const logger = new Logger({ verbose: false }); logger.debug('test'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); it('should log when verbose', () => { const logger = new Logger({ verbose: true }); logger.debug('test message'); expect(consoleSpy.log).toHaveBeenCalled(); }); it('should not log when silent (even if verbose)', () => { const logger = new Logger({ verbose: true, silent: true }); logger.debug('test'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('info', () => { it('should log message', () => { const logger = new Logger(); logger.info('test info'); expect(consoleSpy.log).toHaveBeenCalledWith('test info'); }); it('should log with additional arguments', () => { const logger = new Logger(); logger.info('test', { foo: 'bar' }); expect(consoleSpy.log).toHaveBeenCalledWith('test', { foo: 'bar' }); }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.info('test'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('success', () => { it('should log message', () => { const logger = new Logger(); logger.success('operation completed'); expect(consoleSpy.log).toHaveBeenCalled(); }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.success('test'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('warn', () => { it('should log warning', () => { const logger = new Logger(); logger.warn('test warning'); expect(consoleSpy.warn).toHaveBeenCalled(); }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.warn('test'); expect(consoleSpy.warn).not.toHaveBeenCalled(); }); }); describe('error', () => { it('should log error', () => { const logger = new Logger(); logger.error('test error'); expect(consoleSpy.error).toHaveBeenCalled(); }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.error('test'); expect(consoleSpy.error).not.toHaveBeenCalled(); }); }); describe('banner', () => { it('should log multiple lines', () => { const logger = new Logger(); logger.banner(['Line 1', 'Line 2', 'Line 3']); // 2 empty lines + 3 content lines = 5 calls expect(consoleSpy.log).toHaveBeenCalledTimes(5); }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.banner(['Line 1', 'Line 2']); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('keyValue', () => { it('should log key-value pair', () => { const logger = new Logger(); logger.keyValue('Port', '1025'); expect(consoleSpy.log).toHaveBeenCalled(); }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.keyValue('Port', '1025'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('email', () => { it('should log email information', () => { const logger = new Logger(); logger.email('sender@test.com', 'recipient@test.com', 'Test Subject'); expect(consoleSpy.log).toHaveBeenCalledTimes(2); // One for main line, one for subject }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.email('sender@test.com', 'recipient@test.com', 'Test Subject'); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); describe('emailContents', () => { it('should log JSON email contents', () => { const logger = new Logger(); const email = { subject: 'Test', from: 'test@test.com' }; logger.emailContents(email); expect(consoleSpy.log).toHaveBeenCalledTimes(2); // Label + JSON }); it('should not log when silent', () => { const logger = new Logger({ silent: true }); logger.emailContents({ subject: 'Test' }); expect(consoleSpy.log).not.toHaveBeenCalled(); }); }); }); describe('createLogger', () => { it('should create a Logger instance', () => { const logger = createLogger(); expect(logger).toBeInstanceOf(Logger); }); it('should pass options to Logger', () => { const consoleSpy = vi.spyOn(console, 'log').mockImplementation(() => { }); const logger = createLogger({ verbose: true }); logger.debug('test'); expect(consoleSpy).toHaveBeenCalled(); vi.restoreAllMocks(); }); }); //# sourceMappingURL=logger.test.js.map