@@ -10,6 +10,9 @@ 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 } from 'rxjs' ;
14+ import { TestScheduler } from 'rxjs/testing' ;
15+ import { EPersonMock2 } from '../../shared/testing/eperson.mock' ;
1316
1417describe ( 'LocaleService test suite' , ( ) => {
1518 let service : LocaleService ;
@@ -25,7 +28,8 @@ describe('LocaleService test suite', () => {
2528
2629 authService = jasmine . createSpyObj ( 'AuthService' , {
2730 isAuthenticated : jasmine . createSpy ( 'isAuthenticated' ) ,
28- isAuthenticationLoaded : jasmine . createSpy ( 'isAuthenticationLoaded' )
31+ isAuthenticationLoaded : jasmine . createSpy ( 'isAuthenticationLoaded' ) ,
32+ getAuthenticatedUserFromStore : jasmine . createSpy ( 'getAuthenticatedUserFromStore' ) ,
2933 } ) ;
3034
3135 const langList = [ 'en' , 'xx' , 'de' ] ;
@@ -62,33 +66,80 @@ describe('LocaleService test suite', () => {
6266 } ) ;
6367
6468 describe ( 'getCurrentLanguageCode' , ( ) => {
69+ let testScheduler : TestScheduler ;
70+
6571 beforeEach ( ( ) => {
6672 spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
73+ testScheduler = new TestScheduler ( ( actual , expected ) => {
74+ // use jasmine to test equality
75+ expect ( actual ) . toEqual ( expected ) ;
76+ } ) ;
77+ authService . isAuthenticated . and . returnValue ( of ( false ) ) ;
78+ authService . isAuthenticationLoaded . and . returnValue ( of ( false ) ) ;
6779 } ) ;
6880
6981 it ( 'should return the language saved on cookie if it\'s a valid & active language' , ( ) => {
7082 spyOnGet . and . returnValue ( 'de' ) ;
71- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'de' ) ;
83+ testScheduler . run ( ( { expectObservable} ) => {
84+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'de' } ) ;
85+ } ) ;
7286 } ) ;
7387
7488 it ( 'should return the default language if the cookie language is disabled' , ( ) => {
7589 spyOnGet . and . returnValue ( 'disabled' ) ;
76- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
90+ testScheduler . run ( ( { expectObservable} ) => {
91+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'en' } ) ;
92+ } ) ;
7793 } ) ;
7894
7995 it ( 'should return the default language if the cookie language does not exist' , ( ) => {
8096 spyOnGet . and . returnValue ( 'does-not-exist' ) ;
81- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
97+ testScheduler . run ( ( { expectObservable} ) => {
98+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'en' } ) ;
99+ } ) ;
82100 } ) ;
83101
84102 it ( 'should return language from browser setting' , ( ) => {
85- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'xx' ) ;
86- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'xx' ) ;
103+ spyOn ( service , 'getLanguageCodeList' ) . and . returnValue ( of ( [ 'xx' , 'en' ] ) ) ;
104+ testScheduler . run ( ( { expectObservable} ) => {
105+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'xx' } ) ;
106+ } ) ;
107+ } ) ;
108+
109+ it ( 'should match language from browser setting case insensitive' , ( ) => {
110+ spyOn ( service , 'getLanguageCodeList' ) . and . returnValue ( of ( [ 'DE' , 'en' ] ) ) ;
111+ testScheduler . run ( ( { expectObservable} ) => {
112+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'DE' } ) ;
113+ } ) ;
114+ } ) ;
115+ } ) ;
116+
117+ describe ( 'getLanguageCodeList' , ( ) => {
118+ let testScheduler : TestScheduler ;
119+
120+ beforeEach ( ( ) => {
121+ spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
122+ testScheduler = new TestScheduler ( ( actual , expected ) => {
123+ // use jasmine to test equality
124+ expect ( actual ) . toEqual ( expected ) ;
125+ } ) ;
126+ } ) ;
127+
128+ it ( 'should return default language list without user preferred language when no logged in user' , ( ) => {
129+ authService . isAuthenticated . and . returnValue ( of ( false ) ) ;
130+ authService . isAuthenticationLoaded . and . returnValue ( of ( false ) ) ;
131+ testScheduler . run ( ( { expectObservable} ) => {
132+ expectObservable ( service . getLanguageCodeList ( ) ) . toBe ( '(a|)' , { a : [ 'en-US;q=1' , 'en;q=0.9' ] } ) ;
133+ } ) ;
87134 } ) ;
88135
89- it ( 'should return default language from config' , ( ) => {
90- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'fr' ) ;
91- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
136+ it ( 'should return default language list with user preferred language when user is logged in' , ( ) => {
137+ authService . isAuthenticated . and . returnValue ( of ( true ) ) ;
138+ authService . isAuthenticationLoaded . and . returnValue ( of ( true ) ) ;
139+ authService . getAuthenticatedUserFromStore . and . returnValue ( of ( EPersonMock2 ) ) ;
140+ testScheduler . run ( ( { expectObservable} ) => {
141+ expectObservable ( service . getLanguageCodeList ( ) ) . toBe ( '(a|)' , { a : [ 'fr;q=0.5' , 'en-US;q=1' , 'en;q=0.9' ] } ) ;
142+ } ) ;
92143 } ) ;
93144 } ) ;
94145
@@ -120,14 +171,13 @@ describe('LocaleService test suite', () => {
120171 } ) ;
121172
122173 it ( 'should set the current language' , ( ) => {
123- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
174+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( of ( 'es' ) ) ;
124175 service . setCurrentLanguageCode ( ) ;
125176 expect ( translateService . use ) . toHaveBeenCalledWith ( 'es' ) ;
126- expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'es' ) ;
127177 } ) ;
128178
129179 it ( 'should set the current language on the html tag' , ( ) => {
130- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
180+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( of ( 'es' ) ) ;
131181 service . setCurrentLanguageCode ( ) ;
132182 expect ( ( service as any ) . document . documentElement . lang ) . toEqual ( 'es' ) ;
133183 } ) ;
0 commit comments