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 });