Skip to content

Commit 171c78b

Browse files
Sufiyan Shaikhvins01-4science
authored andcommitted
[DSC-758] Need a parameter on Angular Side to force Language via URL
1 parent 2d6a375 commit 171c78b

3 files changed

Lines changed: 72 additions & 28 deletions

File tree

src/app/core/locale/locale.service.spec.ts

Lines changed: 59 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import { AuthService } from '../auth/auth.service';
1010
import { NativeWindowRef } from '../services/window.service';
1111
import { RouteService } from '../services/route.service';
1212
import { routeServiceStub } from '../../shared/testing/route-service.stub';
13+
import { of as observableOf } from 'rxjs';
1314

14-
describe('LocaleService test suite', () => {
15+
fdescribe('LocaleService test suite', () => {
1516
let service: LocaleService;
1617
let serviceAsAny: any;
1718
let cookieService: CookieService;
@@ -22,13 +23,25 @@ describe('LocaleService test suite', () => {
2223
let authService;
2324
let routeService;
2425
let document;
26+
let spyOnGetLanguage;
2527

2628
authService = jasmine.createSpyObj('AuthService', {
2729
isAuthenticated: jasmine.createSpy('isAuthenticated'),
2830
isAuthenticationLoaded: jasmine.createSpy('isAuthenticationLoaded')
2931
});
3032

31-
const langList = ['en', 'xx', 'de'];
33+
const translateServiceStub: any = {
34+
getLangs: () => {
35+
return langList;
36+
},
37+
getBrowserLang: () => {
38+
return langList;
39+
},
40+
// eslint-disable-next-line @typescript-eslint/no-empty-function
41+
use: (param: string) => {}
42+
};
43+
44+
const langList = ['en', 'it', 'de'];
3245

3346
beforeEach(waitForAsync(() => {
3447
return TestBed.configureTestingModule({
@@ -44,6 +57,7 @@ describe('LocaleService test suite', () => {
4457
{ provide: CookieService, useValue: new CookieServiceMock() },
4558
{ provide: AuthService, userValue: authService },
4659
{ provide: RouteService, useValue: routeServiceStub },
60+
{ provide: TranslateService, useValue: translateServiceStub },
4761
{ provide: Document, useValue: document },
4862
]
4963
});
@@ -59,36 +73,29 @@ describe('LocaleService test suite', () => {
5973
serviceAsAny = service;
6074
spyOnGet = spyOn(cookieService, 'get');
6175
spyOnSet = spyOn(cookieService, 'set');
76+
spyOnGetLanguage = spyOn(routeService, 'getQueryParameterValue').withArgs('lang');
6277
});
6378

6479
describe('getCurrentLanguageCode', () => {
65-
beforeEach(() => {
66-
spyOn(translateService, 'getLangs').and.returnValue(langList);
67-
});
68-
69-
it('should return the language saved on cookie if it\'s a valid & active language', () => {
80+
it('should return language saved on cookie', () => {
7081
spyOnGet.and.returnValue('de');
7182
expect(service.getCurrentLanguageCode()).toBe('de');
7283
});
7384

74-
it('should return the default language if the cookie language is disabled', () => {
75-
spyOnGet.and.returnValue('disabled');
76-
expect(service.getCurrentLanguageCode()).toBe('en');
77-
});
78-
79-
it('should return the default language if the cookie language does not exist', () => {
80-
spyOnGet.and.returnValue('does-not-exist');
81-
expect(service.getCurrentLanguageCode()).toBe('en');
82-
});
85+
describe('', () => {
86+
beforeEach(() => {
87+
spyOn(translateService, 'getLangs').and.returnValue(langList);
88+
});
8389

84-
it('should return language from browser setting', () => {
85-
spyOn(translateService, 'getBrowserLang').and.returnValue('xx');
86-
expect(service.getCurrentLanguageCode()).toBe('xx');
87-
});
90+
it('should return language from browser setting', () => {
91+
spyOn(translateService, 'getBrowserLang').and.returnValue('it');
92+
expect(service.getCurrentLanguageCode()).toBe('it');
93+
});
8894

89-
it('should return default language from config', () => {
90-
spyOn(translateService, 'getBrowserLang').and.returnValue('fr');
91-
expect(service.getCurrentLanguageCode()).toBe('en');
95+
it('should return default language from config', () => {
96+
spyOn(translateService, 'getBrowserLang').and.returnValue('fr');
97+
expect(service.getCurrentLanguageCode()).toBe('en');
98+
});
9299
});
93100
});
94101

@@ -114,9 +121,9 @@ describe('LocaleService test suite', () => {
114121
});
115122

116123
it('should set the given language', () => {
117-
service.setCurrentLanguageCode('xx');
118-
expect(translateService.use).toHaveBeenCalledWith('xx');
119-
expect(service.saveLanguageCodeToCookie).toHaveBeenCalledWith('xx');
124+
service.setCurrentLanguageCode('it');
125+
expect(translateService.use).toHaveBeenCalledWith('it');
126+
expect(service.saveLanguageCodeToCookie).toHaveBeenCalledWith('it');
120127
});
121128

122129
it('should set the current language', () => {
@@ -131,11 +138,36 @@ describe('LocaleService test suite', () => {
131138
service.setCurrentLanguageCode();
132139
expect((service as any).document.documentElement.lang).toEqual('es');
133140
});
141+
142+
describe('should set language on init', () => {
143+
beforeEach(() => {
144+
spyOn(translateService, 'getLangs').and.returnValue(langList);
145+
spyOn(service, 'setCurrentLanguageCode');
146+
});
147+
describe('whith correct lang query param ', () => {
148+
beforeEach(() => {
149+
spyOnGetLanguage.and.returnValue(observableOf('en'));
150+
service.initDefaults();
151+
});
152+
it('should set correct lang', () => {
153+
expect(service.setCurrentLanguageCode).toHaveBeenCalledWith('en');
154+
});
155+
});
156+
describe('whith wrong lang query param ', () => {
157+
beforeEach(() => {
158+
spyOnGetLanguage.and.returnValue(observableOf('abcd'));
159+
service.initDefaults();
160+
});
161+
it('should not set lang', () => {
162+
expect(service.setCurrentLanguageCode).not.toHaveBeenCalled();
163+
});
164+
});
165+
});
134166
});
135167

136168
describe('', () => {
137169
it('should set quality to current language list', () => {
138-
const langListWithQuality = ['en;q=1', 'xx;q=0.9', 'de;q=0.8'];
170+
const langListWithQuality = ['en;q=1', 'it;q=0.9', 'de;q=0.8'];
139171
spyOn(service, 'setQuality').and.returnValue(langListWithQuality);
140172
service.setQuality(langList, LANG_ORIGIN.BROWSER, false);
141173
expect(service.setQuality).toHaveBeenCalledWith(langList, LANG_ORIGIN.BROWSER, false);

src/app/core/locale/locale.service.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ export class LocaleService {
4343
protected routeService: RouteService,
4444
@Inject(DOCUMENT) protected document: any
4545
) {
46+
this.initDefaults();
47+
}
48+
49+
/**
50+
* Initialize the language from query params
51+
*/
52+
initDefaults() {
53+
this.routeService.getQueryParameterValue('lang').subscribe(lang => {
54+
if (lang && this.translate.getLangs().some(language => language === lang)) {
55+
this.setCurrentLanguageCode(lang);
56+
}
57+
});
4658
}
4759

4860
/**

src/app/shared/testing/route-service.stub.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const routeServiceStub: any = {
2323
getQueryParamMap: () => {
2424
return observableOf(new Map());
2525
},
26-
getQueryParameterValue: () => {
26+
getQueryParameterValue: (lang?: string) => {
2727
return observableOf({});
2828
},
2929
getRouteParameterValue: (param) => {

0 commit comments

Comments
 (0)