mirror of
https://github.com/Unleash/unleash.git
synced 2025-11-10 01:19:53 +01:00
96 lines
3.0 KiB
TypeScript
96 lines
3.0 KiB
TypeScript
import type { ILargestResourcesReadModel } from './largest-resources-read-model-type.js';
|
|
import dbInit, {
|
|
type ITestDb,
|
|
} from '../../../../test/e2e/helpers/database-init.js';
|
|
import type { IFeatureToggleStore } from '../../feature-toggle/types/feature-toggle-store-type.js';
|
|
import getLogger from '../../../../test/fixtures/no-logger.js';
|
|
import type { IFeatureStrategiesStore } from '../../feature-toggle/types/feature-toggle-strategies-store-type.js';
|
|
import type { IFeatureStrategy } from '../../../types/index.js';
|
|
import { DEFAULT_ENV } from '../../../server-impl.js';
|
|
|
|
let db: ITestDb;
|
|
let largestResourcesReadModel: ILargestResourcesReadModel;
|
|
let featureToggleStore: IFeatureToggleStore;
|
|
let featureStrategiesStore: IFeatureStrategiesStore;
|
|
|
|
beforeAll(async () => {
|
|
db = await dbInit('largest_resources_read_model', getLogger);
|
|
featureToggleStore = db.stores.featureToggleStore;
|
|
featureStrategiesStore = db.stores.featureStrategiesStore;
|
|
largestResourcesReadModel = db.stores.largestResourcesReadModel;
|
|
});
|
|
|
|
afterAll(async () => {
|
|
if (db) {
|
|
await db.destroy();
|
|
}
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
await featureToggleStore.deleteAll();
|
|
});
|
|
|
|
type FeatureConfig = Pick<
|
|
IFeatureStrategy,
|
|
'featureName' | 'constraints' | 'parameters' | 'variants'
|
|
>;
|
|
const createFeature = async (config: FeatureConfig) => {
|
|
await featureToggleStore.create('default', {
|
|
name: config.featureName,
|
|
createdByUserId: 9999,
|
|
});
|
|
await featureStrategiesStore.createStrategyFeatureEnv({
|
|
strategyName: 'flexibleRollout',
|
|
projectId: 'default',
|
|
environment: DEFAULT_ENV,
|
|
featureName: config.featureName,
|
|
constraints: config.constraints,
|
|
parameters: config.parameters,
|
|
variants: config.variants,
|
|
});
|
|
};
|
|
|
|
test('can calculate resource size', async () => {
|
|
await createFeature({
|
|
featureName: 'featureA',
|
|
parameters: {
|
|
groupId: 'flag_init_test_1',
|
|
rollout: '25',
|
|
stickiness: 'default',
|
|
},
|
|
constraints: [
|
|
{
|
|
contextName: 'clientId',
|
|
operator: 'IN',
|
|
values: ['1', '2', '3', '4', '5', '6'],
|
|
caseInsensitive: false,
|
|
inverted: false,
|
|
},
|
|
],
|
|
variants: [
|
|
{
|
|
name: 'a',
|
|
weight: 1000,
|
|
weightType: 'fix',
|
|
stickiness: 'default',
|
|
},
|
|
],
|
|
});
|
|
|
|
await createFeature({
|
|
featureName: 'featureB',
|
|
parameters: {},
|
|
constraints: [],
|
|
variants: [],
|
|
});
|
|
|
|
const [project] =
|
|
await largestResourcesReadModel.getLargestProjectEnvironments(1);
|
|
const [feature1, feature2] =
|
|
await largestResourcesReadModel.getLargestFeatureEnvironments(2);
|
|
|
|
expect(project.size).toBeGreaterThan(400);
|
|
expect(project.size).toBe(feature1.size + feature2.size);
|
|
expect(feature1.size).toBeGreaterThan(feature2.size);
|
|
});
|