Skip to content

Commit aa796fe

Browse files
author
Andrea Barbasso
committed
[DSC-1570] write tests
1 parent 13b3d18 commit aa796fe

2 files changed

Lines changed: 84 additions & 8 deletions

File tree

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,93 @@
11
import { TestBed } from '@angular/core/testing';
2-
2+
import { MockStore, provideMockStore } from '@ngrx/store/testing';
33
import { DatadogRumService } from './datadog-rum.service';
4+
import { CookieConsents, KlaroService } from '../cookies/klaro.service';
5+
import { of } from 'rxjs';
6+
import { environment } from '../../../environments/environment';
7+
import { setDatadogRumStatusAction } from './datadog-rum.actions';
48

59
describe('DatadogRumService', () => {
610
let service: DatadogRumService;
11+
let store: MockStore;
12+
let klaroService: KlaroService;
13+
let memoizedSelector;
14+
15+
const initialState = {
16+
datadogRum: {
17+
isInitialized: false,
18+
isRunning: false
19+
}
20+
};
21+
22+
const consentsAccepted: CookieConsents = {
23+
datadog: true
24+
};
25+
26+
const klaroServiceSpy = jasmine.createSpyObj('KlaroService', {
27+
getSavedPreferences: jasmine.createSpy('getSavedPreferences'),
28+
watchConsentUpdates: jasmine.createSpy('watchConsentUpdates')
29+
}, {
30+
consentsUpdates$: of(consentsAccepted)
31+
});
32+
33+
const datadogRumEnvironmentOptions = {
34+
clientToken: 'clientToken',
35+
applicationId: 'applicationId',
36+
service: 'service',
37+
env: 'env'
38+
};
739

840
beforeEach(() => {
9-
TestBed.configureTestingModule({});
41+
TestBed.configureTestingModule({
42+
providers: [
43+
DatadogRumService,
44+
provideMockStore({initialState}),
45+
{provide: KlaroService, useValue: klaroServiceSpy},
46+
]
47+
});
1048
service = TestBed.inject(DatadogRumService);
49+
store = TestBed.inject(MockStore);
50+
memoizedSelector = store.overrideSelector(service.datadogRumStateSelector, initialState.datadogRum);
51+
klaroService = TestBed.inject(KlaroService);
52+
53+
spyOn(store, 'dispatch');
1154
});
1255

1356
it('should be created', () => {
1457
expect(service).toBeTruthy();
1558
});
59+
60+
it('should dispatch setDatadogRumStatusAction with isInitialized and isRunning true when datadog cookie is accepted', () => {
61+
memoizedSelector.setResult({isInitialized: false, isRunning: false});
62+
store.refreshState();
63+
consentsAccepted.datadog = true;
64+
environment.datadogRum = datadogRumEnvironmentOptions;
65+
service.initDatadogRum();
66+
expect(store.dispatch).toHaveBeenCalledWith(new setDatadogRumStatusAction({
67+
isInitialized: true,
68+
isRunning: true
69+
}));
70+
});
71+
72+
it('should dispatch setDatadogRumStatusAction with isRunning true when datadog cookie is accepted and isInitialized is true', () => {
73+
memoizedSelector.setResult({isInitialized: true, isRunning: false});
74+
store.refreshState();
75+
consentsAccepted.datadog = true;
76+
environment.datadogRum = datadogRumEnvironmentOptions;
77+
service.initDatadogRum();
78+
expect(store.dispatch).toHaveBeenCalledWith(new setDatadogRumStatusAction({
79+
isRunning: true
80+
}));
81+
});
82+
83+
it('should dispatch setDatadogRumStatusAction with isRunning false when datadog cookie is not accepted', () => {
84+
memoizedSelector.setResult({isInitialized: true, isRunning: true});
85+
store.refreshState();
86+
consentsAccepted.datadog = false;
87+
service.initDatadogRum();
88+
expect(store.dispatch).toHaveBeenCalledWith(new setDatadogRumStatusAction({
89+
isRunning: false
90+
}));
91+
});
92+
1693
});

src/app/shared/datadog-rum/datadog-rum.service.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ import { distinctUntilChanged, take } from 'rxjs/operators';
1010
import { coreSelector } from '../../core/core.selectors';
1111
import { CoreState } from '../../core/core-state.model';
1212

13-
export const getDatadogRumState = createSelector(coreSelector, (state: CoreState) => state.datadogRum);
14-
1513
@Injectable({
1614
providedIn: 'root'
1715
})
1816
export class DatadogRumService {
1917

20-
consentUpdates$: BehaviorSubject<CookieConsents>;
18+
consentsUpdates$: BehaviorSubject<CookieConsents>;
19+
datadogRumStateSelector = createSelector(coreSelector, (state: CoreState) => state.datadogRum);
2120

2221
constructor(
2322
private klaroService: KlaroService,
@@ -27,8 +26,8 @@ export class DatadogRumService {
2726

2827
initDatadogRum() {
2928
this.klaroService.watchConsentUpdates();
30-
this.consentUpdates$ = this.klaroService.consentsUpdates$;
31-
this.consentUpdates$.subscribe(savedPreferences => {
29+
this.consentsUpdates$ = this.klaroService.consentsUpdates$;
30+
this.consentsUpdates$.subscribe(savedPreferences => {
3231
this.getDatadogRumState().subscribe((state) => {
3332
if (savedPreferences?.datadog &&
3433
environment.datadogRum?.clientToken && environment.datadogRum?.applicationId &&
@@ -58,7 +57,7 @@ export class DatadogRumService {
5857

5958
getDatadogRumState(): Observable<DatadogRumState> {
6059
return this.store
61-
.select(getDatadogRumState)
60+
.select(this.datadogRumStateSelector)
6261
.pipe(
6362
distinctUntilChanged(),
6463
take(1),

0 commit comments

Comments
 (0)