1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-23 20:07:40 +02:00
unleash.unleash/src/test/e2e/api/admin/client-metrics.e2e.test.ts

232 lines
6.3 KiB
TypeScript
Raw Normal View History

import dbInit, { ITestDb } from '../../helpers/database-init';
import { setupAppWithCustomConfig } from '../../helpers/test-helper';
import getLogger from '../../../fixtures/no-logger';
import { IClientMetricsEnv } from '../../../../lib/types/stores/client-metrics-store-v2';
let app;
let db: ITestDb;
beforeAll(async () => {
db = await dbInit('client_metrics_serial', getLogger);
app = await setupAppWithCustomConfig(db.stores, {
experimental: { metricsV2: { enabled: true } },
});
});
afterAll(async () => {
if (db) {
await db.destroy();
}
});
afterEach(async () => {
await db.reset();
await db.stores.clientMetricsStoreV2.deleteAll();
});
test('should return raw metrics, aggregated on key', async () => {
const date = new Date();
const metrics: IClientMetricsEnv[] = [
{
featureName: 'demo',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 2,
no: 2,
},
{
featureName: 't2',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 5,
no: 5,
},
{
featureName: 't2',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 2,
no: 99,
},
{
featureName: 'demo',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 3,
no: 2,
},
{
featureName: 'demo',
appName: 'web',
environment: 'test',
timestamp: date,
yes: 1,
no: 3,
},
];
await db.stores.clientMetricsStoreV2.batchInsertMetrics(metrics);
const { body: demo } = await app.request
.get('/api/admin/client-metrics/features/demo/raw')
.expect('Content-Type', /json/)
.expect(200);
const { body: t2 } = await app.request
.get('/api/admin/client-metrics/features/t2/raw')
.expect('Content-Type', /json/)
.expect(200);
expect(demo.data).toHaveLength(2);
expect(demo.data[0].environment).toBe('default');
expect(demo.data[0].yes).toBe(5);
expect(demo.data[0].no).toBe(4);
expect(demo.data[1].environment).toBe('test');
expect(demo.data[1].yes).toBe(1);
expect(demo.data[1].no).toBe(3);
expect(t2.data).toHaveLength(1);
expect(t2.data[0].environment).toBe('default');
expect(t2.data[0].yes).toBe(7);
expect(t2.data[0].no).toBe(104);
});
test('should return toggle summary', async () => {
const date = new Date();
const metrics: IClientMetricsEnv[] = [
{
featureName: 'demo',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 2,
no: 2,
},
{
featureName: 't2',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 5,
no: 5,
},
{
featureName: 't2',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 2,
no: 99,
},
{
featureName: 'demo',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 3,
no: 2,
},
{
featureName: 'demo',
appName: 'web',
environment: 'test',
timestamp: date,
yes: 1,
no: 3,
},
{
featureName: 'demo',
appName: 'backend-api',
environment: 'test',
timestamp: date,
yes: 1,
no: 3,
},
];
await db.stores.clientMetricsStoreV2.batchInsertMetrics(metrics);
const { body: demo } = await app.request
.get('/api/admin/client-metrics/features/demo')
.expect('Content-Type', /json/)
.expect(200);
expect(demo.featureName).toBe('demo');
expect(demo.lastHourUsage).toHaveLength(2);
expect(demo.lastHourUsage[0].environment).toBe('default');
expect(demo.lastHourUsage[0].yes).toBe(5);
expect(demo.lastHourUsage[0].no).toBe(4);
expect(demo.lastHourUsage[1].environment).toBe('test');
expect(demo.lastHourUsage[1].yes).toBe(2);
expect(demo.lastHourUsage[1].no).toBe(6);
expect(demo.seenApplications).toStrictEqual(['backend-api', 'web']);
});
test('should only include last hour of metrics return toggle summary', async () => {
const date = new Date();
const dateHoneHourAgo = new Date();
dateHoneHourAgo.setHours(-1);
const metrics: IClientMetricsEnv[] = [
{
featureName: 'demo',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 2,
no: 2,
},
{
featureName: 'demo',
appName: 'web',
environment: 'default',
timestamp: date,
yes: 3,
no: 2,
},
{
featureName: 'demo',
appName: 'web',
environment: 'test',
timestamp: date,
yes: 1,
no: 3,
},
{
featureName: 'demo',
appName: 'backend-api',
environment: 'test',
timestamp: date,
yes: 1,
no: 3,
},
{
featureName: 'demo',
appName: 'backend-api',
environment: 'test',
timestamp: dateHoneHourAgo,
yes: 55,
no: 55,
},
];
await db.stores.clientMetricsStoreV2.batchInsertMetrics(metrics);
const { body: demo } = await app.request
.get('/api/admin/client-metrics/features/demo')
.expect('Content-Type', /json/)
.expect(200);
expect(demo.featureName).toBe('demo');
expect(demo.lastHourUsage).toHaveLength(2);
expect(demo.lastHourUsage[0].environment).toBe('default');
expect(demo.lastHourUsage[0].yes).toBe(5);
expect(demo.lastHourUsage[0].no).toBe(4);
expect(demo.lastHourUsage[1].environment).toBe('test');
expect(demo.lastHourUsage[1].yes).toBe(2);
expect(demo.lastHourUsage[1].no).toBe(6);
expect(demo.seenApplications).toStrictEqual(['backend-api', 'web']);
});