1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-22 19:07:54 +01:00
unleash.unleash/lib/db/client-metrics-store.test.js

63 lines
1.5 KiB
JavaScript

'use strict';
const { test } = require('ava');
const ClientMetricStore = require('./client-metrics-store');
const sinon = require('sinon');
function getMockDb () {
const list = [{ id: 4, metrics: {appName: 'test'} }, { id: 3, metrics: {appName: 'test'} }, { id: 2, metrics: {appName: 'test'} }];
return {
getMetricsLastHour () {
return Promise.resolve([{ id: 1, metrics: {appName: 'test'} }]);
},
getNewMetrics (v) {
return Promise.resolve([list.pop() || { id: 0 }]);
}
};
}
test.cb('should call database on startup', (t) => {
const mock = getMockDb();
const store = new ClientMetricStore(mock);
t.plan(2);
store.on('metrics', (metrics) => {
t.true(store.highestIdSeen === 1);
t.true(metrics.appName === 'test');
store.destroy();
t.end();
});
});
test.cb('should poll for updates', (t) => {
const clock = sinon.useFakeTimers();
const mock = getMockDb();
const store = new ClientMetricStore(mock, 100);
const metrics = [];
store.on('metrics', (m) => metrics.push(m));
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();
});
});
});