@@ -3,11 +3,14 @@ import {
33 waitForAsync ,
44} from '@angular/core/testing' ;
55import { APP_CONFIG } from '@dspace/config/app-config.interface' ;
6+ import { EPersonMock2 } from '@dspace/core/testing/eperson.mock' ;
67import {
78 TranslateLoader ,
89 TranslateModule ,
910 TranslateService ,
1011} from '@ngx-translate/core' ;
12+ import { of } from 'rxjs' ;
13+ import { TestScheduler } from 'rxjs/testing' ;
1114
1215import { AuthService } from '../auth/auth.service' ;
1316import { CookieService } from '../cookies/cookie.service' ;
@@ -78,6 +81,7 @@ describe('LocaleService test suite', () => {
7881 authService = jasmine . createSpyObj ( 'AuthService' , {
7982 isAuthenticated : jasmine . createSpy ( 'isAuthenticated' ) ,
8083 isAuthenticationLoaded : jasmine . createSpy ( 'isAuthenticationLoaded' ) ,
84+ getAuthenticatedUserFromStore : jasmine . createSpy ( 'getAuthenticatedUserFromStore' ) ,
8185 } ) ;
8286
8387 const langList = [ 'en' , 'xx' , 'de' ] ;
@@ -116,33 +120,80 @@ describe('LocaleService test suite', () => {
116120 } ) ;
117121
118122 describe ( 'getCurrentLanguageCode' , ( ) => {
123+ let testScheduler : TestScheduler ;
124+
119125 beforeEach ( ( ) => {
120126 spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
127+ testScheduler = new TestScheduler ( ( actual , expected ) => {
128+ // use jasmine to test equality
129+ expect ( actual ) . toEqual ( expected ) ;
130+ } ) ;
131+ authService . isAuthenticated . and . returnValue ( of ( false ) ) ;
132+ authService . isAuthenticationLoaded . and . returnValue ( of ( false ) ) ;
121133 } ) ;
122134
123135 it ( 'should return the language saved on cookie if it\'s a valid & active language' , ( ) => {
124136 spyOnGet . and . returnValue ( 'de' ) ;
125- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'de' ) ;
137+ testScheduler . run ( ( { expectObservable } ) => {
138+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'de' } ) ;
139+ } ) ;
126140 } ) ;
127141
128142 it ( 'should return the default language if the cookie language is disabled' , ( ) => {
129143 spyOnGet . and . returnValue ( 'disabled' ) ;
130- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
144+ testScheduler . run ( ( { expectObservable } ) => {
145+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'en' } ) ;
146+ } ) ;
131147 } ) ;
132148
133149 it ( 'should return the default language if the cookie language does not exist' , ( ) => {
134150 spyOnGet . and . returnValue ( 'does-not-exist' ) ;
135- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
151+ testScheduler . run ( ( { expectObservable } ) => {
152+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'en' } ) ;
153+ } ) ;
136154 } ) ;
137155
138156 it ( 'should return language from browser setting' , ( ) => {
139- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'xx' ) ;
140- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'xx' ) ;
157+ spyOn ( service , 'getLanguageCodeList' ) . and . returnValue ( of ( [ 'xx' , 'en' ] ) ) ;
158+ testScheduler . run ( ( { expectObservable } ) => {
159+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'xx' } ) ;
160+ } ) ;
161+ } ) ;
162+
163+ it ( 'should match language from browser setting case insensitive' , ( ) => {
164+ spyOn ( service , 'getLanguageCodeList' ) . and . returnValue ( of ( [ 'DE' , 'en' ] ) ) ;
165+ testScheduler . run ( ( { expectObservable } ) => {
166+ expectObservable ( service . getCurrentLanguageCode ( ) ) . toBe ( '(a|)' , { a : 'DE' } ) ;
167+ } ) ;
168+ } ) ;
169+ } ) ;
170+
171+ describe ( 'getLanguageCodeList' , ( ) => {
172+ let testScheduler : TestScheduler ;
173+
174+ beforeEach ( ( ) => {
175+ spyOn ( translateService , 'getLangs' ) . and . returnValue ( langList ) ;
176+ testScheduler = new TestScheduler ( ( actual , expected ) => {
177+ // use jasmine to test equality
178+ expect ( actual ) . toEqual ( expected ) ;
179+ } ) ;
180+ } ) ;
181+
182+ it ( 'should return default language list without user preferred language when no logged in user' , ( ) => {
183+ authService . isAuthenticated . and . returnValue ( of ( false ) ) ;
184+ authService . isAuthenticationLoaded . and . returnValue ( of ( false ) ) ;
185+ testScheduler . run ( ( { expectObservable } ) => {
186+ expectObservable ( service . getLanguageCodeList ( ) ) . toBe ( '(a|)' , { a : [ 'en-US;q=1' , 'en;q=0.9' ] } ) ;
187+ } ) ;
141188 } ) ;
142189
143- it ( 'should return default language from config' , ( ) => {
144- spyOn ( translateService , 'getBrowserLang' ) . and . returnValue ( 'fr' ) ;
145- expect ( service . getCurrentLanguageCode ( ) ) . toBe ( 'en' ) ;
190+ it ( 'should return default language list with user preferred language when user is logged in' , ( ) => {
191+ authService . isAuthenticated . and . returnValue ( of ( true ) ) ;
192+ authService . isAuthenticationLoaded . and . returnValue ( of ( true ) ) ;
193+ authService . getAuthenticatedUserFromStore . and . returnValue ( of ( EPersonMock2 ) ) ;
194+ testScheduler . run ( ( { expectObservable } ) => {
195+ expectObservable ( service . getLanguageCodeList ( ) ) . toBe ( '(a|)' , { a : [ 'fr;q=0.5' , 'en-US;q=1' , 'en;q=0.9' ] } ) ;
196+ } ) ;
146197 } ) ;
147198 } ) ;
148199
@@ -174,14 +225,13 @@ describe('LocaleService test suite', () => {
174225 } ) ;
175226
176227 it ( 'should set the current language' , ( ) => {
177- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
228+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( of ( 'es' ) ) ;
178229 service . setCurrentLanguageCode ( ) ;
179230 expect ( translateService . use ) . toHaveBeenCalledWith ( 'es' ) ;
180- expect ( service . saveLanguageCodeToCookie ) . toHaveBeenCalledWith ( 'es' ) ;
181231 } ) ;
182232
183233 it ( 'should set the current language on the html tag' , ( ) => {
184- spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( 'es' ) ;
234+ spyOn ( service , 'getCurrentLanguageCode' ) . and . returnValue ( of ( 'es' ) ) ;
185235 service . setCurrentLanguageCode ( ) ;
186236 expect ( ( service as any ) . document . documentElement . lang ) . toEqual ( 'es' ) ;
187237 } ) ;
0 commit comments