import { TestBed } from '@angular/core/testing'; import { TranslateService } from '@ngx-translate/core'; import { LanguageService } from './language.service'; import { LocalStoreConstants } from '../constants/LocalStoreConstants'; describe('LanguageService', () => { let translateSpy: jasmine.SpyObj; function createService(): LanguageService { translateSpy = jasmine.createSpyObj('TranslateService', ['use']); TestBed.configureTestingModule({ providers: [{ provide: TranslateService, useValue: translateSpy }], }); return TestBed.inject(LanguageService); } const documentLanguage = document.documentElement.lang; beforeEach(() => { localStorage.clear(); }); afterEach(() => { localStorage.clear(); document.documentElement.lang = documentLanguage; }); it('uses the stored language as the initial value', () => { localStorage.setItem(LocalStoreConstants.LANGUAGE_KEY, 'de'); const service = createService(); expect(service.lang()).toBe('de'); expect(translateSpy.use).toHaveBeenCalledWith('de'); }); it('use() updates the signal, the translate service and localStorage', () => { localStorage.setItem(LocalStoreConstants.LANGUAGE_KEY, 'en'); const service = createService(); service.use('de'); expect(service.lang()).toBe('de'); expect(translateSpy.use).toHaveBeenCalledWith('de'); expect(localStorage.getItem(LocalStoreConstants.LANGUAGE_KEY)).toBe('de'); }); it('marks the document with the active language so screen readers switch voice', () => { localStorage.setItem(LocalStoreConstants.LANGUAGE_KEY, 'en'); const service = createService(); expect(document.documentElement.lang).toBe('en'); service.use('de'); expect(document.documentElement.lang).toBe('de'); }); });