grafana/public/app/plugins/panel/alertlist/UnifiedalertList.test.tsx
Virginia Cepeda 48f0f4bb91
Alerting: subscribe to Dashboard refresh interval for alert panels (#56347)
* Subscribe to Dashboard refresh interval for alert panels

* Add test

* Remove unused import

* Use useEffectOnce when obtaining dashboard
2022-10-06 12:02:19 -03:00

86 lines
2.5 KiB
TypeScript

import { render } from '@testing-library/react';
import React from 'react';
import { Provider } from 'react-redux';
import { getDefaultTimeRange, LoadingState, PanelProps, FieldConfigSource } from '@grafana/data';
import { TimeRangeUpdatedEvent } from '@grafana/runtime';
import { DashboardSrv, setDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';
import { configureStore } from 'app/store/configureStore';
import { UnifiedAlertList } from './UnifiedAlertList';
import { UnifiedAlertListOptions, SortOrder, GroupMode, ViewMode } from './types';
jest.mock('app/features/alerting/unified/api/alertmanager');
const defaultOptions: UnifiedAlertListOptions = {
maxItems: 2,
sortOrder: SortOrder.AlphaAsc,
dashboardAlerts: true,
groupMode: GroupMode.Default,
groupBy: [''],
alertName: 'test',
showInstances: false,
folder: { id: 1, title: 'test folder' },
stateFilter: { firing: true, pending: false, noData: false, normal: true, error: false },
alertInstanceLabelFilter: '',
datasource: 'Alertmanager',
viewMode: ViewMode.List,
};
const defaultProps: PanelProps<UnifiedAlertListOptions> = {
data: { state: LoadingState.Done, series: [], timeRange: getDefaultTimeRange() },
id: 1,
timeRange: getDefaultTimeRange(),
timeZone: 'utc',
options: defaultOptions,
eventBus: {
subscribe: jest.fn(),
getStream: jest.fn(),
publish: jest.fn(),
removeAllListeners: jest.fn(),
newScopedBus: jest.fn(),
},
fieldConfig: {} as unknown as FieldConfigSource,
height: 400,
onChangeTimeRange: jest.fn(),
onFieldConfigChange: jest.fn(),
onOptionsChange: jest.fn(),
renderCounter: 1,
replaceVariables: jest.fn(),
title: 'Alert groups test',
transparent: false,
width: 320,
};
const dashboard = {
id: 1,
formatDate: (time: number) => new Date(time).toISOString(),
events: {
subscribe: jest.fn(),
},
};
const renderPanel = (options: UnifiedAlertListOptions = defaultOptions) => {
const store = configureStore();
const dashSrv: unknown = { getCurrent: () => dashboard };
setDashboardSrv(dashSrv as DashboardSrv);
defaultProps.options = options;
const props = { ...defaultProps };
return render(
<Provider store={store}>
<UnifiedAlertList {...props} />
</Provider>
);
};
describe('UnifiedAlertList', () => {
it('subscribes to the dashboard refresh interval', async () => {
await renderPanel();
expect(dashboard.events.subscribe).toHaveBeenCalledTimes(1);
expect(dashboard.events.subscribe.mock.calls[0][0]).toEqual(TimeRangeUpdatedEvent);
});
});