diff --git a/src/lib/features/export-import-toggles/export-import-service.ts b/src/lib/features/export-import-toggles/export-import-service.ts index 2594701785..653cd6dae9 100644 --- a/src/lib/features/export-import-toggles/export-import-service.ts +++ b/src/lib/features/export-import-toggles/export-import-service.ts @@ -503,10 +503,21 @@ export default class ExportImportService private async cleanData(dto: ImportTogglesSchema) { const removedFeaturesDto = await this.removeArchivedFeatures(dto); - return ExportImportService.remapSegments(removedFeaturesDto); + return this.remapSegments(removedFeaturesDto); } - private static async remapSegments(dto: ImportTogglesSchema) { + private async remapSegments(dto: ImportTogglesSchema) { + const existingSegments = await this.segmentService.getAll(); + + const segmentMapping = new Map( + dto.data.segments?.map((segment) => [ + segment.id, + existingSegments.find( + (existingSegment) => existingSegment.name === segment.name, + )?.id, + ]), + ); + return { ...dto, data: { @@ -514,7 +525,9 @@ export default class ExportImportService featureStrategies: dto.data.featureStrategies.map( (strategy) => ({ ...strategy, - segments: [], + segments: strategy.segments?.map( + (segment) => segmentMapping.get(segment)!, + ), }), ), }, diff --git a/src/lib/features/export-import-toggles/export-import.e2e.test.ts b/src/lib/features/export-import-toggles/export-import.e2e.test.ts index 7c8824a86e..6395cf7007 100644 --- a/src/lib/features/export-import-toggles/export-import.e2e.test.ts +++ b/src/lib/features/export-import-toggles/export-import.e2e.test.ts @@ -741,13 +741,44 @@ const validateImport = (importPayload: ImportTogglesSchema, status = 200) => test('import features to existing project and environment', async () => { await createProjects(); - await app.importToggles(defaultImportPayload); + const segment = await createSegment({ + name: 'newSegment', + constraints: [], + }); + + await app.importToggles({ + ...defaultImportPayload, + data: { + ...defaultImportPayload.data, + featureStrategies: [ + { + ...exportedStrategy, + segments: [segment.id], + }, + ], + segments: [ + { + id: segment.id, + name: segment.name, + }, + ], + }, + }); const { body: importedFeature } = await getFeature(defaultFeatureName); expect(importedFeature).toMatchObject({ name: defaultFeatureName, project: DEFAULT_PROJECT, variants, + environments: [ + { + strategies: [ + { + segments: [segment.id], + }, + ], + }, + ], }); const { body: importedFeatureEnvironment } = await getFeatureEnvironment(