1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-20 00:08:02 +01:00

test: compare frontend api implementations (#6515)

This commit is contained in:
Mateusz Kwasniewski 2024-03-12 12:22:27 +01:00 committed by GitHub
parent b7915171ff
commit 1d526e707b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -0,0 +1,151 @@
import { IApiUser, IUnleashConfig, IUnleashStores } from '../../types';
import dbInit, { ITestDb } from '../../../test/e2e/helpers/database-init';
import { FrontendApiService } from './frontend-api-service';
import { createFrontendApiService } from './createFrontendApiService';
import { createLastSeenService } from '../metrics/last-seen/createLastSeenService';
import ClientMetricsServiceV2 from '../metrics/client-metrics/metrics-service-v2';
import ConfigurationRevisionService from '../feature-toggle/configuration-revision-service';
import getLogger from '../../../test/fixtures/no-logger';
import { createTestConfig } from '../../../test/config/test-config';
import { ApiTokenType } from '../../types/models/api-token';
import FeatureToggleService from '../feature-toggle/feature-toggle-service';
import { createFeatureToggleService } from '../feature-toggle/createFeatureToggleService';
import {
FRONTEND_API_REPOSITORY_CREATED,
PROXY_REPOSITORY_CREATED,
} from '../../metric-events';
let stores: IUnleashStores;
let db: ITestDb;
let frontendApiService: FrontendApiService;
let featureToggleService: FeatureToggleService;
let configurationRevisionService: ConfigurationRevisionService;
let config: IUnleashConfig;
beforeAll(async () => {
db = await dbInit('frontend_api_service', getLogger);
stores = db.stores;
config = createTestConfig({
experimental: {
flags: {
globalFrontendApiCache: true,
},
},
});
const lastSeenService = createLastSeenService(db.rawDatabase, config);
const clientMetricsServiceV2 = new ClientMetricsServiceV2(
stores,
config,
lastSeenService,
);
configurationRevisionService = ConfigurationRevisionService.getInstance(
stores,
config,
);
frontendApiService = createFrontendApiService(
db.rawDatabase,
config,
clientMetricsServiceV2,
configurationRevisionService,
);
featureToggleService = createFeatureToggleService(db.rawDatabase, config);
});
afterAll(async () => {
await db.destroy();
});
const createProject = async (project: string) => {
await stores.projectStore.create({
name: project,
description: '',
id: project,
});
await stores.projectStore.addEnvironmentToProject(project, 'development');
await stores.projectStore.addEnvironmentToProject(project, 'production');
};
const createEnvironment = async (environment: string) => {
await stores.environmentStore.create({ name: environment, type: 'test' });
};
const createFeature = async (project: string, featureName: string) => {
await featureToggleService.createFeatureToggle(
project,
{ name: featureName, description: '' },
'user@example.com',
1,
);
};
const enableFeature = async (
project: string,
featureName: string,
environment: string,
) => {
await featureToggleService.unprotectedUpdateEnabled(
project,
featureName,
environment,
true,
'user@example.com',
);
};
test('Compare Frontend API implementations', async () => {
const projectA = 'projectA';
const projectB = 'projectB';
await createEnvironment('development');
await createEnvironment('production');
await createProject(projectA);
await createProject(projectB);
await createFeature(projectA, 'featureA'); // include
await createFeature(projectA, 'featureB'); // another env
await createFeature(projectA, 'featureC'); // not enabled
await createFeature(projectA, 'featureD'); // include
await enableFeature(projectA, 'featureA', 'development');
await enableFeature(projectA, 'featureD', 'development');
await enableFeature(projectA, 'featureB', 'production');
await createFeature(projectB, 'featureE'); // another project
await enableFeature(projectB, 'featureE', 'development');
await configurationRevisionService.updateMaxRevisionId();
let proxyRepositoriesCount = 0;
config.eventBus.on(PROXY_REPOSITORY_CREATED, () => {
proxyRepositoriesCount++;
});
let frontendRepositoriesCount = 0;
config.eventBus.on(FRONTEND_API_REPOSITORY_CREATED, () => {
frontendRepositoriesCount++;
});
const oldFeatures = await frontendApiService.getFrontendApiFeatures(
{
projects: [projectA],
environment: 'development',
type: ApiTokenType.FRONTEND,
} as IApiUser,
{ sessionId: '1234' },
);
const newFeatures = await frontendApiService.getNewFrontendApiFeatures(
{
projects: [projectA],
environment: 'development',
type: ApiTokenType.FRONTEND,
} as IApiUser,
{ sessionId: '1234' },
);
expect(proxyRepositoriesCount).toBe(1);
expect(frontendRepositoriesCount).toBe(1);
expect(oldFeatures).toEqual(newFeatures);
expect(newFeatures.length).toBe(2);
});