triggers panel: add tests for PanelCtrl

This commit is contained in:
Alexander Zobnin
2017-12-03 18:10:07 +03:00
parent 4607da7c0d
commit 6eb6f63416
8 changed files with 217 additions and 25 deletions

View File

@@ -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();
});
});

View 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;
}

View File

@@ -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

View File

@@ -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();
});
});

View 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;
}

View File

@@ -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);
});
}

View File

@@ -6,8 +6,10 @@ export class PanelCtrl {
this.$injector = $injector;
this.$scope = $scope;
this.panel = $scope.panel;
this.timing = {};
this.events = {
on: () => {}
on: () => {},
emit: () => {}
};
}