UNPKG

unleash-server

Version:

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

136 lines 4.86 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const test_config_1 = require("../../config/test-config"); const database_init_1 = __importDefault(require("../helpers/database-init")); const state_service_1 = __importDefault(require("../../../lib/services/state-service")); const variantsexport_v3_json_1 = __importDefault(require("../../examples/variantsexport_v3.json")); const model_1 = require("../../../lib/types/model"); let stores; let db; let stateService; beforeAll(async () => { const config = (0, test_config_1.createTestConfig)(); db = await (0, database_init_1.default)('state_service_serial', config.getLogger); stores = db.stores; stateService = new state_service_1.default(stores, config); }); afterAll(async () => { db.destroy(); }); test('Exporting featureEnvironmentVariants should work', async () => { await stores.projectStore.create({ id: 'fancy', name: 'extra', description: 'No surprises here', }); await stores.environmentStore.create({ name: 'dev', type: 'development', }); await stores.environmentStore.create({ name: 'prod', type: 'production', }); await stores.featureToggleStore.create('fancy', { name: 'Some-feature', }); await stores.featureToggleStore.create('fancy', { name: 'another-feature', }); await stores.featureEnvironmentStore.addEnvironmentToFeature('Some-feature', 'dev', true); await stores.featureEnvironmentStore.addEnvironmentToFeature('another-feature', 'dev', true); await stores.featureEnvironmentStore.addEnvironmentToFeature('another-feature', 'prod', true); await stores.featureEnvironmentStore.addVariantsToFeatureEnvironment('Some-feature', 'dev', [ { name: 'blue', weight: 333, stickiness: 'default', weightType: model_1.WeightType.VARIABLE, }, { name: 'green', weight: 333, stickiness: 'default', weightType: model_1.WeightType.VARIABLE, }, { name: 'red', weight: 333, stickiness: 'default', weightType: model_1.WeightType.VARIABLE, }, ]); await stores.featureEnvironmentStore.addVariantsToFeatureEnvironment('another-feature', 'dev', [ { name: 'purple', weight: 333, stickiness: 'default', weightType: '', }, { name: 'lilac', weight: 333, stickiness: 'default', weightType: '', }, { name: 'azure', weight: 333, stickiness: 'default', weightType: '', }, ]); await stores.featureEnvironmentStore.addVariantsToFeatureEnvironment('another-feature', 'prod', [ { name: 'purple', weight: 333, stickiness: 'default', weightType: '', }, { name: 'lilac', weight: 333, stickiness: 'default', weightType: '', }, { name: 'azure', weight: 333, stickiness: 'default', weightType: '', }, ]); const exportedData = await stateService.export({}); expect(exportedData.featureEnvironments.find((fE) => fE.featureName === 'Some-feature').variants).toHaveLength(3); }); test('Should import variants from old format and convert to new format (per environment)', async () => { await stateService.import({ data: variantsexport_v3_json_1.default, keepExisting: false, dropBeforeImport: true, }); let featureEnvironments = await stores.featureEnvironmentStore.getAll(); expect(featureEnvironments).toHaveLength(6); // There are 3 environments enabled and 2 features expect(featureEnvironments .filter((fE) => fE.featureName === 'variants-tester' && fE.enabled) .every((e) => e.variants.length === 4)).toBeTruthy(); }); test('Should import variants in new format (per environment)', async () => { await stateService.import({ data: variantsexport_v3_json_1.default, keepExisting: false, dropBeforeImport: true, }); let exportedJson = await stateService.export({}); await stateService.import({ data: exportedJson, keepExisting: false, dropBeforeImport: true, }); let featureEnvironments = await stores.featureEnvironmentStore.getAll(); expect(featureEnvironments).toHaveLength(6); // 3 environments, 2 features === 6 rows }); //# sourceMappingURL=state-service.e2e.test.js.map