mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
139 lines
3.7 KiB
TypeScript
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;
|
|
}
|