1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-05 17:53:12 +02:00

Add test for replacing :global: environment on import

This commit is contained in:
Christopher Kolstad 2021-09-22 12:53:13 +02:00 committed by Ivar Conradi Østhus
parent 4a907680f5
commit babf76f88f
No known key found for this signature in database
GPG Key ID: 31AC596886B0BD09
3 changed files with 315 additions and 1 deletions

View File

@ -44,6 +44,7 @@ import { IEnvironmentStore } from '../types/stores/environment-store';
import { IFeatureEnvironmentStore } from '../types/stores/feature-environment-store';
import { IUnleashStores } from '../types/stores';
import { DEFAULT_ENV } from '../util/constants';
import { GLOBAL_ENV } from '../types/environment';
export interface IBackupOption {
includeFeatureToggles: boolean;
@ -118,12 +119,36 @@ export default class StateService {
);
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
replaceGlobalEnvWithDefaultEnv(data: any) {
data.environments?.forEach((e) => {
if (e.name === ':global:') {
e.name = DEFAULT_ENV;
}
});
data.featureEnvironments?.forEach((fe) => {
if (fe.environment === GLOBAL_ENV) {
// eslint-disable-next-line no-param-reassign
fe.environment = DEFAULT_ENV;
}
});
data.featureStrategies?.forEach((fs) => {
if (fs.environment === GLOBAL_ENV) {
// eslint-disable-next-line no-param-reassign
fs.environment = DEFAULT_ENV;
}
});
}
async import({
data,
userName = 'importUser',
dropBeforeImport = false,
keepExisting = true,
}: IImportData): Promise<void> {
if (data.version === 2) {
this.replaceGlobalEnvWithDefaultEnv(data);
}
const importData = await stateSchema.validateAsync(data);
if (importData.features) {
@ -576,7 +601,7 @@ export default class StateService {
environments,
featureEnvironments,
]) => ({
version: 2,
version: 3,
features,
strategies,
projects,

View File

@ -311,3 +311,17 @@ test('Roundtrip with strategies in multiple environments works', async () => {
const f = await app.services.featureToggleServiceV2.getFeature(featureName);
expect(f.environments).toHaveLength(2);
});
test(`Importing version 2 replaces :global: environment with 'default'`, async () => {
await app.request
.post('/api/admin/state/import')
.attach('file', 'src/test/examples/exported412-version2.json')
.expect(202);
const env = await app.services.environmentService.get(DEFAULT_ENV);
expect(env).toBeTruthy();
const feature = await app.services.featureToggleServiceV2.getFeatureToggle(
'this-is-fun',
);
expect(feature.environments).toHaveLength(1);
expect(feature.environments[0].name).toBe(DEFAULT_ENV);
});

View File

@ -0,0 +1,275 @@
{
"version": 2,
"features": [
{
"name": "this-is-fun",
"description": "",
"type": "release",
"project": "default",
"stale": false,
"variants": [],
"createdAt": "2021-09-17T07:06:40.925Z",
"lastSeenAt": null
},
{
"name": "version.three.seventeen",
"description": "",
"type": "operational",
"project": "default",
"stale": false,
"variants": [],
"createdAt": "2021-09-17T07:06:56.421Z",
"lastSeenAt": null
},
{
"name": "in-another-project",
"description": "",
"type": "release",
"project": "someother",
"stale": false,
"variants": [],
"createdAt": "2021-09-17T07:14:03.718Z",
"lastSeenAt": null
},
{
"name": "with-constraints",
"description": "",
"type": "release",
"project": "default",
"stale": false,
"variants": [],
"createdAt": "2021-09-17T07:14:39.509Z",
"lastSeenAt": null
},
{
"name": "another-toggle",
"description": "",
"type": "release",
"project": "someother",
"stale": false,
"variants": [],
"createdAt": "2021-09-17T07:22:16.404Z",
"lastSeenAt": null
},
{
"name": "toggle-created-in-4-1",
"description": "",
"type": "operational",
"project": "default",
"stale": false,
"variants": [],
"createdAt": "2021-09-17T07:24:13.897Z",
"lastSeenAt": null
}
],
"strategies": [
{
"name": "gradualRolloutRandom",
"description": "Randomly activate the feature toggle. No stickiness.",
"parameters": [
{
"name": "percentage",
"type": "percentage",
"description": "",
"required": false
}
],
"deprecated": true
},
{
"name": "gradualRolloutSessionId",
"description": "Gradually activate feature toggle. Stickiness based on session id.",
"parameters": [
{
"name": "percentage",
"type": "percentage",
"description": "",
"required": false
},
{
"name": "groupId",
"type": "string",
"description": "Used to define a activation groups, which allows you to correlate across feature toggles.",
"required": true
}
],
"deprecated": true
},
{
"name": "gradualRolloutUserId",
"description": "Gradually activate feature toggle for logged in users. Stickiness based on user id.",
"parameters": [
{
"name": "percentage",
"type": "percentage",
"description": "",
"required": false
},
{
"name": "groupId",
"type": "string",
"description": "Used to define a activation groups, which allows you to correlate across feature toggles.",
"required": true
}
],
"deprecated": true
}
],
"projects": [
{
"id": "default",
"name": "Default",
"description": "Default project",
"createdAt": "2021-09-17T05:06:16.299Z",
"health": 100
},
{
"id": "someother",
"name": "Some other project",
"description": "",
"createdAt": "2021-09-17T05:13:45.011Z",
"health": 100
}
],
"tagTypes": [
{
"name": "simple",
"description": "Used to simplify filtering of features",
"icon": "#"
}
],
"tags": [],
"featureTags": [],
"featureStrategies": [
{
"id": "2ea91298-4565-4db2-8a23-50757001a076",
"featureName": "this-is-fun",
"projectId": "default",
"environment": ":global:",
"strategyName": "gradualRolloutRandom",
"parameters": {
"percentage": "100"
},
"constraints": [],
"createdAt": "2021-09-17T07:23:39.374Z"
},
{
"id": "edaffaee-cf6e-473f-b137-ae15fb88ff53",
"featureName": "version.three.seventeen",
"projectId": "default",
"environment": ":global:",
"strategyName": "default",
"parameters": {},
"constraints": [],
"createdAt": "2021-09-17T07:23:39.374Z"
},
{
"id": "e6eaede4-027a-41a9-8e80-0e0fc0a5d7af",
"featureName": "in-another-project",
"projectId": "someother",
"environment": ":global:",
"strategyName": "gradualRolloutRandom",
"parameters": {
"percentage": "29"
},
"constraints": [
{
"values": [
"dev"
],
"operator": "IN",
"contextName": "environment"
},
{
"values": [
"prod"
],
"operator": "IN",
"contextName": "environment"
}
],
"createdAt": "2021-09-17T07:23:39.374Z"
},
{
"id": "da60e934-246c-4b3e-b314-f2fd1828dd51",
"featureName": "with-constraints",
"projectId": "default",
"environment": ":global:",
"strategyName": "default",
"parameters": {},
"constraints": [
{
"values": [
"123456"
],
"operator": "IN",
"contextName": "userId"
}
],
"createdAt": "2021-09-17T07:23:39.374Z"
},
{
"id": "162058f5-3600-4299-97df-d543a0301bdd",
"featureName": "another-toggle",
"projectId": "someother",
"environment": ":global:",
"strategyName": "userWithId",
"parameters": {
"userIds": "12541,123"
},
"constraints": [],
"createdAt": "2021-09-17T07:23:39.374Z"
},
{
"id": "5630e0fb-ebc1-4313-b6df-06b0a563c7b4",
"featureName": "toggle-created-in-4-1",
"projectId": "default",
"environment": ":global:",
"strategyName": "applicationHostname",
"parameters": {
"hostNames": "vg.no"
},
"constraints": [],
"createdAt": "2021-09-17T07:24:13.904Z"
}
],
"environments": [
{
"name": ":global:",
"displayName": "Across all environments",
"type": "production"
}
],
"featureEnvironments": [
{
"enabled": true,
"featureName": "this-is-fun",
"environment": ":global:"
},
{
"enabled": true,
"featureName": "version.three.seventeen",
"environment": ":global:"
},
{
"enabled": true,
"featureName": "in-another-project",
"environment": ":global:"
},
{
"enabled": true,
"featureName": "with-constraints",
"environment": ":global:"
},
{
"enabled": true,
"featureName": "another-toggle",
"environment": ":global:"
},
{
"enabled": true,
"featureName": "toggle-created-in-4-1",
"environment": ":global:"
}
]
}