@@ -7,9 +7,12 @@ import {
77 TranslateModule ,
88 TranslateService ,
99} from '@ngx-translate/core' ;
10+ import { of } from 'rxjs' ;
11+ import { TestScheduler } from 'rxjs/testing' ;
1012
1113import { CookieServiceMock } from '../../shared/mocks/cookie.service.mock' ;
1214import { TranslateLoaderMock } from '../../shared/mocks/translate-loader.mock' ;
15+ import { EPersonMock2 } from '../../shared/testing/eperson.mock' ;
1316import { routeServiceStub } from '../../shared/testing/route-service.stub' ;
1417import { AuthService } from '../auth/auth.service' ;
1518import { CookieService } from '../services/cookie.service' ;
@@ -36,6 +39,7 @@ describe('LocaleService', () => {
3639 authService = jasmine . createSpyObj ( 'AuthService' , {
3740 isAuthenticated : jasmine . createSpy ( 'isAuthenticated' ) ,
3841 isAuthenticationLoaded : jasmine . createSpy ( 'isAuthenticationLoaded' ) ,
42+ getAuthenticatedUserFromStore : jasmine . createSpy ( 'getAuthenticatedUserFromStore' ) ,
3943 } ) ;
4044
4145 const langList = [ 'en' , 'xx' , 'de' ] ;
@@ -72,33 +76,80 @@ describe('LocaleService', () => {
7276 } ) ;
7377
7478 describe ( 'getCurrentLanguageCode' , ( ) => {
79+ let testScheduler : TestScheduler ;
80+
7581 beforeEach ( ( ) => {
7682 spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
83+ testScheduler = new TestScheduler ( ( actual , expected ) => {
84+ // use jasmine to test equality
85+ expect ( actual ) . toEqual ( expected ) ;
86+ } ) ;
87+ authService . isAuthenticated . and . returnValue ( of ( false ) ) ;
88+ authService . isAuthenticationLoaded . and . returnValue ( of ( false ) ) ;
7789 } ) ;
7890
7991 it ( 'should return the language saved on cookie if it\'s a valid & active language' , ( ) => {
8092 spyOnGet . and . returnValue ( 'de' ) ;
81- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'de' ) ;
93+ testScheduler . run ( ( { expectObservable } ) => {
94+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'de' } ) ;
95+ } ) ;
8296 } ) ;
8397
8498 it ( 'should return the fallback language if the cookie language is disabled' , ( ) => {
8599 spyOnGet . and . returnValue ( 'disabled' ) ;
86- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
100+ testScheduler . run ( ( { expectObservable } ) => {
101+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'en' } ) ;
102+ } ) ;
87103 } ) ;
88104
89105 it ( 'should return the fallback language if the cookie language does not exist' , ( ) => {
90106 spyOnGet . and . returnValue ( 'does-not-exist' ) ;
91- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
107+ testScheduler . run ( ( { expectObservable } ) => {
108+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'en' } ) ;
109+ } ) ;
92110 } ) ;
93111
94112 it ( 'should return language from browser setting' , ( ) => {
95- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'xx' ) ;
96- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'xx' ) ;
113+ spyOn ( service , 'getLanguageCodeList' ) . and . returnValue ( of ( [ 'xx' , 'en' ] ) ) ;
114+ testScheduler . run ( ( { expectObservable } ) => {
115+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'xx' } ) ;
116+ } ) ;
117+ } ) ;
118+
119+ it ( 'should match language from browser setting case insensitive' , ( ) => {
120+ spyOn ( service , 'getLanguageCodeList' ) . and . returnValue ( of ( [ 'DE' , 'en' ] ) ) ;
121+ testScheduler . run ( ( { expectObservable } ) => {
122+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'DE' } ) ;
123+ } ) ;
124+ } ) ;
125+ } ) ;
126+
127+ describe ( 'getLanguageCodeList' , ( ) => {
128+ let testScheduler : TestScheduler ;
129+
130+ beforeEach ( ( ) => {
131+ spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
132+ testScheduler = new TestScheduler ( ( actual , expected ) => {
133+ // use jasmine to test equality
134+ expect ( actual ) . toEqual ( expected ) ;
135+ } ) ;
136+ } ) ;
137+
138+ it ( 'should return default language list without user preferred language when no logged in user' , ( ) => {
139+ authService . isAuthenticated . and . returnValue ( of ( false ) ) ;
140+ authService . isAuthenticationLoaded . and . returnValue ( of ( false ) ) ;
141+ testScheduler . run ( ( { expectObservable } ) => {
142+ expectObservable ( service . getLanguageCodeList ( ) ) . toBe ( '(a|)' , { a : [ 'en-US;q=1' , 'en;q=0.9' ] } ) ;
143+ } ) ;
97144 } ) ;
98145
99- it ( 'should return default language from config' , ( ) => {
100- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'fr' ) ;
101- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
146+ it ( 'should return default language list with user preferred language when user is logged in' , ( ) => {
147+ authService . isAuthenticated . and . returnValue ( of ( true ) ) ;
148+ authService . isAuthenticationLoaded . and . returnValue ( of ( true ) ) ;
149+ authService . getAuthenticatedUserFromStore . and . returnValue ( of ( EPersonMock2 ) ) ;
150+ testScheduler . run ( ( { expectObservable } ) => {
151+ expectObservable ( service . getLanguageCodeList ( ) ) . toBe ( '(a|)' , { a : [ 'fr;q=0.5' , 'en-US;q=1' , 'en;q=0.9' ] } ) ;
152+ } ) ;
102153 } ) ;
103154 } ) ;
104155
@@ -130,14 +181,13 @@ describe('LocaleService', () => {
130181 } ) ;
131182
132183 it ( 'should set the current language' , ( ) => {
133- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
184+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( of ( 'es' ) ) ;
134185 service . setCurrentLanguageCode ( ) ;
135186 expect ( translateService . use ) . toHaveBeenCalledWith ( 'es' ) ;
136- expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'es' ) ;
137187 } ) ;
138188
139189 it ( 'should set the current language on the html tag' , ( ) => {
140- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
190+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( of ( 'es' ) ) ;
141191 service . setCurrentLanguageCode ( ) ;
142192 expect ( ( service as any ) . document . documentElement . lang ) . toEqual ( 'es' ) ;
143193 } ) ;
0 commit comments