mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Alerting: Fix default query's data source when no default datasource specified (#55435)
This commit is contained in:
@@ -412,11 +412,14 @@ describe('RuleEditor', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const dataSources = {
|
const dataSources = {
|
||||||
default: mockDataSource({
|
default: mockDataSource(
|
||||||
type: 'prometheus',
|
{
|
||||||
name: 'Prom',
|
type: 'prometheus',
|
||||||
isDefault: true,
|
name: 'Prom',
|
||||||
}),
|
isDefault: true,
|
||||||
|
},
|
||||||
|
{ alerting: true }
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
jest.spyOn(backendSrv, 'getFolderByUid').mockResolvedValue({
|
jest.spyOn(backendSrv, 'getFolderByUid').mockResolvedValue({
|
||||||
|
|||||||
@@ -1,7 +1,24 @@
|
|||||||
|
import { render } from '@testing-library/react';
|
||||||
|
import React from 'react';
|
||||||
|
import { byLabelText, byTestId, byText } from 'testing-library-selector';
|
||||||
|
|
||||||
import { getDefaultRelativeTimeRange } from '@grafana/data';
|
import { getDefaultRelativeTimeRange } from '@grafana/data';
|
||||||
|
import { selectors } from '@grafana/e2e-selectors';
|
||||||
|
import { setDataSourceSrv } from '@grafana/runtime';
|
||||||
|
|
||||||
|
import { MockDataSourceApi } from '../../../../../../test/mocks/datasource_srv';
|
||||||
|
import { ExpressionDatasourceUID, instanceSettings } from '../../../../expressions/ExpressionDatasource';
|
||||||
|
import { mockDataSource, MockDataSourceSrv } from '../../mocks';
|
||||||
|
import { getDefaultQueries } from '../../utils/rule-form';
|
||||||
|
|
||||||
import { QueryEditor } from './QueryEditor';
|
import { QueryEditor } from './QueryEditor';
|
||||||
|
|
||||||
|
const ui = {
|
||||||
|
queryNames: byTestId<HTMLButtonElement>('query-name-div'),
|
||||||
|
dataSourcePicker: byLabelText<HTMLDivElement>(selectors.components.DataSourcePicker.container),
|
||||||
|
noDataSourcesWarning: byText('You appear to have no compatible data sources'),
|
||||||
|
};
|
||||||
|
|
||||||
const onChangeMock = jest.fn();
|
const onChangeMock = jest.fn();
|
||||||
describe('Query Editor', () => {
|
describe('Query Editor', () => {
|
||||||
it('should maintain the original query time range when duplicating it', () => {
|
it('should maintain the original query time range when duplicating it', () => {
|
||||||
@@ -46,4 +63,49 @@ describe('Query Editor', () => {
|
|||||||
{ ...query, ...{ refId: 'B', relativeTimeRange: defaultRange, model: { refId: 'B', hide: false } } },
|
{ ...query, ...{ refId: 'B', relativeTimeRange: defaultRange, model: { refId: 'B', hide: false } } },
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should select first data source supporting alerting when there is no default data source', async () => {
|
||||||
|
const dsServer = new MockDataSourceSrv({
|
||||||
|
influx: mockDataSource({ name: 'influx' }, { alerting: true }),
|
||||||
|
postgres: mockDataSource({ name: 'postgres' }, { alerting: true }),
|
||||||
|
[ExpressionDatasourceUID]: instanceSettings,
|
||||||
|
});
|
||||||
|
dsServer.get = () => Promise.resolve(new MockDataSourceApi());
|
||||||
|
|
||||||
|
setDataSourceSrv(dsServer);
|
||||||
|
|
||||||
|
const defaultQueries = getDefaultQueries();
|
||||||
|
|
||||||
|
render(<QueryEditor onChange={() => null} value={defaultQueries} />);
|
||||||
|
|
||||||
|
const queryRef = await ui.queryNames.findAll();
|
||||||
|
const select = await ui.dataSourcePicker.find();
|
||||||
|
|
||||||
|
expect(queryRef).toHaveLength(2);
|
||||||
|
expect(queryRef[0]).toHaveTextContent('A');
|
||||||
|
expect(queryRef[1]).toHaveTextContent('B');
|
||||||
|
expect(select).toHaveTextContent('influx'); // Alphabetical order
|
||||||
|
expect(ui.noDataSourcesWarning.query()).not.toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should select the default data source when specified', async () => {
|
||||||
|
const dsServer = new MockDataSourceSrv({
|
||||||
|
influx: mockDataSource({ name: 'influx' }, { alerting: true }),
|
||||||
|
postgres: mockDataSource({ name: 'postgres', isDefault: true }, { alerting: true }),
|
||||||
|
[ExpressionDatasourceUID]: instanceSettings,
|
||||||
|
});
|
||||||
|
dsServer.get = () => Promise.resolve(new MockDataSourceApi());
|
||||||
|
|
||||||
|
setDataSourceSrv(dsServer);
|
||||||
|
|
||||||
|
const defaultQueries = getDefaultQueries();
|
||||||
|
|
||||||
|
render(<QueryEditor onChange={() => null} value={defaultQueries} />);
|
||||||
|
|
||||||
|
const queryRef = await ui.queryNames.findAll();
|
||||||
|
const select = await ui.dataSourcePicker.find();
|
||||||
|
|
||||||
|
expect(queryRef).toHaveLength(2);
|
||||||
|
expect(select).toHaveTextContent('postgres'); // Default data source
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ export function getDatasourceAPIUid(dataSourceName: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getFirstCompatibleDataSource(): DataSourceInstanceSettings<DataSourceJsonData> | undefined {
|
export function getFirstCompatibleDataSource(): DataSourceInstanceSettings<DataSourceJsonData> | undefined {
|
||||||
return getRulesDataSources()[0];
|
return getDataSourceSrv().getList({ alerting: true })[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDefaultOrFirstCompatibleDataSource(): DataSourceInstanceSettings<DataSourceJsonData> | undefined {
|
export function getDefaultOrFirstCompatibleDataSource(): DataSourceInstanceSettings<DataSourceJsonData> | undefined {
|
||||||
|
|||||||
Reference in New Issue
Block a user