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 {DEFAULT_TARGET} from '../triggers_panel_ctrl';
|
||||
import {DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
||||
import {DEFAULT_TARGET, DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
||||
|
||||
describe('Triggers Panel schema migration', () => {
|
||||
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 expected = {
|
||||
@@ -71,10 +70,9 @@ describe('Triggers Panel schema migration', () => {
|
||||
};
|
||||
|
||||
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 = {};
|
||||
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||
|
||||
@@ -107,6 +105,5 @@ describe('Triggers Panel schema migration', () => {
|
||||
};
|
||||
|
||||
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) {
|
||||
"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) {
|
||||
if (!(instance instanceof Constructor)) {
|
||||
@@ -99,7 +99,8 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
_export('DEFAULT_SEVERITY', DEFAULT_SEVERITY);
|
||||
|
||||
DEFAULT_TIME_FORMAT = "DD MMM YYYY HH:mm:ss";
|
||||
panelDefaults = {
|
||||
|
||||
_export('PANEL_DEFAULTS', PANEL_DEFAULTS = {
|
||||
schemaVersion: 2,
|
||||
datasources: [],
|
||||
targets: {},
|
||||
@@ -127,7 +128,10 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
triggerSeverity: DEFAULT_SEVERITY,
|
||||
okEventColor: 'rgba(0, 245, 153, 0.45)',
|
||||
ackEventColor: 'rgba(0, 0, 0, 0)'
|
||||
};
|
||||
});
|
||||
|
||||
_export('PANEL_DEFAULTS', PANEL_DEFAULTS);
|
||||
|
||||
triggerStatusMap = {
|
||||
'0': 'OK',
|
||||
'1': 'Problem'
|
||||
@@ -156,7 +160,7 @@ System.register(['lodash', 'jquery', 'moment', '../datasource-zabbix/utils', 'ap
|
||||
_this.datasources = {};
|
||||
|
||||
_this.panel = migratePanelSchema(_this.panel);
|
||||
_.defaults(_this.panel, _.cloneDeep(panelDefaults));
|
||||
_.defaults(_this.panel, _.cloneDeep(PANEL_DEFAULTS));
|
||||
|
||||
_this.available_datasources = _.map(_this.getZabbixDataSources(), 'name');
|
||||
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 _.flatten(results);
|
||||
}).then(function (triggers) {
|
||||
return _this4.sortTriggers(triggers);
|
||||
}).then(function (triggers) {
|
||||
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 {DEFAULT_TARGET} from '../triggers_panel_ctrl';
|
||||
import {DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
||||
import {DEFAULT_TARGET, DEFAULT_SEVERITY} from '../triggers_panel_ctrl';
|
||||
|
||||
describe('Triggers Panel schema migration', () => {
|
||||
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 expected = {
|
||||
@@ -71,10 +70,9 @@ describe('Triggers Panel schema migration', () => {
|
||||
};
|
||||
|
||||
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 = {};
|
||||
let updatedPanelCtrl = new TriggerPanelCtrl(ctx.scope, {}, {}, datasourceSrvMock, {}, {}, {});
|
||||
|
||||
@@ -107,6 +105,5 @@ describe('Triggers Panel schema migration', () => {
|
||||
};
|
||||
|
||||
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 panelDefaults = {
|
||||
export const PANEL_DEFAULTS = {
|
||||
schemaVersion: 2,
|
||||
datasources: [],
|
||||
targets: {},
|
||||
@@ -81,7 +81,7 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
this.datasources = {};
|
||||
|
||||
this.panel = migratePanelSchema(this.panel);
|
||||
_.defaults(this.panel, _.cloneDeep(panelDefaults));
|
||||
_.defaults(this.panel, _.cloneDeep(PANEL_DEFAULTS));
|
||||
|
||||
this.available_datasources = _.map(this.getZabbixDataSources(), 'name');
|
||||
if (this.panel.datasources.length === 0) {
|
||||
@@ -200,11 +200,11 @@ export class TriggerPanelCtrl extends PanelCtrl {
|
||||
|
||||
return Promise.all(promises)
|
||||
.then(results => _.flatten(results))
|
||||
.then((triggers) => {
|
||||
return this.sortTriggers(triggers);
|
||||
})
|
||||
.then(triggers => {
|
||||
return _.map(triggers, this.formatTrigger.bind(this));
|
||||
})
|
||||
.then((triggers) => {
|
||||
return this.sortTriggers(triggers);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,10 @@ export class PanelCtrl {
|
||||
this.$injector = $injector;
|
||||
this.$scope = $scope;
|
||||
this.panel = $scope.panel;
|
||||
this.timing = {};
|
||||
this.events = {
|
||||
on: () => {}
|
||||
on: () => {},
|
||||
emit: () => {}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user