mirror of
https://github.com/Unleash/unleash.git
synced 2025-11-10 01:19:53 +01:00
Co-authored-by: Gitar Bot <noreply@gitar.co> Co-authored-by: sjaanus <sellinjaanus@gmail.com>
413 lines
12 KiB
TypeScript
413 lines
12 KiB
TypeScript
import dbInit, { type ITestDb } from '../../../test/e2e/helpers/database-init';
|
|
import {
|
|
type IUnleashTest,
|
|
setupAppWithCustomConfig,
|
|
} from '../../../test/e2e/helpers/test-helper';
|
|
import getLogger from '../../../test/fixtures/no-logger';
|
|
|
|
import { ApiTokenType, type IApiToken } from '../../types/models/api-token';
|
|
|
|
let app: IUnleashTest;
|
|
let db: ITestDb;
|
|
let defaultToken: IApiToken;
|
|
|
|
const metrics = {
|
|
appName: 'appName',
|
|
instanceId: 'instanceId',
|
|
bucket: {
|
|
start: '2016-11-03T07:16:43.572Z',
|
|
stop: '2016-11-03T07:16:53.572Z',
|
|
toggles: {
|
|
'toggle-name-1': {
|
|
yes: 123,
|
|
no: 321,
|
|
variants: {
|
|
'variant-1': 123,
|
|
'variant-2': 321,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
beforeAll(async () => {
|
|
db = await dbInit('projects_applications_serial', getLogger);
|
|
app = await setupAppWithCustomConfig(
|
|
db.stores,
|
|
{
|
|
experimental: {
|
|
flags: {
|
|
strictSchemaValidation: true,
|
|
},
|
|
},
|
|
},
|
|
db.rawDatabase,
|
|
);
|
|
defaultToken =
|
|
await app.services.apiTokenService.createApiTokenWithProjects({
|
|
type: ApiTokenType.CLIENT,
|
|
projects: ['default'],
|
|
environment: 'default',
|
|
tokenName: 'tester',
|
|
});
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await db.stores.clientMetricsStoreV2.deleteAll();
|
|
await db.stores.clientInstanceStore.deleteAll();
|
|
await db.stores.clientApplicationsStore.deleteAll();
|
|
await db.stores.featureToggleStore.deleteAll();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await app.destroy();
|
|
await db.destroy();
|
|
});
|
|
|
|
test('should return applications', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test:1.2',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.services.clientInstanceService.bulkAdd();
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'appName',
|
|
sdks: [
|
|
{
|
|
name: 'unleash-client-test',
|
|
versions: ['1.2'],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
total: 1,
|
|
});
|
|
});
|
|
|
|
test('should return applications if sdk was not in database', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.services.clientInstanceService.bulkAdd();
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'appName',
|
|
sdks: [],
|
|
},
|
|
],
|
|
total: 1,
|
|
});
|
|
});
|
|
|
|
test('should return application without version if sdk has just name', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.services.clientInstanceService.bulkAdd();
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'appName',
|
|
sdks: [
|
|
{
|
|
name: 'unleash-client-test',
|
|
versions: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
total: 1,
|
|
});
|
|
});
|
|
|
|
test('should sort by appName descending', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
const secondApp = 'second-app';
|
|
await app.request.post('/api/client/register').send({
|
|
appName: secondApp,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.services.clientInstanceService.bulkAdd();
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send({
|
|
...metrics,
|
|
appName: secondApp,
|
|
})
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications?sortOrder=desc')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'second-app',
|
|
sdks: [
|
|
{
|
|
name: 'unleash-client-test',
|
|
versions: [],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'appName',
|
|
sdks: [
|
|
{
|
|
name: 'unleash-client-test',
|
|
versions: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
total: 2,
|
|
});
|
|
});
|
|
|
|
test('should filter by sdk', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-java-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
const secondApp = 'second-app';
|
|
await app.request.post('/api/client/register').send({
|
|
appName: secondApp,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.services.clientInstanceService.bulkAdd();
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send({
|
|
...metrics,
|
|
appName: secondApp,
|
|
})
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications?&query=java')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'appName',
|
|
sdks: [
|
|
{
|
|
name: 'unleash-java-test',
|
|
versions: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
total: 1,
|
|
});
|
|
});
|
|
|
|
test('should show correct number of total', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.request.post('/api/client/register').send({
|
|
appName: metrics.appName,
|
|
instanceId: 'another-instance',
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
const secondApp = 'second-app';
|
|
await app.request.post('/api/client/register').send({
|
|
appName: secondApp,
|
|
instanceId: metrics.instanceId,
|
|
strategies: ['default'],
|
|
sdkVersion: 'unleash-client-test',
|
|
started: Date.now(),
|
|
interval: 10,
|
|
});
|
|
await app.services.clientInstanceService.bulkAdd();
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send({
|
|
...metrics,
|
|
appName: secondApp,
|
|
})
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications?sortOrder=desc&limit=1')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [
|
|
{
|
|
environments: ['default'],
|
|
instances: ['instanceId'],
|
|
name: 'second-app',
|
|
sdks: [
|
|
{
|
|
name: 'unleash-client-test',
|
|
versions: [],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
total: 2,
|
|
});
|
|
});
|
|
|
|
test('should not show if metrics exist, but application does not', async () => {
|
|
await app.createFeature('toggle-name-1');
|
|
|
|
await app.request
|
|
.post('/api/client/metrics')
|
|
.set('Authorization', defaultToken.secret)
|
|
.send(metrics)
|
|
.expect(202);
|
|
|
|
await app.services.clientMetricsServiceV2.bulkAdd();
|
|
|
|
const { body } = await app.request
|
|
.get('/api/admin/projects/default/applications?sortOrder=desc&limit=1')
|
|
.expect('Content-Type', /json/)
|
|
.expect(200);
|
|
|
|
expect(body).toMatchObject({
|
|
applications: [],
|
|
total: 0,
|
|
});
|
|
});
|