diff --git a/src/app/statistics/matomo.service.spec.ts b/src/app/statistics/matomo.service.spec.ts index 6de6ec32d2..51ea814231 100644 --- a/src/app/statistics/matomo.service.spec.ts +++ b/src/app/statistics/matomo.service.spec.ts @@ -78,8 +78,27 @@ describe('MatomoService', () => { expect(matomoTracker.forgetConsentGiven).toHaveBeenCalled(); }); - it('should initialize tracker with correct parameters in production', () => { + it('should initialize tracker with values from angular configuration', () => { environment.production = true; + environment.matomo = { trackerUrl: 'http://localhost:80801' }; + configService.findByPropertyName.withArgs(MATOMO_TRACKER_URL).and.returnValue( + createSuccessfulRemoteDataObject$(Object.assign(new ConfigurationProperty(),{ values: ['http://matomo'] })), + ); + configService.findByPropertyName.withArgs(MATOMO_SITE_ID).and.returnValue( + createSuccessfulRemoteDataObject$(Object.assign(new ConfigurationProperty(), { values: ['1'] }))); + orejimeService.getSavedPreferences.and.returnValue(of({ matomo: true })); + service.init(); + + expect(matomoTracker.setConsentGiven).toHaveBeenCalled(); + expect(matomoInitializer.initializeTracker).toHaveBeenCalledWith({ + siteId: '1', + trackerUrl: 'http://localhost:80801', + }); + }); + + it('should initialize tracker with REST configuration correct parameters in production', () => { + environment.production = true; + environment.matomo = { trackerUrl: '' }; configService.findByPropertyName.withArgs(MATOMO_TRACKER_URL).and.returnValue( createSuccessfulRemoteDataObject$(Object.assign(new ConfigurationProperty(),{ values: ['http://example.com'] })), ); diff --git a/src/app/statistics/matomo.service.ts b/src/app/statistics/matomo.service.ts index e47d59aadf..8ea89e974c 100644 --- a/src/app/statistics/matomo.service.ts +++ b/src/app/statistics/matomo.service.ts @@ -10,6 +10,7 @@ import { combineLatest, from as fromPromise, Observable, + of, switchMap, } from 'rxjs'; import { @@ -114,6 +115,11 @@ export class MatomoService { * @returns An Observable that emits the Matomo tracker URL if available. */ getTrackerUrl$() { + + if (isNotEmpty(environment.matomo?.trackerUrl)) { + return of(environment.matomo.trackerUrl); + } + return this.configService.findByPropertyName(MATOMO_TRACKER_URL) .pipe( getFirstCompletedRemoteData(), diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index 7f5f019958..a52cd6be35 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -24,6 +24,7 @@ import { InfoConfig } from './info-config.interface'; import { ItemConfig } from './item-config.interface'; import { LangConfig } from './lang-config.interface'; import { MarkdownConfig } from './markdown-config.interface'; +import { MatomoConfig } from './matomo-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; import { INotificationBoardOptions } from './notifications-config.interfaces'; import { QualityAssuranceConfig } from './quality-assurance.config'; @@ -66,6 +67,7 @@ interface AppConfig extends Config { search: SearchConfig; notifyMetrics: AdminNotifyMetricsRow[]; liveRegion: LiveRegionConfig; + matomo?: MatomoConfig; } /** diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 8b2eabacee..2ea08946fe 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -19,6 +19,7 @@ import { InfoConfig } from './info-config.interface'; import { ItemConfig } from './item-config.interface'; import { LangConfig } from './lang-config.interface'; import { MarkdownConfig } from './markdown-config.interface'; +import { MatomoConfig } from './matomo-config.interface'; import { MediaViewerConfig } from './media-viewer-config.interface'; import { INotificationBoardOptions } from './notifications-config.interfaces'; import { QualityAssuranceConfig } from './quality-assurance.config'; @@ -600,4 +601,5 @@ export class DefaultAppConfig implements AppConfig { isVisible: false, }; + matomo: MatomoConfig = {}; } diff --git a/src/config/matomo-config.interface.ts b/src/config/matomo-config.interface.ts new file mode 100644 index 0000000000..4893502187 --- /dev/null +++ b/src/config/matomo-config.interface.ts @@ -0,0 +1,12 @@ +import { Config } from './config.interface'; + +/** + * Configuration interface for Matomo tracking + */ +export interface MatomoConfig extends Config { + /** + * This tracker url will be used instead of the one configured on REST side (matomo.tracker.url) + * only if set inside the config.*.yml configuration file + */ + trackerUrl?: string; +}