@@ -10,6 +10,7 @@ import { AuthService } from '../auth/auth.service';
10
10
import { NativeWindowRef } from '../services/window.service' ;
11
11
import { RouteService } from '../services/route.service' ;
12
12
import { routeServiceStub } from '../../shared/testing/route-service.stub' ;
13
+ import { of as observableOf } from 'rxjs' ;
13
14
14
15
describe ( 'LocaleService test suite' , ( ) => {
15
16
let service : LocaleService ;
@@ -22,129 +23,164 @@ describe('LocaleService test suite', () => {
22
23
let authService ;
23
24
let routeService ;
24
25
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
+ } ;
25
40
26
41
authService = jasmine . createSpyObj ( 'AuthService' , {
27
42
isAuthenticated : jasmine . createSpy ( 'isAuthenticated' ) ,
28
43
isAuthenticationLoaded : jasmine . createSpy ( 'isAuthenticationLoaded' )
29
44
} ) ;
30
-
31
45
const langList = [ 'en' , 'xx' , 'de' ] ;
32
46
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
+ } ) ) ;
63
68
64
- describe ( 'getCurrentLanguageCode' , ( ) => {
65
69
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' ) ;
87
80
} ) ;
88
81
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
+ } ) ;
99
103
} ) ;
100
104
101
- } ) ;
105
+ describe ( 'getLanguageCodeFromCookie' , ( ) => {
106
+ it ( 'should return language from cookie' , ( ) => {
107
+ spyOnGet . and . returnValue ( 'de' ) ;
108
+ expect ( service . getLanguageCodeFromCookie ( ) ) . toBe ( 'de' ) ;
109
+ } ) ;
102
110
103
- describe ( 'saveLanguageCodeToCookie' , ( ) => {
104
- it ( 'should save language to cookie' , ( ) => {
105
- service . saveLanguageCodeToCookie ( 'en' ) ;
106
- expect ( spyOnSet ) . toHaveBeenCalledWith ( LANG_COOKIE , 'en' ) ;
107
111
} ) ;
108
- } ) ;
109
112
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
+ } ) ;
114
118
} ) ;
115
119
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
+ } ) ;
142
169
} ) ;
143
170
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
+ } ) ;
148
184
} ) ;
149
185
} ) ;
150
186
} ) ;
0 commit comments