From fd2120904c41a92d22101d958e9c3418a23283c3 Mon Sep 17 00:00:00 2001 From: Andrea Barbasso <´andrea.barbasso@4science.com´> Date: Wed, 5 Feb 2025 17:05:18 +0100 Subject: [PATCH] [CST-18964] add tests --- .../core/shared/search/search.service.spec.ts | 4 ++ src/app/statistics/matomo.service.spec.ts | 70 ++++++++++++++++++- src/app/statistics/mock-matomo-tracker.ts | 1 + 3 files changed, 74 insertions(+), 1 deletion(-) diff --git a/src/app/core/shared/search/search.service.spec.ts b/src/app/core/shared/search/search.service.spec.ts index 64b305ff64..365523b9cf 100644 --- a/src/app/core/shared/search/search.service.spec.ts +++ b/src/app/core/shared/search/search.service.spec.ts @@ -36,6 +36,8 @@ import { ViewMode } from '../view-mode.model'; import { SearchService } from './search.service'; import { SearchConfigurationService } from './search-configuration.service'; import anything = jasmine.anything; +import { MatomoTestingModule } from 'ngx-matomo-client/testing'; + @Component({ template: '', @@ -55,6 +57,7 @@ describe('SearchService', () => { TestBed.configureTestingModule({ imports: [ CommonModule, + MatomoTestingModule.forRoot(), RouterTestingModule.withRoutes([ { path: 'search', component: DummyComponent, pathMatch: 'full' }, ]), @@ -122,6 +125,7 @@ describe('SearchService', () => { TestBed.configureTestingModule({ imports: [ CommonModule, + MatomoTestingModule.forRoot(), RouterTestingModule.withRoutes([ { path: 'search', component: DummyComponent, pathMatch: 'full' }, ]), diff --git a/src/app/statistics/matomo.service.spec.ts b/src/app/statistics/matomo.service.spec.ts index 4c84d26f44..60cbffdfb9 100644 --- a/src/app/statistics/matomo.service.spec.ts +++ b/src/app/statistics/matomo.service.spec.ts @@ -1,16 +1,84 @@ import { TestBed } from '@angular/core/testing'; +import { + MatomoInitializerService, + MatomoTracker, +} from 'ngx-matomo-client'; +import { MatomoTestingModule } from 'ngx-matomo-client/testing'; +import { of } from 'rxjs'; +import { environment } from '../../environments/environment'; +import { + NativeWindowRef, + NativeWindowService, +} from '../core/services/window.service'; +import { OrejimeService } from '../shared/cookies/orejime.service'; import { MatomoService } from './matomo.service'; describe('MatomoService', () => { let service: MatomoService; + let matomoTracker: jasmine.SpyObj; + let matomoInitializer: jasmine.SpyObj; + let orejimeService: jasmine.SpyObj; + let nativeWindowService: jasmine.SpyObj; beforeEach(() => { - TestBed.configureTestingModule({}); + matomoTracker = jasmine.createSpyObj('MatomoTracker', ['setConsentGiven', 'forgetConsentGiven']); + matomoInitializer = jasmine.createSpyObj('MatomoInitializerService', ['initializeTracker']); + orejimeService = jasmine.createSpyObj('OrejimeService', ['getSavedPreferences']); + nativeWindowService = jasmine.createSpyObj('NativeWindowService', [], { nativeWindow: {} }); + + TestBed.configureTestingModule({ + imports: [MatomoTestingModule.forRoot()], + providers: [ + { provide: MatomoTracker, useValue: matomoTracker }, + { provide: MatomoInitializerService, useValue: matomoInitializer }, + { provide: OrejimeService, useValue: orejimeService }, + { provide: NativeWindowService, useValue: nativeWindowService }, + ], + }); + service = TestBed.inject(MatomoService); }); it('should be created', () => { expect(service).toBeTruthy(); }); + + it('should set changeMatomoConsent on native window', () => { + orejimeService.getSavedPreferences.and.returnValue(of({ matomo: true })); + service.init(); + expect(nativeWindowService.nativeWindow.changeMatomoConsent).toBe(service.changeMatomoConsent); + }); + + it('should initialize tracker with correct parameters in production', () => { + environment.production = true; + environment.matomo = { siteId: '1', trackerUrl: 'http://example.com' }; + orejimeService.getSavedPreferences.and.returnValue(of({ matomo: true })); + + service.init(); + + expect(matomoTracker.setConsentGiven).toHaveBeenCalled(); + expect(matomoInitializer.initializeTracker).toHaveBeenCalledWith({ + siteId: '1', + trackerUrl: 'http://example.com', + }); + }); + + it('should not initialize tracker if not in production', () => { + environment.production = false; + + service.init(); + + expect(matomoInitializer.initializeTracker).not.toHaveBeenCalled(); + }); + + it('should call setConsentGiven when consent is true', () => { + service.changeMatomoConsent(true); + expect(matomoTracker.setConsentGiven).toHaveBeenCalled(); + }); + + it('should call forgetConsentGiven when consent is false', () => { + service.changeMatomoConsent(false); + expect(matomoTracker.forgetConsentGiven).toHaveBeenCalled(); + }); }); diff --git a/src/app/statistics/mock-matomo-tracker.ts b/src/app/statistics/mock-matomo-tracker.ts index cfd2ca2993..a58934380a 100644 --- a/src/app/statistics/mock-matomo-tracker.ts +++ b/src/app/statistics/mock-matomo-tracker.ts @@ -1,3 +1,4 @@ export class MockMatomoTracker { trackSiteSearch = () => {}; + trackPageView = () => {}; }