LogService.test.ts
1 import { ILogService, ILogServiceSymbol, ILogSinkSymbol } from 'ipmc-interfaces'; 2 import { describe, expect, test } from 'vitest'; 3 import { Application, LogService, MemoryLogSink } from '../../src'; 4 5 describe('LogService', () => { 6 const app = new Application(); 7 app.register(LogService, ILogServiceSymbol); 8 app.register(MemoryLogSink, ILogSinkSymbol); 9 10 test('can log a info message', () => { 11 const log = app.getService<ILogService>(ILogServiceSymbol)!; 12 const sink = app.getService<MemoryLogSink>(ILogSinkSymbol)!; 13 sink.logs = []; 14 15 log.info('this is a test'); 16 17 expect(sink.logs.length).toBe(1); 18 expect(sink.logs[0].message).toBe('this is a test'); 19 expect(sink.logs[0].level).toBe('INFO'); 20 }); 21 22 test('can log a warning message', () => { 23 const log = app.getService<ILogService>(ILogServiceSymbol)!; 24 const sink = app.getService<MemoryLogSink>(ILogSinkSymbol)!; 25 sink.logs = []; 26 27 log.warn('this is a test'); 28 29 expect(sink.logs.length).toBe(1); 30 expect(sink.logs[0].message).toBe('this is a test'); 31 expect(sink.logs[0].level).toBe('WARN'); 32 }); 33 34 test('can log a error message', () => { 35 const log = app.getService<ILogService>(ILogServiceSymbol)!; 36 const sink = app.getService<MemoryLogSink>(ILogSinkSymbol)!; 37 sink.logs = []; 38 39 log.error('this is a test'); 40 41 expect(sink.logs.length).toBe(1); 42 expect(sink.logs[0].message).toBe('this is a test'); 43 expect(sink.logs[0].level).toBe('ERROR'); 44 45 const error = new Error('TestError'); 46 log.error(error); 47 48 expect(sink.logs.length).toBe(2); 49 expect(sink.logs[1].message.startsWith('Error: TestError')).toBe(true); 50 expect(sink.logs[1].level).toBe('ERROR'); 51 }); 52 });