import { describe, it, expect, vi, beforeEach, afterEach } from 'bun:test'; import ConsoleAppender from '../src/appenders/ConsoleAppender'; import { LoggingLevel } from '../src/level/LoggingLevel'; describe('ConsoleAppender', () => { let consoleAppender: ConsoleAppender; let mockConsoleLog: any; let mockConsoleError: any; beforeEach(() => { consoleAppender = new ConsoleAppender(); // Mock console methods mockConsoleLog = vi.spyOn(console, 'log').mockImplementation(() => {}); mockConsoleError = vi.spyOn(console, 'error').mockImplementation(() => {}); }); afterEach(() => { mockConsoleLog.mockRestore(); mockConsoleError.mockRestore(); }); it('should log info messages to console.log', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Info', 'test-category', 'info message'); expect(mockConsoleLog).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [Info] [test-category] info message'); expect(mockConsoleError).not.toHaveBeenCalled(); }); it('should log debug messages to console.log', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Debug', 'test-category', 'debug message'); expect(mockConsoleLog).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [Debug] [test-category] debug message'); expect(mockConsoleError).not.toHaveBeenCalled(); }); it('should log trace messages to console.log', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Trace', 'test-category', 'trace message'); expect(mockConsoleLog).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [Trace] [test-category] trace message'); expect(mockConsoleError).not.toHaveBeenCalled(); }); it('should log silly messages to console.log', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Silly', 'test-category', 'silly message'); expect(mockConsoleLog).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [Silly] [test-category] silly message'); expect(mockConsoleError).not.toHaveBeenCalled(); }); it('should log warn messages to console.error', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Warn', 'test-category', 'warn message'); expect(mockConsoleError).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [Warn] [test-category] warn message'); expect(mockConsoleLog).not.toHaveBeenCalled(); }); it('should log error messages to console.error', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Error', 'test-category', 'error message'); expect(mockConsoleError).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [Error] [test-category] error message'); expect(mockConsoleLog).not.toHaveBeenCalled(); }); it('should log all messages to console.log', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'All', 'test-category', 'all message'); expect(mockConsoleLog).toHaveBeenCalledWith('2023-01-01T00:00:00.000Z [All] [test-category] all message'); expect(mockConsoleError).not.toHaveBeenCalled(); }); it('should not log off messages', () => { consoleAppender.log('2023-01-01T00:00:00.000Z', 'Off', 'test-category', 'off message'); expect(mockConsoleLog).not.toHaveBeenCalled(); expect(mockConsoleError).not.toHaveBeenCalled(); }); });