The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/features/alerting/AlertTabCtrl.test.ts

84 lines
2.9 KiB

import { DashboardSrv } from '../dashboard/services/DashboardSrv';
import { DatasourceSrv } from '../plugins/datasource_srv';
import { AlertTabCtrl } from './AlertTabCtrl';
interface Args {
notifications?: Array<{ uid?: string; id?: number; isDefault: boolean }>;
}
function setupTestContext({ notifications = [] }: Args = {}) {
const panel = {
alert: { notifications },
options: [],
title: 'Testing Alerts',
};
const $scope = {
ctrl: {
panel,
render: jest.fn(),
},
};
const dashboardSrv = {} as DashboardSrv;
const uiSegmentSrv = {};
const datasourceSrv = {} as DatasourceSrv;
const controller = new AlertTabCtrl($scope, dashboardSrv, uiSegmentSrv, datasourceSrv);
controller.notifications = notifications;
controller.alertNotifications = [];
controller.initModel();
return { controller };
}
describe('AlertTabCtrl', () => {
describe('when removeNotification is called with an uid', () => {
it('then the correct notifier should be removed', () => {
const { controller } = setupTestContext({
notifications: [
{ id: 1, uid: 'one', isDefault: true },
{ id: 2, uid: 'two', isDefault: false },
],
});
expect(controller.alert.notifications).toEqual([
{ id: 1, uid: 'one', isDefault: true, iconClass: 'bell' },
{ id: 2, uid: 'two', isDefault: false, iconClass: 'bell' },
]);
expect(controller.alertNotifications).toEqual([
{ id: 2, uid: 'two', isDefault: false, iconClass: 'bell' },
{ id: 1, uid: 'one', isDefault: true, iconClass: 'bell' },
]);
controller.removeNotification({ uid: 'one' });
expect(controller.alert.notifications).toEqual([{ id: 2, uid: 'two', isDefault: false, iconClass: 'bell' }]);
expect(controller.alertNotifications).toEqual([{ id: 2, uid: 'two', isDefault: false, iconClass: 'bell' }]);
});
});
describe('when removeNotification is called with an id', () => {
it('then the correct notifier should be removed', () => {
const { controller } = setupTestContext({
notifications: [
{ id: 1, uid: 'one', isDefault: true },
{ id: 2, uid: 'two', isDefault: false },
],
});
expect(controller.alert.notifications).toEqual([
{ id: 1, uid: 'one', isDefault: true, iconClass: 'bell' },
{ id: 2, uid: 'two', isDefault: false, iconClass: 'bell' },
]);
expect(controller.alertNotifications).toEqual([
{ id: 2, uid: 'two', isDefault: false, iconClass: 'bell' },
{ id: 1, uid: 'one', isDefault: true, iconClass: 'bell' },
]);
controller.removeNotification({ id: 2 });
expect(controller.alert.notifications).toEqual([{ id: 1, uid: 'one', isDefault: true, iconClass: 'bell' }]);
expect(controller.alertNotifications).toEqual([{ id: 1, uid: 'one', isDefault: true, iconClass: 'bell' }]);
});
});
});