grafana/public/app/features/variables/state/upgradeLegacyQueries.test.ts

147 lines
5.4 KiB
TypeScript
Raw Normal View History

import { customBuilder, queryBuilder } from '../shared/testing/builders';
import { VariableSupportType } from '@grafana/data';
import { toVariableIdentifier } from './types';
import { upgradeLegacyQueries } from './actions';
import { changeVariableProp } from './sharedReducer';
import { thunkTester } from '../../../../test/core/thunk/thunkTester';
import { VariableModel } from '../types';
interface Args {
query?: any;
variable?: VariableModel;
datasource?: any;
}
function getTestContext({ query = '', variable, datasource }: Args = {}) {
variable =
variable ?? queryBuilder().withId('query').withName('query').withQuery(query).withDatasource('test-data').build();
const state = {
templating: {
variables: {
[variable.id]: variable,
},
},
};
datasource = datasource ?? {
name: 'TestData',
metricFindQuery: () => undefined,
variables: { getType: () => VariableSupportType.Standard, toDataQuery: () => undefined },
};
const get = jest.fn().mockResolvedValue(datasource);
const getDatasourceSrv = jest.fn().mockReturnValue({ get });
const identifier = toVariableIdentifier(variable);
return { state, get, getDatasourceSrv, identifier };
}
describe('upgradeLegacyQueries', () => {
describe('when called with a query variable for a standard variable supported data source that has not been upgraded', () => {
it('then it should dispatch changeVariableProp', async () => {
const { state, identifier, get, getDatasourceSrv } = getTestContext({ query: '*' });
const dispatchedActions = await thunkTester(state)
.givenThunk(upgradeLegacyQueries)
.whenThunkIsDispatched(identifier, getDatasourceSrv);
expect(dispatchedActions).toEqual([
changeVariableProp({
type: 'query',
id: 'query',
data: {
propName: 'query',
propValue: {
refId: 'TestData-query-Variable-Query',
query: '*',
},
},
}),
]);
expect(get).toHaveBeenCalledTimes(1);
expect(get).toHaveBeenCalledWith('test-data');
});
});
describe('when called with a query variable for a standard variable supported data source that has been upgraded', () => {
it('then it should not dispatch any actions', async () => {
const { state, identifier, get, getDatasourceSrv } = getTestContext({ query: { refId: 'A' } });
const dispatchedActions = await thunkTester(state)
.givenThunk(upgradeLegacyQueries)
.whenThunkIsDispatched(identifier, getDatasourceSrv);
expect(dispatchedActions).toEqual([]);
expect(get).toHaveBeenCalledTimes(1);
expect(get).toHaveBeenCalledWith('test-data');
});
});
describe('when called with a query variable for a legacy variable supported data source', () => {
it('then it should not dispatch any actions', async () => {
const datasource = {
name: 'TestData',
metricFindQuery: () => undefined,
};
const { state, identifier, get, getDatasourceSrv } = getTestContext({ datasource });
const dispatchedActions = await thunkTester(state)
.givenThunk(upgradeLegacyQueries)
.whenThunkIsDispatched(identifier, getDatasourceSrv);
expect(dispatchedActions).toEqual([]);
expect(get).toHaveBeenCalledTimes(1);
expect(get).toHaveBeenCalledWith('test-data');
});
});
describe('when called with a query variable for a custom variable supported data source', () => {
it('then it should not dispatch any actions', async () => {
const datasource = {
name: 'TestData',
metricFindQuery: () => undefined,
variables: { getType: () => VariableSupportType.Custom, query: () => undefined, editor: {} },
};
const { state, identifier, get, getDatasourceSrv } = getTestContext({ datasource });
const dispatchedActions = await thunkTester(state)
.givenThunk(upgradeLegacyQueries)
.whenThunkIsDispatched(identifier, getDatasourceSrv);
expect(dispatchedActions).toEqual([]);
expect(get).toHaveBeenCalledTimes(1);
expect(get).toHaveBeenCalledWith('test-data');
});
});
describe('when called with a query variable for a datasource variable supported data source', () => {
it('then it should not dispatch any actions', async () => {
const datasource = {
name: 'TestData',
metricFindQuery: () => undefined,
variables: { getType: () => VariableSupportType.Datasource },
};
const { state, identifier, get, getDatasourceSrv } = getTestContext({ datasource });
const dispatchedActions = await thunkTester(state)
.givenThunk(upgradeLegacyQueries)
.whenThunkIsDispatched(identifier, getDatasourceSrv);
expect(dispatchedActions).toEqual([]);
expect(get).toHaveBeenCalledTimes(1);
expect(get).toHaveBeenCalledWith('test-data');
});
});
describe('when called with a custom variable', () => {
it('then it should not dispatch any actions', async () => {
const variable = customBuilder().withId('custom').withName('custom').build();
const { state, identifier, get, getDatasourceSrv } = getTestContext({ variable });
const dispatchedActions = await thunkTester(state)
.givenThunk(upgradeLegacyQueries)
.whenThunkIsDispatched(identifier, getDatasourceSrv);
expect(dispatchedActions).toEqual([]);
expect(get).toHaveBeenCalledTimes(0);
});
});
});