1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/src/lib/db/client-metrics-store.test.ts

97 lines
2.6 KiB
TypeScript
Raw Normal View History

import EventEmitter from 'events';
import { ClientMetricsStore } from './client-metrics-store';
import getLogger from '../../test/fixtures/no-logger';
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' } },
];
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' } }]);
},
2017-06-28 10:17:14 +02:00
getNewMetrics() {
return Promise.resolve([list.pop() || { id: 0 }]);
2016-12-04 14:09:37 +01:00
},
destroy() {
// noop
},
};
}
test('should call database on startup', (done) => {
jest.useFakeTimers('modern');
const mock = getMockDb();
const ee = new EventEmitter();
const store = new ClientMetricsStore(mock as any, ee, getLogger);
2016-12-04 14:09:37 +01:00
jest.runAllTicks();
expect.assertions(2);
store.on('metrics', (metrics) => {
expect(store.highestIdSeen).toBe(1);
expect(metrics.appName).toBe('test');
store.destroy();
2016-12-04 14:09:37 +01:00
done();
});
});
test('should start poller even if initial database fetch fails', (done) => {
jest.useFakeTimers('modern');
2021-01-06 13:25:25 +01:00
getLogger.setMuteError(true);
const mock = getMockDb();
mock.getMetricsLastHour = () => Promise.reject(new Error('oops'));
const ee = new EventEmitter();
const store = new ClientMetricsStore(mock as any, ee, getLogger, 100);
jest.runAllTicks();
const metrics = [];
store.on('metrics', (m) => metrics.push(m));
store.on('ready', () => {
jest.useFakeTimers('modern');
expect(metrics).toHaveLength(0);
jest.advanceTimersByTime(300);
jest.useRealTimers();
process.nextTick(() => {
expect(metrics).toHaveLength(3);
expect(store.highestIdSeen).toBe(4);
store.destroy();
done();
});
});
2021-01-06 13:25:25 +01:00
getLogger.setMuteError(false);
});
test('should poll for updates', (done) => {
jest.useFakeTimers('modern');
const mock = getMockDb();
const ee = new EventEmitter();
const store = new ClientMetricsStore(mock as any, ee, getLogger, 100);
jest.runAllTicks();
const metrics = [];
store.on('metrics', (m) => metrics.push(m));
expect(metrics).toHaveLength(0);
store.on('ready', () => {
jest.useFakeTimers('modern');
expect(metrics).toHaveLength(1);
jest.advanceTimersByTime(300);
jest.useRealTimers();
process.nextTick(() => {
expect(metrics).toHaveLength(4);
expect(store.highestIdSeen).toBe(4);
store.destroy();
done();
});
});
});