2016-11-28 17:11:11 +01:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const { test } = require('ava');
|
|
|
|
const ClientMetricStore = require('./client-metrics-store');
|
|
|
|
const sinon = require('sinon');
|
|
|
|
|
2017-06-28 10:17:14 +02:00
|
|
|
function getMockDb() {
|
2016-12-04 14:09:37 +01:00
|
|
|
const list = [
|
|
|
|
{ id: 4, metrics: { appName: 'test' } },
|
|
|
|
{ id: 3, metrics: { appName: 'test' } },
|
|
|
|
{ id: 2, metrics: { appName: 'test' } },
|
|
|
|
];
|
2016-11-28 17:11:11 +01:00
|
|
|
return {
|
2017-06-28 10:17:14 +02:00
|
|
|
getMetricsLastHour() {
|
2016-12-04 14:09:37 +01:00
|
|
|
return Promise.resolve([{ id: 1, metrics: { appName: 'test' } }]);
|
2016-11-28 17:11:11 +01:00
|
|
|
},
|
|
|
|
|
2017-06-28 10:17:14 +02:00
|
|
|
getNewMetrics() {
|
2016-11-28 17:11:11 +01:00
|
|
|
return Promise.resolve([list.pop() || { id: 0 }]);
|
2016-12-04 14:09:37 +01:00
|
|
|
},
|
2016-11-28 17:11:11 +01:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2017-06-28 10:17:14 +02:00
|
|
|
test.cb('should call database on startup', t => {
|
2016-11-28 17:11:11 +01:00
|
|
|
const mock = getMockDb();
|
|
|
|
|
|
|
|
const store = new ClientMetricStore(mock);
|
2016-12-04 14:09:37 +01:00
|
|
|
|
2016-11-28 17:11:11 +01:00
|
|
|
t.plan(2);
|
|
|
|
|
2017-06-28 10:17:14 +02:00
|
|
|
store.on('metrics', metrics => {
|
2016-11-28 17:11:11 +01:00
|
|
|
t.true(store.highestIdSeen === 1);
|
|
|
|
t.true(metrics.appName === 'test');
|
|
|
|
store.destroy();
|
2016-12-04 14:09:37 +01:00
|
|
|
|
2016-11-28 17:11:11 +01:00
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2017-06-28 10:17:14 +02:00
|
|
|
test.cb('should poll for updates', t => {
|
2016-11-28 17:11:11 +01:00
|
|
|
const clock = sinon.useFakeTimers();
|
|
|
|
|
|
|
|
const mock = getMockDb();
|
|
|
|
const store = new ClientMetricStore(mock, 100);
|
|
|
|
|
|
|
|
const metrics = [];
|
2017-06-28 10:17:14 +02:00
|
|
|
store.on('metrics', m => metrics.push(m));
|
2016-11-28 17:11:11 +01:00
|
|
|
|
|
|
|
t.true(metrics.length === 0);
|
|
|
|
|
|
|
|
store.on('ready', () => {
|
|
|
|
t.true(metrics.length === 1);
|
|
|
|
clock.tick(300);
|
|
|
|
process.nextTick(() => {
|
|
|
|
t.true(metrics.length === 4);
|
|
|
|
t.true(store.highestIdSeen === 4);
|
|
|
|
store.destroy();
|
|
|
|
clock.restore();
|
|
|
|
t.end();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|