UNPKG

unleash-server

Version:

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

78 lines 3.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("../../types"); const createFeatureLifecycle_1 = require("./createFeatureLifecycle"); const events_1 = __importDefault(require("events")); const no_logger_1 = __importDefault(require("../../../test/fixtures/no-logger")); const metric_events_1 = require("../../metric-events"); test('can insert and read lifecycle stages', async () => { const eventBus = new events_1.default(); const { featureLifecycleService, eventStore, environmentStore, featureEnvironmentStore, } = (0, createFeatureLifecycle_1.createFakeFeatureLifecycleService)({ flagResolver: { isEnabled: () => true }, eventBus, getLogger: no_logger_1.default, }); const featureName = 'testFeature'; await featureEnvironmentStore.addEnvironmentToFeature(featureName, 'my-prod-environment', true); function emitMetricsEvent(environment) { eventBus.emit(types_1.CLIENT_METRICS_ADDED, [ { featureName, environment, }, ]); } function reachedStage(feature, name) { return new Promise((resolve) => eventBus.on(metric_events_1.STAGE_ENTERED, (event) => { if (event.stage === name && event.feature === feature) resolve(name); })); } await environmentStore.create({ name: 'my-dev-environment', type: 'test', }); await environmentStore.create({ name: 'my-prod-environment', type: 'production', }); await environmentStore.create({ name: 'my-another-dev-environment', type: 'development', }); await environmentStore.create({ name: 'my-another-prod-environment', type: 'production', }); featureLifecycleService.listen(); eventStore.emit(types_1.FEATURE_CREATED, { featureName }); await reachedStage(featureName, 'initial'); emitMetricsEvent('unknown-environment'); emitMetricsEvent('my-dev-environment'); await reachedStage(featureName, 'pre-live'); emitMetricsEvent('my-dev-environment'); emitMetricsEvent('my-another-dev-environment'); emitMetricsEvent('my-prod-environment'); await reachedStage(featureName, 'live'); emitMetricsEvent('my-prod-environment'); emitMetricsEvent('my-another-prod-environment'); eventStore.emit(types_1.FEATURE_ARCHIVED, { featureName }); await reachedStage(featureName, 'archived'); const lifecycle = await featureLifecycleService.getFeatureLifecycle(featureName); expect(lifecycle).toEqual([ { stage: 'initial', enteredStageAt: expect.any(Date) }, { stage: 'pre-live', enteredStageAt: expect.any(Date) }, { stage: 'live', enteredStageAt: expect.any(Date) }, { stage: 'archived', enteredStageAt: expect.any(Date) }, ]); eventStore.emit(types_1.FEATURE_REVIVED, { featureName }); await reachedStage(featureName, 'initial'); const initialLifecycle = await featureLifecycleService.getFeatureLifecycle(featureName); expect(initialLifecycle).toEqual([ { stage: 'initial', enteredStageAt: expect.any(Date) }, ]); }); //# sourceMappingURL=feature-lifecycle-service.test.js.map