58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
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<TranslateService>;
|
|
|
|
function createService(): LanguageService {
|
|
translateSpy = jasmine.createSpyObj<TranslateService>('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');
|
|
});
|
|
});
|