mirror of
https://github.com/grafana/grafana.git
synced 2025-02-20 11:48:34 -06:00
79 lines
3.4 KiB
TypeScript
79 lines
3.4 KiB
TypeScript
|
import { migrateVariablesDatasourceNameToRef } from './actions';
|
||
|
import { adHocBuilder, queryBuilder } from '../shared/testing/builders';
|
||
|
import { DataSourceRef } from '@grafana/data/src';
|
||
|
import { changeVariableProp } from './sharedReducer';
|
||
|
import { toVariablePayload } from './types';
|
||
|
|
||
|
function getTestContext(ds: DataSourceRef, dsInstance?: { uid: string; type: string }) {
|
||
|
jest.clearAllMocks();
|
||
|
const query = queryBuilder().withId('query').withName('query').withDatasource(ds).build();
|
||
|
const adhoc = adHocBuilder().withId('adhoc').withName('adhoc').withDatasource(ds).build();
|
||
|
const state = { templating: { variables: [query, adhoc] } };
|
||
|
const dispatch = jest.fn();
|
||
|
const getState = jest.fn().mockReturnValue(state);
|
||
|
const getInstanceSettingsMock = jest.fn().mockReturnValue(dsInstance);
|
||
|
const getDatasourceSrvFunc = jest.fn().mockReturnValue({
|
||
|
get: jest.fn().mockResolvedValue({}),
|
||
|
getList: jest.fn().mockReturnValue([]),
|
||
|
getInstanceSettings: getInstanceSettingsMock,
|
||
|
});
|
||
|
|
||
|
return { query, adhoc, dispatch, getState, getDatasourceSrvFunc };
|
||
|
}
|
||
|
|
||
|
describe('migrateVariablesDatasourceNameToRef', () => {
|
||
|
describe('when called and variables have legacy data source props', () => {
|
||
|
describe('and data source exists', () => {
|
||
|
it('then correct actions are dispatched', async () => {
|
||
|
const legacyDs = ('${ds}' as unknown) as DataSourceRef;
|
||
|
const { query, adhoc, dispatch, getState, getDatasourceSrvFunc } = getTestContext(legacyDs, {
|
||
|
uid: 'a random uid',
|
||
|
type: 'prometheus',
|
||
|
});
|
||
|
|
||
|
migrateVariablesDatasourceNameToRef(getDatasourceSrvFunc)(dispatch, getState, undefined);
|
||
|
|
||
|
expect(dispatch).toHaveBeenCalledTimes(2);
|
||
|
expect(dispatch.mock.calls[0][0]).toEqual(
|
||
|
changeVariableProp(
|
||
|
toVariablePayload(query, { propName: 'datasource', propValue: { uid: 'a random uid', type: 'prometheus' } })
|
||
|
)
|
||
|
);
|
||
|
expect(dispatch.mock.calls[1][0]).toEqual(
|
||
|
changeVariableProp(
|
||
|
toVariablePayload(adhoc, { propName: 'datasource', propValue: { uid: 'a random uid', type: 'prometheus' } })
|
||
|
)
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('and data source does not exist', () => {
|
||
|
it('then correct actions are dispatched', async () => {
|
||
|
const legacyDs = ('${ds}' as unknown) as DataSourceRef;
|
||
|
const { query, adhoc, dispatch, getState, getDatasourceSrvFunc } = getTestContext(legacyDs, undefined);
|
||
|
|
||
|
migrateVariablesDatasourceNameToRef(getDatasourceSrvFunc)(dispatch, getState, undefined);
|
||
|
|
||
|
expect(dispatch).toHaveBeenCalledTimes(2);
|
||
|
expect(dispatch.mock.calls[0][0]).toEqual(
|
||
|
changeVariableProp(toVariablePayload(query, { propName: 'datasource', propValue: { uid: '${ds}' } }))
|
||
|
);
|
||
|
expect(dispatch.mock.calls[1][0]).toEqual(
|
||
|
changeVariableProp(toVariablePayload(adhoc, { propName: 'datasource', propValue: { uid: '${ds}' } }))
|
||
|
);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('when called and variables have dataSourceRef', () => {
|
||
|
it('then no actions are dispatched', async () => {
|
||
|
const legacyDs = { uid: '${ds}', type: 'prometheus' };
|
||
|
const { dispatch, getState, getDatasourceSrvFunc } = getTestContext(legacyDs, undefined);
|
||
|
|
||
|
migrateVariablesDatasourceNameToRef(getDatasourceSrvFunc)(dispatch, getState, undefined);
|
||
|
|
||
|
expect(dispatch).toHaveBeenCalledTimes(0);
|
||
|
});
|
||
|
});
|
||
|
});
|