import { of } from 'rxjs'; import { DataQueryRequest, DataSourceApi, getDefaultTimeRange, LoadingState, PanelData } from '@grafana/data'; import { SceneTimeRange } from '../core/SceneTimeRange'; import { SceneQueryRunner } from './SceneQueryRunner'; const getDatasource = () => { return { getRef: () => ({ uid: 'test' }), }; }; jest.mock('app/features/plugins/datasource_srv', () => ({ getDatasourceSrv: jest.fn(() => ({ get: getDatasource, })), })); const runRequest = jest.fn().mockReturnValue( of({ state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange(), }) ); let sentRequest: DataQueryRequest | undefined; jest.mock('app/features/query/state/runRequest', () => ({ runRequest: (ds: DataSourceApi, request: DataQueryRequest) => { sentRequest = request; return runRequest(ds, request); }, })); describe('SceneQueryRunner', () => { describe('when activated and got no data', () => { it('should run queries', async () => { const queryRunner = new SceneQueryRunner({ queries: [{ refId: 'A' }], $timeRange: new SceneTimeRange(), }); expect(queryRunner.state.data).toBeUndefined(); queryRunner.activate(); await new Promise((r) => setTimeout(r, 1)); expect(queryRunner.state.data?.state).toBe(LoadingState.Done); // Default max data points expect(sentRequest?.maxDataPoints).toBe(500); }); }); describe('when activated and maxDataPointsFromWidth set to true', () => { it('should run queries', async () => { const queryRunner = new SceneQueryRunner({ queries: [{ refId: 'A' }], $timeRange: new SceneTimeRange(), maxDataPointsFromWidth: true, }); expect(queryRunner.state.data).toBeUndefined(); queryRunner.activate(); await new Promise((r) => setTimeout(r, 1)); expect(queryRunner.state.data?.state).toBeUndefined(); queryRunner.setContainerWidth(1000); expect(queryRunner.state.data?.state).toBeUndefined(); await new Promise((r) => setTimeout(r, 1)); expect(queryRunner.state.data?.state).toBe(LoadingState.Done); }); }); });