@@ -12,12 +12,13 @@ import { getTestScheduler } from 'jasmine-marbles';
1212import { MetadataValue } from '../../core/shared/metadata.models' ;
1313import { cloneDeep } from 'lodash' ;
1414import { ConfigurationDataService } from '../../core/data/configuration-data.service' ;
15- import { createSuccessfulRemoteDataObject$ } from '../remote-data.utils' ;
15+ import { createFailedRemoteDataObject$ , createSuccessfulRemoteDataObject$ } from '../remote-data.utils' ;
1616import { ConfigurationProperty } from '../../core/shared/configuration-property.model' ;
1717
1818describe ( 'BrowserKlaroService' , ( ) => {
1919 const trackingIdProp = 'google.analytics.key' ;
2020 const trackingIdTestValue = 'mock-tracking-id' ;
21+ const googleAnalytics = 'google-analytics' ;
2122 let translateService ;
2223 let ePersonService ;
2324 let authService ;
@@ -33,11 +34,15 @@ describe('BrowserKlaroService', () => {
3334 values : values ,
3435 } ) ,
3536 } ) ;
37+ const googleAnalyticsFilter =
38+ ( bService : BrowserKlaroService ) =>
39+ bService . klaroConfig . services . filter ( ( { name} ) => name === googleAnalytics ) ;
3640
3741 let mockConfig ;
3842 let appName ;
3943 let purpose ;
4044 let testKey ;
45+ let findByPropertyName ;
4146
4247 beforeEach ( ( ) => {
4348 user = new EPerson ( ) ;
@@ -52,6 +57,7 @@ describe('BrowserKlaroService', () => {
5257 getAuthenticatedUserFromStore : observableOf ( user )
5358 } ) ;
5459 configurationDataService = createConfigSuccessSpy ( trackingIdTestValue ) ;
60+ findByPropertyName = cloneDeep ( configurationDataService . findByPropertyName ) ;
5561 cookieService = jasmine . createSpyObj ( 'cookieService' , {
5662 get : '{%22token_item%22:true%2C%22impersonation%22:true%2C%22redirect%22:true%2C%22language%22:true%2C%22klaro%22:true%2C%22has_agreed_end_user%22:true%2C%22google-analytics%22:true}' ,
5763 set : ( ) => {
@@ -101,6 +107,9 @@ describe('BrowserKlaroService', () => {
101107 services : [ {
102108 name : appName ,
103109 purposes : [ purpose ]
110+ } , {
111+ name : googleAnalytics ,
112+ purposes : [ purpose ]
104113 } ] ,
105114
106115 } ;
@@ -251,4 +260,46 @@ describe('BrowserKlaroService', () => {
251260 expect ( ePersonService . patch ) . not . toHaveBeenCalled ( ) ;
252261 } ) ;
253262 } ) ;
263+
264+ describe ( 'initialize google analytics configuration' , ( ) => {
265+ beforeEach ( ( ) => {
266+ configurationDataService . findByPropertyName = findByPropertyName ;
267+ spyOn ( ( service as any ) , 'getUser$' ) . and . returnValue ( observableOf ( user ) ) ;
268+ translateService . get . and . returnValue ( observableOf ( 'loading...' ) ) ;
269+ spyOn ( service , 'addAppMessages' ) ;
270+ spyOn ( ( service as any ) , 'initializeUser' ) ;
271+ spyOn ( service , 'translateConfiguration' ) ;
272+ } ) ;
273+ it ( 'should have been initialized with googleAnalytics' , ( ) => {
274+ const filteredServices = googleAnalyticsFilter ( service ) ;
275+ expect ( filteredServices . length ) . toBe ( 1 ) ;
276+ } ) ;
277+ it ( 'should filter empty configuration' , ( ) => {
278+ configurationDataService . findByPropertyName = jasmine . createSpy ( ) . and . returnValue (
279+ createSuccessfulRemoteDataObject$ ( {
280+ ... new ConfigurationProperty ( ) ,
281+ name : googleAnalytics ,
282+ values : [ ] ,
283+ } ) ) ;
284+ service . initialize ( ) ;
285+ const filteredServices = googleAnalyticsFilter ( service ) ;
286+ expect ( filteredServices . length ) . toBe ( 0 ) ;
287+ } ) ;
288+ it ( 'should filter when error' , ( ) => {
289+ configurationDataService . findByPropertyName = jasmine . createSpy ( ) . and . returnValue (
290+ createFailedRemoteDataObject$ ( 'Erro while loading GA' )
291+ ) ;
292+ service . initialize ( ) ;
293+ const filteredServices = googleAnalyticsFilter ( service ) ;
294+ expect ( filteredServices . length ) . toBe ( 0 ) ;
295+ } ) ;
296+ it ( 'should filter when invalid payload' , ( ) => {
297+ configurationDataService . findByPropertyName = jasmine . createSpy ( ) . and . returnValue (
298+ createSuccessfulRemoteDataObject$ ( null )
299+ ) ;
300+ service . initialize ( ) ;
301+ const filteredServices = googleAnalyticsFilter ( service ) ;
302+ expect ( filteredServices . length ) . toBe ( 0 ) ;
303+ } ) ;
304+ } ) ;
254305} ) ;
0 commit comments