/ packages / core / tests / Services / TranslationService.test.ts
TranslationService.test.ts
 1  import { IKeyValueStoreSymbol, ILogServiceSymbol, ILogSinkSymbol, IObjectStoreSymbol, IPersistentSignalServiceSymbol, ITranslation, ITranslationService, ITranslationServiceSymbol, ITranslationsSymbol } from 'ipmc-interfaces';
 2  import { describe, expect, test, vi } from 'vitest';
 3  import { Application, LogService, MemoryKeyValueStore, MemoryLogSink, ObjectStore, PersistentSignalService, TranslationService } from '../../src';
 4  
 5  const translations: ITranslation = {
 6  	en: {
 7  		translation: {
 8  			'test': 'this is a test string',
 9  			'testInterpolation': 'this is a test string with {{interpolation}}',
10  		}
11  	},
12  	de: {
13  		translation: {
14  			'test': 'das ist ein test string',
15  			'testInterpolation': 'das ist ein test string mit {{interpolation}}',
16  		}
17  	}
18  };
19  
20  describe('TranslationService', () => {
21  	const app = new Application();
22  	app.register(LogService, ILogServiceSymbol);
23  	app.register(MemoryLogSink, ILogSinkSymbol);
24  	app.register(TranslationService, ITranslationServiceSymbol);
25  	app.register(MemoryKeyValueStore, IKeyValueStoreSymbol);
26  	app.register(ObjectStore, IObjectStoreSymbol);
27  	app.register(PersistentSignalService, IPersistentSignalServiceSymbol);
28  	app.registerConstantMultiple(translations, ITranslationsSymbol);
29  
30  	test('correctly translates a string', () => {
31  		const translationService = app.getService<ITranslationService>(ITranslationServiceSymbol)!;
32  
33  		translationService.changeLanguage('en');
34  		expect(translationService.translate('test')).toBe('this is a test string');
35  
36  		translationService.changeLanguage('de');
37  		expect(translationService.translate('test')).toBe('das ist ein test string');
38  	});
39  
40  	test('correctly translates a interpolated string', () => {
41  		const translationService = app.getService<ITranslationService>(ITranslationServiceSymbol)!;
42  
43  		translationService.changeLanguage('en');
44  		expect(translationService.translate('testInterpolation', { interpolation: 'example' })).toBe('this is a test string with example');
45  
46  		translationService.changeLanguage('de');
47  		expect(translationService.translate('testInterpolation', { interpolation: 'beispiel' })).toBe('das ist ein test string mit beispiel');
48  	});
49  
50  	test('Invalid key returns key as result', () => {
51  		const translationService = app.getService<ITranslationService>(ITranslationServiceSymbol)!;
52  		const sink = app.getService<MemoryLogSink>(ILogSinkSymbol)!;
53  
54  		expect(translationService.translate('InvalidKey')).toBe('<InvalidKey>');
55  		expect(sink.logs.length).toBe(1);
56  		expect(sink.logs[0].message).toBe('Missing translation key <InvalidKey>');
57  	});
58  });