Explore: Add unit tests for addQueryRow() and generateEmptyQuery() (#60977)

* feat: add condition

* refactor: clea up

* refactor: remove changes and add my solution as comment

* feat: add test

* refactor: test preparation

* refactor: finish test prep and remove planned changed from addQueryRow()

* refactor: finish first test

* refactor: add required props after removing any (not complete)

* refactor: replace props and clean up

* refactor: add another test

* refactor: extend tests with datasourceInstance

* refactor: add test for mixed ds enabled

* refactor: remove typescript errors

* feat: add first attempt of a test for generateEmptyQuery()

* feat: setup first test for generateEmptyQuery()

* refactor: remove typescript errors

* feat: add another test for generateEmptyQuery()

* refactor: add some assertions

* refactor: restructure tests

* refactor: remove doubled code

* refactor: remove typescript errors

* refactor: remove mocking mistake and add test

* refactor: remove mocking mistakes

* refactor: repair mock for feature toggle

* refactor: clean up

* refactor: changes from code review
This commit is contained in:
Laura Benz
2023-01-31 10:13:08 +01:00
committed by GitHub
parent 51bef166c2
commit 439dd062da
2 changed files with 248 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ import { serializeStateToUrlParam } from '@grafana/data/src/utils/url';
import { RefreshPicker } from '@grafana/ui';
import store from 'app/core/store';
import { DatasourceSrvMock, MockDataSourceApi } from '../../../test/mocks/datasource_srv';
import { ExploreId } from '../../types';
import {
@@ -19,6 +20,7 @@ import {
GetExploreUrlArguments,
getTimeRangeFromUrl,
getTimeRange,
generateEmptyQuery,
} from './explore';
const DEFAULT_EXPLORE_STATE: ExploreUrlState = {
@@ -27,6 +29,22 @@ const DEFAULT_EXPLORE_STATE: ExploreUrlState = {
range: DEFAULT_RANGE,
};
const defaultDs = new MockDataSourceApi('default datasource', { data: ['default data'] });
const datasourceSrv = new DatasourceSrvMock(defaultDs, {
'generate empty query': new MockDataSourceApi('generateEmptyQuery'),
ds1: {
name: 'testDs',
type: 'loki',
} as MockDataSourceApi,
});
const getDataSourceSrvMock = jest.fn().mockReturnValue(datasourceSrv);
jest.mock('@grafana/runtime', () => ({
...(jest.requireActual('@grafana/runtime') as unknown as object),
getDataSourceSrv: () => getDataSourceSrvMock(),
}));
describe('state functions', () => {
describe('parseUrlState', () => {
it('returns default state on empty string', () => {
@@ -440,3 +458,28 @@ describe('when buildQueryTransaction', () => {
expect(transaction.request.interval).toEqual('2h');
});
});
describe('generateEmptyQuery', () => {
it('should generate query with dataSourceOverride and without queries', async () => {
const query = await generateEmptyQuery([], 1, { type: 'loki', uid: 'ds1' });
expect(query.datasource?.uid).toBe('ds1');
expect(query.datasource?.type).toBe('loki');
expect(query.refId).toBe('A');
});
it('should generate query without dataSourceOverride and with queries', async () => {
const query = await generateEmptyQuery(
[
{
datasource: { type: 'loki', uid: 'ds1' },
refId: 'A',
},
],
1
);
expect(query.datasource?.uid).toBe('ds1');
expect(query.datasource?.type).toBe('loki');
expect(query.refId).toBe('B');
});
});