UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

86 lines 3.05 kB
import dbInit from '../helpers/database-init.js'; import getLogger from '../../fixtures/no-logger.js'; import assert from 'assert'; import { randomId } from '../../../lib/util/index.js'; import { setupApp } from '../helpers/test-helper.js'; import { TEST_AUDIT_USER } from '../../../lib/types/index.js'; // The number of items to insert. const seedSegmentSpec = { featuresCount: 100, segmentsPerFeature: 5, constraintsPerSegment: 1, valuesPerConstraint: 100, }; // The database schema to populate. const seedSchema = 'seed'; const fetchSegments = (app) => { return app.services.segmentService.getAll(); }; const createSegment = (app, postData) => { return app.services.segmentService.create(postData, TEST_AUDIT_USER); }; const createFeatureToggle = (app, postData, expectStatusCode = 201) => { return app.request .post('/api/admin/features') .send(postData) .expect(expectStatusCode) .then((res) => res.body); }; const addSegmentToStrategy = (app, segmentId, strategyId) => { return app.services.segmentService.addToStrategy(segmentId, strategyId); }; const mockFeatureToggle = (overrides) => { return { name: randomId(), strategies: [{ name: randomId(), constraints: [], parameters: {} }], ...overrides, }; }; const seedConstraints = (spec) => { return Array.from({ length: spec.constraintsPerSegment }).map(() => ({ values: Array.from({ length: spec.valuesPerConstraint }).map(() => randomId().substring(0, 16)), operator: 'IN', contextName: 'x', })); }; const seedSegments = (spec) => { return Array.from({ length: spec.segmentsPerFeature }).map((v, i) => { return { name: `${seedSchema}_segment_${i}`, constraints: seedConstraints(spec), }; }); }; const seedFeatures = (spec) => { return Array.from({ length: spec.featuresCount }).map((v, i) => { return mockFeatureToggle({ name: `${seedSchema}_feature_${i}`, }); }); }; const seedSegmentsDatabase = async (app, spec) => { await Promise.all(seedSegments(spec).map((seed) => { return createSegment(app, seed); })); const features = await Promise.all(seedFeatures(spec).map(async (seed) => { return createFeatureToggle(app, seed); })); const segments = await fetchSegments(app); assert(features.length === spec.featuresCount); assert(segments.length === spec.segmentsPerFeature); const addSegment = (feature, segment) => { return addSegmentToStrategy(app, segment.id, feature.strategies[0].id); }; for (const feature of features) { await Promise.all(segments.map((segment) => addSegment(feature, segment))); } }; const main = async () => { const db = await dbInit(seedSchema, getLogger); const app = await setupApp(db.stores); await seedSegmentsDatabase(app, seedSegmentSpec); await app.destroy(); await db.destroy(); }; main().catch(console.error); //# sourceMappingURL=segment.seed.js.map