diff --git a/src/app/datapoints-graph/charts/custom-measurements.service.spec.ts b/src/app/datapoints-graph/charts/custom-measurements.service.spec.ts index 614ad53d..d517bd45 100644 --- a/src/app/datapoints-graph/charts/custom-measurements.service.spec.ts +++ b/src/app/datapoints-graph/charts/custom-measurements.service.spec.ts @@ -1,6 +1,7 @@ import { fakeAsync, TestBed, tick } from '@angular/core/testing'; import { FetchClient, ISeries, Realtime } from '@c8y/client'; import { ApiService } from '@c8y/ngx-components/api'; +import { firstValueFrom } from 'rxjs'; import { CustomMeasurementService } from './custom-measurements.service'; describe('CustomMeasurementService', () => { @@ -26,17 +27,20 @@ describe('CustomMeasurementService', () => { .mockName('getFetchOptions') .mockReturnValue(options), getUrl: jest.fn().mockName('getFetchOptions').mockReturnValue(fullUrl), - fetch: jest.fn().mockName('fetch').mockImplementation(), + fetch: jest + .fn() + .mockName('fetch') + .mockImplementation(() => Promise.resolve(response)), } as any as FetchClient; TestBed.configureTestingModule({ providers: [ - CustomMeasurementService, { provide: FetchClient, useValue: client }, { provide: Realtime, useValue: {} }, { provide: ApiService, useValue: apiService, }, + CustomMeasurementService, ], }); service = TestBed.inject(CustomMeasurementService); @@ -61,23 +65,19 @@ describe('CustomMeasurementService', () => { }); })); - it('should call onFinish to trigger header loading bar', fakeAsync(() => { - // when - (global as any).fetch = jest - .fn() - .mockImplementationOnce(() => Promise.resolve(response)); - service.listSeries$({} as any).subscribe(); - tick(); - // then + it('should call onFinish to trigger header loading bar', async () => { + (global as any).fetch = jest.fn().mockResolvedValueOnce(response); + + await firstValueFrom(service.listSeries$({} as any)); expect(apiService.onFinish).toHaveBeenCalledWith({ - options, method: 'GET', - url: '/measurement/measurements/series', + options, response, + url: '/measurement/measurements/series', }); - })); + }); - it('should return resolved data', fakeAsync(() => { + it('should return resolved data', (done) => { // when const values = { [new Date().toString()]: [{ min: 0, max: 1 }] }; (global as any).fetch = jest.fn().mockImplementationOnce(() => @@ -85,12 +85,9 @@ describe('CustomMeasurementService', () => { json: () => ({ values } as ISeries), }) ); - let resolvedData; - service - .listSeries$({} as any) - .subscribe((val) => (resolvedData = val.data)); - tick(); - // then - expect(resolvedData.values).toEqual(values); - })); + service.listSeries$({} as any).subscribe((val) => { + expect(val.data.values).toEqual(values); + done(); + }); + }); }); diff --git a/src/app/datapoints-graph/charts/custom-measurements.service.ts b/src/app/datapoints-graph/charts/custom-measurements.service.ts index 15d631f3..4d3fd6be 100644 --- a/src/app/datapoints-graph/charts/custom-measurements.service.ts +++ b/src/app/datapoints-graph/charts/custom-measurements.service.ts @@ -17,10 +17,12 @@ import { cloneDeep } from 'lodash-es'; @Injectable() export class CustomMeasurementService extends MeasurementService { - apiService: ApiService; - constructor(client: FetchClient, realtime: Realtime, apiService: ApiService) { + constructor( + client: FetchClient, + realtime: Realtime, + private apiService: ApiService + ) { super(client, realtime); - this.apiService = apiService; } listSeries$(params: ISeriesFilter): Observable> { @@ -50,6 +52,7 @@ export class CustomMeasurementService extends MeasurementService { switchMap(async (res) => { callOnFinish.response = res; const data = await res.json(); + return { res: res as IFetchResponse, data }; }), finalize(() => {