2020-11-27 03:20:57 -06:00
|
|
|
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 =
|
2021-01-20 00:59:48 -06:00
|
|
|
variable ?? queryBuilder().withId('query').withName('query').withQuery(query).withDatasource('test-data').build();
|
2020-11-27 03:20:57 -06:00
|
|
|
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 () => {
|
2021-01-20 00:59:48 -06:00
|
|
|
const variable = customBuilder().withId('custom').withName('custom').build();
|
2020-11-27 03:20:57 -06:00
|
|
|
const { state, identifier, get, getDatasourceSrv } = getTestContext({ variable });
|
|
|
|
|
|
|
|
const dispatchedActions = await thunkTester(state)
|
|
|
|
.givenThunk(upgradeLegacyQueries)
|
|
|
|
.whenThunkIsDispatched(identifier, getDatasourceSrv);
|
|
|
|
|
|
|
|
expect(dispatchedActions).toEqual([]);
|
|
|
|
expect(get).toHaveBeenCalledTimes(0);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|