grafana/public/app/features/alerting/state/ThresholdMapper.test.ts

139 lines
3.7 KiB
TypeScript

import { hiddenReducerTypes, ThresholdMapper } from './ThresholdMapper';
import alertDef from './alertDef';
const visibleReducerTypes = alertDef.reducerTypes
.filter(({ value }) => hiddenReducerTypes.indexOf(value) === -1)
.map(({ value }) => value);
describe('ThresholdMapper', () => {
describe('with greater than evaluator', () => {
it('can map query conditions to thresholds', () => {
const panel: any = {
type: 'graph',
options: { alertThresholds: true },
alert: {
conditions: [
{
type: 'query',
evaluator: { type: 'gt', params: [100] },
},
],
},
};
const updated = ThresholdMapper.alertToGraphThresholds(panel);
expect(updated).toBe(true);
expect(panel.thresholds[0].op).toBe('gt');
expect(panel.thresholds[0].value).toBe(100);
});
});
describe('with outside range evaluator', () => {
it('can map query conditions to thresholds', () => {
const panel: any = {
type: 'graph',
options: { alertThresholds: true },
alert: {
conditions: [
{
type: 'query',
evaluator: { type: 'outside_range', params: [100, 200] },
},
],
},
};
const updated = ThresholdMapper.alertToGraphThresholds(panel);
expect(updated).toBe(true);
expect(panel.thresholds[0].op).toBe('lt');
expect(panel.thresholds[0].value).toBe(100);
expect(panel.thresholds[1].op).toBe('gt');
expect(panel.thresholds[1].value).toBe(200);
});
});
describe('with inside range evaluator', () => {
it('can map query conditions to thresholds', () => {
const panel: any = {
type: 'graph',
options: { alertThresholds: true },
alert: {
conditions: [
{
type: 'query',
evaluator: { type: 'within_range', params: [100, 200] },
},
],
},
};
const updated = ThresholdMapper.alertToGraphThresholds(panel);
expect(updated).toBe(true);
expect(panel.thresholds[0].op).toBe('gt');
expect(panel.thresholds[0].value).toBe(100);
expect(panel.thresholds[1].op).toBe('lt');
expect(panel.thresholds[1].value).toBe(200);
});
});
visibleReducerTypes.forEach((type) => {
describe(`with {${type}} reducer`, () => {
it('visible should be true', () => {
const panel = getPanel({ reducerType: type });
const updated = ThresholdMapper.alertToGraphThresholds(panel);
expect(updated).toBe(true);
expect(panel.thresholds[0]).toEqual({
value: 100,
op: 'gt',
fill: true,
line: true,
colorMode: 'critical',
visible: true,
});
});
});
});
hiddenReducerTypes.forEach((type) => {
describe(`with {${type}} reducer`, () => {
it('visible should be false', () => {
const panel = getPanel({ reducerType: type });
const updated = ThresholdMapper.alertToGraphThresholds(panel);
expect(updated).toBe(true);
expect(panel.thresholds[0]).toEqual({
value: 100,
op: 'gt',
fill: true,
line: true,
colorMode: 'critical',
visible: false,
});
});
});
});
});
function getPanel({ reducerType }: { reducerType?: string } = {}) {
const panel: any = {
type: 'graph',
options: { alertThreshold: true },
alert: {
conditions: [
{
type: 'query',
evaluator: { type: 'gt', params: [100] },
reducer: { type: reducerType },
},
],
},
};
return panel;
}