From 92f5c6f427677ead300ede8e6cf8b5d748aa4c50 Mon Sep 17 00:00:00 2001 From: Alexandre Vryghem Date: Sun, 26 Feb 2023 21:00:03 +0100 Subject: [PATCH] Do not use disabled or non-existing languages from language cookie --- src/app/core/locale/locale.service.spec.ts | 34 +++++++++++++--------- src/app/core/locale/locale.service.ts | 4 +-- src/environments/environment.test.ts | 4 +++ 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/app/core/locale/locale.service.spec.ts b/src/app/core/locale/locale.service.spec.ts index c7c59802fd..e6a4de0327 100644 --- a/src/app/core/locale/locale.service.spec.ts +++ b/src/app/core/locale/locale.service.spec.ts @@ -62,25 +62,33 @@ describe('LocaleService test suite', () => { }); describe('getCurrentLanguageCode', () => { - it('should return language saved on cookie', () => { + beforeEach(() => { + spyOn(translateService, 'getLangs').and.returnValue(langList); + }); + + it('should return the language saved on cookie if it\'s a valid & active language', () => { spyOnGet.and.returnValue('de'); expect(service.getCurrentLanguageCode()).toBe('de'); }); - describe('', () => { - beforeEach(() => { - spyOn(translateService, 'getLangs').and.returnValue(langList); - }); + it('should return the default language if the cookie language is disabled', () => { + spyOnGet.and.returnValue('disabled'); + expect(service.getCurrentLanguageCode()).toBe('en'); + }); - it('should return language from browser setting', () => { - spyOn(translateService, 'getBrowserLang').and.returnValue('it'); - expect(service.getCurrentLanguageCode()).toBe('it'); - }); + it('should return the default language if the cookie language does not exist', () => { + spyOnGet.and.returnValue('does-not-exist'); + expect(service.getCurrentLanguageCode()).toBe('en'); + }); - it('should return default language from config', () => { - spyOn(translateService, 'getBrowserLang').and.returnValue('fr'); - expect(service.getCurrentLanguageCode()).toBe('en'); - }); + it('should return language from browser setting', () => { + spyOn(translateService, 'getBrowserLang').and.returnValue('it'); + expect(service.getCurrentLanguageCode()).toBe('it'); + }); + + it('should return default language from config', () => { + spyOn(translateService, 'getBrowserLang').and.returnValue('fr'); + expect(service.getCurrentLanguageCode()).toBe('en'); }); }); diff --git a/src/app/core/locale/locale.service.ts b/src/app/core/locale/locale.service.ts index 1052021479..1977c3d5e1 100644 --- a/src/app/core/locale/locale.service.ts +++ b/src/app/core/locale/locale.service.ts @@ -11,6 +11,7 @@ import { map, mergeMap, take } from 'rxjs/operators'; import { NativeWindowRef, NativeWindowService } from '../services/window.service'; import { RouteService } from '../services/route.service'; import { DOCUMENT } from '@angular/common'; +import { LangConfig } from '../../../config/lang-config.interface'; export const LANG_COOKIE = 'dsLanguage'; @@ -52,8 +53,7 @@ export class LocaleService { getCurrentLanguageCode(): string { // Attempt to get the language from a cookie let lang = this.getLanguageCodeFromCookie(); - if (isEmpty(lang)) { - // Cookie not found + if (isEmpty(lang) || environment.languages.find((langConfig: LangConfig) => langConfig.code === lang && langConfig.active) === undefined) { // Attempt to get the browser language from the user if (this.translate.getLangs().includes(this.translate.getBrowserLang())) { lang = this.translate.getBrowserLang(); diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index f8a3248837..02d06c6a44 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -178,6 +178,10 @@ export const environment: AppConfig = { code: 'lv', label: 'Latviešu', active: true, + }, { + code: 'disabled', + label: 'Disabled', + active: false, }], // Browse-By Pages