@@ -10,6 +10,7 @@ import { AuthService } from '../auth/auth.service';
1010import { NativeWindowRef } from '../services/window.service' ;
1111import { RouteService } from '../services/route.service' ;
1212import { routeServiceStub } from '../../shared/testing/route-service.stub' ;
13+ import { of as observableOf } from 'rxjs' ;
1314
1415describe ( 'LocaleService test suite' , ( ) => {
1516 let service : LocaleService ;
@@ -22,129 +23,164 @@ describe('LocaleService test suite', () => {
2223 let authService ;
2324 let routeService ;
2425 let document ;
26+ let spyOnGetLanguage ;
27+
28+
29+ const translateServiceStub : any = {
30+ getLangs : ( ) => {
31+ return langList ;
32+ } ,
33+ getBrowserLang : ( ) => {
34+ return langList ;
35+ } ,
36+ // eslint-disable-next-line @typescript-eslint/no-empty-function
37+ use : ( param : string ) => {
38+ }
39+ } ;
2540
2641 authService = jasmine . createSpyObj ( 'AuthService' , {
2742 isAuthenticated : jasmine . createSpy ( 'isAuthenticated' ) ,
2843 isAuthenticationLoaded : jasmine . createSpy ( 'isAuthenticationLoaded' )
2944 } ) ;
30-
3145 const langList = [ 'en' , 'xx' , 'de' ] ;
3246
33- beforeEach ( waitForAsync ( ( ) => {
34- return TestBed . configureTestingModule ( {
35- imports : [
36- TranslateModule . forRoot ( {
37- loader : {
38- provide : TranslateLoader ,
39- useClass : TranslateLoaderMock
40- }
41- } ) ,
42- ] ,
43- providers : [
44- { provide : CookieService , useValue : new CookieServiceMock ( ) } ,
45- { provide : AuthService , userValue : authService } ,
46- { provide : RouteService , useValue : routeServiceStub } ,
47- { provide : Document , useValue : document } ,
48- ]
49- } ) ;
50- } ) ) ;
51-
52- beforeEach ( ( ) => {
53- cookieService = TestBed . inject ( CookieService ) ;
54- translateService = TestBed . inject ( TranslateService ) ;
55- routeService = TestBed . inject ( RouteService ) ;
56- window = new NativeWindowRef ( ) ;
57- document = { documentElement : { lang : 'en' } } ;
58- service = new LocaleService ( window , cookieService , translateService , authService , routeService , document ) ;
59- serviceAsAny = service ;
60- spyOnGet = spyOn ( cookieService , 'get' ) ;
61- spyOnSet = spyOn ( cookieService , 'set' ) ;
62- } ) ;
47+ describe ( 'with valid language' , ( ) => {
48+
49+ beforeEach ( waitForAsync ( ( ) => {
50+ return TestBed . configureTestingModule ( {
51+ imports : [
52+ TranslateModule . forRoot ( {
53+ loader : {
54+ provide : TranslateLoader ,
55+ useClass : TranslateLoaderMock
56+ }
57+ } ) ,
58+ ] ,
59+ providers : [
60+ { provide : CookieService , useValue : new CookieServiceMock ( ) } ,
61+ { provide : AuthService , userValue : authService } ,
62+ { provide : RouteService , useValue : routeServiceStub } ,
63+ { provide : TranslateService , useValue : translateServiceStub } ,
64+ { provide : Document , useValue : document } ,
65+ ]
66+ } ) ;
67+ } ) ) ;
6368
64- describe ( 'getCurrentLanguageCode' , ( ) => {
6569 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' , ( ) => {
70- spyOnGet . and . returnValue ( 'de' ) ;
71- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'de' ) ;
72- } ) ;
73-
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- } ) ;
83-
84- it ( 'should return language from browser setting' , ( ) => {
85- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'xx' ) ;
86- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'xx' ) ;
70+ cookieService = TestBed . inject ( CookieService ) ;
71+ translateService = TestBed . inject ( TranslateService ) ;
72+ routeService = TestBed . inject ( RouteService ) ;
73+ window = new NativeWindowRef ( ) ;
74+ document = { documentElement : { lang : 'en' } } ;
75+ service = new LocaleService ( window , cookieService , translateService , authService , routeService , document ) ;
76+ serviceAsAny = service ;
77+ spyOnGet = spyOn ( cookieService , 'get' ) ;
78+ spyOnSet = spyOn ( cookieService , 'set' ) ;
79+ spyOnGetLanguage = spyOn ( routeService , 'getQueryParameterValue' ) . withArgs ( 'lang' ) ;
8780 } ) ;
8881
89- it ( 'should return default language from config' , ( ) => {
90- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'fr' ) ;
91- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
92- } ) ;
93- } ) ;
94-
95- describe ( 'getLanguageCodeFromCookie' , ( ) => {
96- it ( 'should return language from cookie' , ( ) => {
97- spyOnGet . and . returnValue ( 'de' ) ;
98- expect ( service . getLanguageCodeFromCookie ( ) ) . toBe ( 'de' ) ;
82+ describe ( 'getCurrentLanguageCode' , ( ) => {
83+ it ( 'should return language saved on cookie' , ( ) => {
84+ spyOnGet . and . returnValue ( 'de' ) ;
85+ expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'de' ) ;
86+ } ) ;
87+
88+ describe ( '' , ( ) => {
89+ beforeEach ( ( ) => {
90+ spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
91+ } ) ;
92+
93+ it ( 'should return language from browser setting' , ( ) => {
94+ spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'xx' ) ;
95+ expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'xx' ) ;
96+ } ) ;
97+
98+ it ( 'should return default language from config' , ( ) => {
99+ spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'fr' ) ;
100+ expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
101+ } ) ;
102+ } ) ;
99103 } ) ;
100104
101- } ) ;
105+ describe ( 'getLanguageCodeFromCookie' , ( ) => {
106+ it ( 'should return language from cookie' , ( ) => {
107+ spyOnGet . and . returnValue ( 'de' ) ;
108+ expect ( service . getLanguageCodeFromCookie ( ) ) . toBe ( 'de' ) ;
109+ } ) ;
102110
103- describe ( 'saveLanguageCodeToCookie' , ( ) => {
104- it ( 'should save language to cookie' , ( ) => {
105- service . saveLanguageCodeToCookie ( 'en' ) ;
106- expect ( spyOnSet ) . toHaveBeenCalledWith ( LANG_COOKIE , 'en' ) ;
107111 } ) ;
108- } ) ;
109112
110- describe ( 'setCurrentLanguageCode' , ( ) => {
111- beforeEach ( ( ) => {
112- spyOn ( service , 'saveLanguageCodeToCookie' ) ;
113- spyOn ( translateService , 'use' ) ;
113+ describe ( 'saveLanguageCodeToCookie' , ( ) => {
114+ it ( 'should save language to cookie' , ( ) => {
115+ service . saveLanguageCodeToCookie ( 'en' ) ;
116+ expect ( spyOnSet ) . toHaveBeenCalledWith ( LANG_COOKIE , 'en' ) ;
117+ } ) ;
114118 } ) ;
115119
116- it ( 'should set the given language' , ( ) => {
117- service . setCurrentLanguageCode ( 'xx' ) ;
118- expect ( translateService . use ) . toHaveBeenCalledWith ( 'xx' ) ;
119- expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'xx' ) ;
120- } ) ;
121-
122- it ( 'should set the current language' , ( ) => {
123- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
124- service . setCurrentLanguageCode ( ) ;
125- expect ( translateService . use ) . toHaveBeenCalledWith ( 'es' ) ;
126- expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'es' ) ;
127- } ) ;
128-
129- it ( 'should set the current language on the html tag' , ( ) => {
130- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
131- service . setCurrentLanguageCode ( ) ;
132- expect ( ( service as any ) . document . documentElement . lang ) . toEqual ( 'es' ) ;
133- } ) ;
134- } ) ;
135-
136- describe ( '' , ( ) => {
137- it ( 'should set quality to current language list' , ( ) => {
138- const langListWithQuality = [ 'en;q=1' , 'xx;q=0.9' , 'de;q=0.8' ] ;
139- spyOn ( service , 'setQuality' ) . and . returnValue ( langListWithQuality ) ;
140- service . setQuality ( langList , LANG_ORIGIN . BROWSER , false ) ;
141- expect ( service . setQuality ) . toHaveBeenCalledWith ( langList , LANG_ORIGIN . BROWSER , false ) ;
120+ describe ( 'setCurrentLanguageCode' , ( ) => {
121+ beforeEach ( ( ) => {
122+ spyOn ( service , 'saveLanguageCodeToCookie' ) ;
123+ spyOn ( translateService , 'use' ) ;
124+ } ) ;
125+
126+ it ( 'should set the given language' , ( ) => {
127+ service . setCurrentLanguageCode ( 'it' ) ;
128+ expect ( translateService . use ) . toHaveBeenCalledWith ( 'it' ) ;
129+ expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'it' ) ;
130+ } ) ;
131+
132+ it ( 'should set the current language' , ( ) => {
133+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
134+ service . setCurrentLanguageCode ( ) ;
135+ expect ( translateService . use ) . toHaveBeenCalledWith ( 'es' ) ;
136+ expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'es' ) ;
137+ } ) ;
138+
139+ it ( 'should set the current language on the html tag' , ( ) => {
140+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
141+ service . setCurrentLanguageCode ( ) ;
142+ expect ( ( service as any ) . document . documentElement . lang ) . toEqual ( 'es' ) ;
143+ } ) ;
144+
145+ describe ( 'should set language on init' , ( ) => {
146+ beforeEach ( ( ) => {
147+ spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
148+ spyOn ( service , 'setCurrentLanguageCode' ) ;
149+ } ) ;
150+ describe ( 'whith correct lang query param ' , ( ) => {
151+ beforeEach ( ( ) => {
152+ spyOnGetLanguage . and . returnValue ( observableOf ( 'en' ) ) ;
153+ service . initDefaults ( ) ;
154+ } ) ;
155+ it ( 'should set correct lang' , ( ) => {
156+ expect ( service . setCurrentLanguageCode ) . toHaveBeenCalledWith ( 'en' ) ;
157+ } ) ;
158+ } ) ;
159+ describe ( 'whith wrong lang query param ' , ( ) => {
160+ beforeEach ( ( ) => {
161+ spyOnGetLanguage . and . returnValue ( observableOf ( 'abcd' ) ) ;
162+ service . initDefaults ( ) ;
163+ } ) ;
164+ it ( 'should not set lang' , ( ) => {
165+ expect ( service . setCurrentLanguageCode ) . not . toHaveBeenCalled ( ) ;
166+ } ) ;
167+ } ) ;
168+ } ) ;
142169 } ) ;
143170
144- it ( 'should return the list of language with quality factor' , ( ) => {
145- spyOn ( service , 'getLanguageCodeList' ) ;
146- service . getLanguageCodeList ( ) ;
147- expect ( service . getLanguageCodeList ) . toHaveBeenCalled ( ) ;
171+ describe ( '' , ( ) => {
172+ it ( 'should set quality to current language list' , ( ) => {
173+ const langListWithQuality = [ 'en;q=1' , 'it;q=0.9' , 'de;q=0.8' ] ;
174+ spyOn ( service , 'setQuality' ) . and . returnValue ( langListWithQuality ) ;
175+ service . setQuality ( langList , LANG_ORIGIN . BROWSER , false ) ;
176+ expect ( service . setQuality ) . toHaveBeenCalledWith ( langList , LANG_ORIGIN . BROWSER , false ) ;
177+ } ) ;
178+
179+ it ( 'should return the list of language with quality factor' , ( ) => {
180+ spyOn ( service , 'getLanguageCodeList' ) ;
181+ service . getLanguageCodeList ( ) ;
182+ expect ( service . getLanguageCodeList ) . toHaveBeenCalled ( ) ;
183+ } ) ;
148184 } ) ;
149185 } ) ;
150186} ) ;
0 commit comments