triggers panel: add tests for PanelCtrl
This commit is contained in:
9
dist/panel-triggers/specs/migrations.spec.js
vendored
9
dist/panel-triggers/specs/migrations.spec.js
vendored
@@ -1,6 +1,5 @@
|
|||||||
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
|
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
|
||||||
import {DEFAULT_TARGET} from '../triggers_panel_ctrl';
|
import {DEFAULT_TARGET, DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
||||||
import {DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
|
||||||
|
|
||||||
describe('Triggers Panel schema migration', () => {
|
describe('Triggers Panel schema migration', () => {
|
||||||
let ctx = {};
|
let ctx = {};
|
||||||
@@ -39,7 +38,7 @@ describe('Triggers Panel schema migration', () => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should update old panel schema', (done) => {
|
it('should update old panel schema', () => {
|
||||||
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
|
||||||
let expected = {
|
let expected = {
|
||||||
@@ -71,10 +70,9 @@ describe('Triggers Panel schema migration', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
expect(updatedPanelCtrl.panel).toEqual(expected);
|
expect(updatedPanelCtrl.panel).toEqual(expected);
|
||||||
done();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create new panel with default schema', (done) => {
|
it('should create new panel with default schema', () => {
|
||||||
ctx.scope.panel = {};
|
ctx.scope.panel = {};
|
||||||
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
|
||||||
@@ -107,6 +105,5 @@ describe('Triggers Panel schema migration', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
expect(updatedPanelCtrl.panel).toEqual(expected);
|
expect(updatedPanelCtrl.panel).toEqual(expected);
|
||||||
done();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
96
dist/panel-triggers/specs/panel_ctrl.spec.js
vendored
Normal file
96
dist/panel-triggers/specs/panel_ctrl.spec.js
vendored
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
|
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
|
||||||
|
import {PANEL_DEFAULTS, DEFAULT_TARGET} from '../triggers_panel_ctrl';
|
||||||
|
|
||||||
|
describe('TriggerPanelCtrl', () => {
|
||||||
|
let ctx = {};
|
||||||
|
let datasourceSrvMock, zabbixDSMock;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
ctx = {scope: {panel: PANEL_DEFAULTS}};
|
||||||
|
zabbixDSMock = {
|
||||||
|
replaceTemplateVars: () => {},
|
||||||
|
zabbix: {
|
||||||
|
getTriggers: jest.fn().mockReturnValue([generateTrigger("1"), generateTrigger("1")]),
|
||||||
|
getAcknowledges: jest.fn().mockReturnValue(Promise.resolve([]))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
datasourceSrvMock = {
|
||||||
|
getMetricSources: () => {
|
||||||
|
return [
|
||||||
|
{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix_default' },
|
||||||
|
{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix' },
|
||||||
|
{ meta: {id: 'graphite'}, value: {}, name: 'graphite' },
|
||||||
|
];
|
||||||
|
},
|
||||||
|
get: () => Promise.resolve(zabbixDSMock)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('When adding new panel', () => {
|
||||||
|
it('should suggest all zabbix data sources', () => {
|
||||||
|
ctx.scope.panel = {};
|
||||||
|
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
expect(panelCtrl.available_datasources).toEqual([
|
||||||
|
'zabbix_default', 'zabbix'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should load first zabbix data source as default', () => {
|
||||||
|
ctx.scope.panel = {};
|
||||||
|
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
expect(panelCtrl.panel.datasources).toEqual([
|
||||||
|
'zabbix_default'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('When refreshing panel', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
ctx.scope.panel.datasources = ['zabbix_default', 'zabbix'];
|
||||||
|
ctx.scope.panel.targets = {
|
||||||
|
'zabbix_default': DEFAULT_TARGET,
|
||||||
|
'zabbix': DEFAULT_TARGET
|
||||||
|
};
|
||||||
|
zabbixDSMock.zabbix.getTriggers = jest.fn()
|
||||||
|
.mockReturnValueOnce([
|
||||||
|
generateTrigger(1, 1), generateTrigger(2, 11)
|
||||||
|
])
|
||||||
|
.mockReturnValueOnce([
|
||||||
|
generateTrigger(3, 2), generateTrigger(4, 3)
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sort triggers', (done) => {
|
||||||
|
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
panelCtrl.onRefresh().then(() => {
|
||||||
|
let trigger_ids = _.map(panelCtrl.triggerList, 'triggerid');
|
||||||
|
expect(trigger_ids).toEqual([
|
||||||
|
'2', '4', '3', '1'
|
||||||
|
]);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const defaultTrigger = {
|
||||||
|
triggerid: "1",
|
||||||
|
priority: 3,
|
||||||
|
lastchange: "1",
|
||||||
|
hosts: [],
|
||||||
|
lastEvent: []
|
||||||
|
};
|
||||||
|
|
||||||
|
function generateTrigger(id, timestamp, severity) {
|
||||||
|
let trigger = _.cloneDeep(defaultTrigger);
|
||||||
|
trigger.triggerid = id.toString();
|
||||||
|
if (severity) {
|
||||||
|
trigger.priority = severity;
|
||||||
|
}
|
||||||
|
if (timestamp) {
|
||||||
|
trigger.lastchange = timestamp;
|
||||||
|
}
|
||||||
|
return trigger;
|
||||||
|
}
|
||||||
16
dist/panel-triggers/triggers_panel_ctrl.js
vendored
16
dist/panel-triggers/triggers_panel_ctrl.js
vendored
@@ -3,7 +3,7 @@
|
|||||||
System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'app/plugins/sdk', './options_tab', './triggers_tab', './migrations'], function (_export, _context) {
|
System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'app/plugins/sdk', './options_tab', './triggers_tab', './migrations'], function (_export, _context) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var _, $, moment, utils, PanelCtrl, triggerPanelOptionsTab, triggerPanelTriggersTab, migratePanelSchema, _createClass, ZABBIX_DS_ID, DEFAULT_TARGET, DEFAULT_SEVERITY, DEFAULT_TIME_FORMAT, panelDefaults, triggerStatusMap, TriggerPanelCtrl;
|
var _, $, moment, utils, PanelCtrl, triggerPanelOptionsTab, triggerPanelTriggersTab, migratePanelSchema, _createClass, ZABBIX_DS_ID, DEFAULT_TARGET, DEFAULT_SEVERITY, DEFAULT_TIME_FORMAT, PANEL_DEFAULTS, triggerStatusMap, TriggerPanelCtrl;
|
||||||
|
|
||||||
function _classCallCheck(instance, Constructor) {
|
function _classCallCheck(instance, Constructor) {
|
||||||
if (!(instance instanceof Constructor)) {
|
if (!(instance instanceof Constructor)) {
|
||||||
@@ -99,7 +99,8 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
|||||||
_export('DEFAULT_SEVERITY', DEFAULT_SEVERITY);
|
_export('DEFAULT_SEVERITY', DEFAULT_SEVERITY);
|
||||||
|
|
||||||
DEFAULT_TIME_FORMAT = "DD MMM YYYY HH:mm:ss";
|
DEFAULT_TIME_FORMAT = "DD MMM YYYY HH:mm:ss";
|
||||||
panelDefaults = {
|
|
||||||
|
_export('PANEL_DEFAULTS', PANEL_DEFAULTS = {
|
||||||
schemaVersion: 2,
|
schemaVersion: 2,
|
||||||
datasources: [],
|
datasources: [],
|
||||||
targets: {},
|
targets: {},
|
||||||
@@ -127,7 +128,10 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
|||||||
triggerSeverity: DEFAULT_SEVERITY,
|
triggerSeverity: DEFAULT_SEVERITY,
|
||||||
okEventColor: 'rgba(0, 245, 153, 0.45)',
|
okEventColor: 'rgba(0, 245, 153, 0.45)',
|
||||||
ackEventColor: 'rgba(0, 0, 0, 0)'
|
ackEventColor: 'rgba(0, 0, 0, 0)'
|
||||||
};
|
});
|
||||||
|
|
||||||
|
_export('PANEL_DEFAULTS', PANEL_DEFAULTS);
|
||||||
|
|
||||||
triggerStatusMap = {
|
triggerStatusMap = {
|
||||||
'0': 'OK',
|
'0': 'OK',
|
||||||
'1': 'Problem'
|
'1': 'Problem'
|
||||||
@@ -156,7 +160,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
|||||||
_this.datasources = {};
|
_this.datasources = {};
|
||||||
|
|
||||||
_this.panel = migratePanelSchema(_this.panel);
|
_this.panel = migratePanelSchema(_this.panel);
|
||||||
_.defaults(_this.panel, _.cloneDeep(panelDefaults));
|
_.defaults(_this.panel, _.cloneDeep(PANEL_DEFAULTS));
|
||||||
|
|
||||||
_this.available_datasources = _.map(_this.getZabbixDataSources(), 'name');
|
_this.available_datasources = _.map(_this.getZabbixDataSources(), 'name');
|
||||||
if (_this.panel.datasources.length === 0) {
|
if (_this.panel.datasources.length === 0) {
|
||||||
@@ -288,10 +292,10 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
|||||||
|
|
||||||
return Promise.all(promises).then(function (results) {
|
return Promise.all(promises).then(function (results) {
|
||||||
return _.flatten(results);
|
return _.flatten(results);
|
||||||
}).then(function (triggers) {
|
|
||||||
return _this4.sortTriggers(triggers);
|
|
||||||
}).then(function (triggers) {
|
}).then(function (triggers) {
|
||||||
return _.map(triggers, _this4.formatTrigger.bind(_this4));
|
return _.map(triggers, _this4.formatTrigger.bind(_this4));
|
||||||
|
}).then(function (triggers) {
|
||||||
|
return _this4.sortTriggers(triggers);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,5 @@
|
|||||||
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
|
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
|
||||||
import {DEFAULT_TARGET} from '../triggers_panel_ctrl';
|
import {DEFAULT_TARGET, DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
||||||
import {DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
|
||||||
|
|
||||||
describe('Triggers Panel schema migration', () => {
|
describe('Triggers Panel schema migration', () => {
|
||||||
let ctx = {};
|
let ctx = {};
|
||||||
@@ -39,7 +38,7 @@ describe('Triggers Panel schema migration', () => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should update old panel schema', (done) => {
|
it('should update old panel schema', () => {
|
||||||
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
|
||||||
let expected = {
|
let expected = {
|
||||||
@@ -71,10 +70,9 @@ describe('Triggers Panel schema migration', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
expect(updatedPanelCtrl.panel).toEqual(expected);
|
expect(updatedPanelCtrl.panel).toEqual(expected);
|
||||||
done();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create new panel with default schema', (done) => {
|
it('should create new panel with default schema', () => {
|
||||||
ctx.scope.panel = {};
|
ctx.scope.panel = {};
|
||||||
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
|
||||||
@@ -107,6 +105,5 @@ describe('Triggers Panel schema migration', () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
expect(updatedPanelCtrl.panel).toEqual(expected);
|
expect(updatedPanelCtrl.panel).toEqual(expected);
|
||||||
done();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
96
src/panel-triggers/specs/panel_ctrl.spec.js
Normal file
96
src/panel-triggers/specs/panel_ctrl.spec.js
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
import _ from 'lodash';
|
||||||
|
import {TriggerPanelCtrl} from '../triggers_panel_ctrl';
|
||||||
|
import {PANEL_DEFAULTS, DEFAULT_TARGET} from '../triggers_panel_ctrl';
|
||||||
|
|
||||||
|
describe('TriggerPanelCtrl', () => {
|
||||||
|
let ctx = {};
|
||||||
|
let datasourceSrvMock, zabbixDSMock;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
ctx = {scope: {panel: PANEL_DEFAULTS}};
|
||||||
|
zabbixDSMock = {
|
||||||
|
replaceTemplateVars: () => {},
|
||||||
|
zabbix: {
|
||||||
|
getTriggers: jest.fn().mockReturnValue([generateTrigger("1"), generateTrigger("1")]),
|
||||||
|
getAcknowledges: jest.fn().mockReturnValue(Promise.resolve([]))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
datasourceSrvMock = {
|
||||||
|
getMetricSources: () => {
|
||||||
|
return [
|
||||||
|
{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix_default' },
|
||||||
|
{ meta: {id: 'alexanderzobnin-zabbix-datasource'}, value: {}, name: 'zabbix' },
|
||||||
|
{ meta: {id: 'graphite'}, value: {}, name: 'graphite' },
|
||||||
|
];
|
||||||
|
},
|
||||||
|
get: () => Promise.resolve(zabbixDSMock)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('When adding new panel', () => {
|
||||||
|
it('should suggest all zabbix data sources', () => {
|
||||||
|
ctx.scope.panel = {};
|
||||||
|
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
expect(panelCtrl.available_datasources).toEqual([
|
||||||
|
'zabbix_default', 'zabbix'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should load first zabbix data source as default', () => {
|
||||||
|
ctx.scope.panel = {};
|
||||||
|
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
expect(panelCtrl.panel.datasources).toEqual([
|
||||||
|
'zabbix_default'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('When refreshing panel', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
ctx.scope.panel.datasources = ['zabbix_default', 'zabbix'];
|
||||||
|
ctx.scope.panel.targets = {
|
||||||
|
'zabbix_default': DEFAULT_TARGET,
|
||||||
|
'zabbix': DEFAULT_TARGET
|
||||||
|
};
|
||||||
|
zabbixDSMock.zabbix.getTriggers = jest.fn()
|
||||||
|
.mockReturnValueOnce([
|
||||||
|
generateTrigger(1, 1), generateTrigger(2, 11)
|
||||||
|
])
|
||||||
|
.mockReturnValueOnce([
|
||||||
|
generateTrigger(3, 2), generateTrigger(4, 3)
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should sort triggers', (done) => {
|
||||||
|
let panelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||||
|
panelCtrl.onRefresh().then(() => {
|
||||||
|
let trigger_ids = _.map(panelCtrl.triggerList, 'triggerid');
|
||||||
|
expect(trigger_ids).toEqual([
|
||||||
|
'2', '4', '3', '1'
|
||||||
|
]);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const defaultTrigger = {
|
||||||
|
triggerid: "1",
|
||||||
|
priority: 3,
|
||||||
|
lastchange: "1",
|
||||||
|
hosts: [],
|
||||||
|
lastEvent: []
|
||||||
|
};
|
||||||
|
|
||||||
|
function generateTrigger(id, timestamp, severity) {
|
||||||
|
let trigger = _.cloneDeep(defaultTrigger);
|
||||||
|
trigger.triggerid = id.toString();
|
||||||
|
if (severity) {
|
||||||
|
trigger.priority = severity;
|
||||||
|
}
|
||||||
|
if (timestamp) {
|
||||||
|
trigger.lastchange = timestamp;
|
||||||
|
}
|
||||||
|
return trigger;
|
||||||
|
}
|
||||||
@@ -27,7 +27,7 @@ export const DEFAULT_SEVERITY = [
|
|||||||
|
|
||||||
const DEFAULT_TIME_FORMAT = "DD MMM YYYY HH:mm:ss";
|
const DEFAULT_TIME_FORMAT = "DD MMM YYYY HH:mm:ss";
|
||||||
|
|
||||||
const panelDefaults = {
|
export const PANEL_DEFAULTS = {
|
||||||
schemaVersion: 2,
|
schemaVersion: 2,
|
||||||
datasources: [],
|
datasources: [],
|
||||||
targets: {},
|
targets: {},
|
||||||
@@ -81,7 +81,7 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
|||||||
this.datasources = {};
|
this.datasources = {};
|
||||||
|
|
||||||
this.panel = migratePanelSchema(this.panel);
|
this.panel = migratePanelSchema(this.panel);
|
||||||
_.defaults(this.panel, _.cloneDeep(panelDefaults));
|
_.defaults(this.panel, _.cloneDeep(PANEL_DEFAULTS));
|
||||||
|
|
||||||
this.available_datasources = _.map(this.getZabbixDataSources(), 'name');
|
this.available_datasources = _.map(this.getZabbixDataSources(), 'name');
|
||||||
if (this.panel.datasources.length === 0) {
|
if (this.panel.datasources.length === 0) {
|
||||||
@@ -200,11 +200,11 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
|||||||
|
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
.then(results => _.flatten(results))
|
.then(results => _.flatten(results))
|
||||||
.then((triggers) => {
|
|
||||||
return this.sortTriggers(triggers);
|
|
||||||
})
|
|
||||||
.then(triggers => {
|
.then(triggers => {
|
||||||
return _.map(triggers, this.formatTrigger.bind(this));
|
return _.map(triggers, this.formatTrigger.bind(this));
|
||||||
|
})
|
||||||
|
.then((triggers) => {
|
||||||
|
return this.sortTriggers(triggers);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,10 @@ export class PanelCtrl {
|
|||||||
this.$injector = $injector;
|
this.$injector = $injector;
|
||||||
this.$scope = $scope;
|
this.$scope = $scope;
|
||||||
this.panel = $scope.panel;
|
this.panel = $scope.panel;
|
||||||
|
this.timing = {};
|
||||||
this.events = {
|
this.events = {
|
||||||
on: () => {}
|
on: () => {},
|
||||||
|
emit: () => {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user