/ packages / core / tests / Services / LogService.test.ts
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  });