From daa4041d03a066cd440f534b77e05b2d3b05eee8 Mon Sep 17 00:00:00 2001 From: sjaanus Date: Wed, 1 Feb 2023 13:14:49 +0200 Subject: [PATCH] Export tag types (#3026) Adds a simple functionality to export also tag types. --- src/lib/openapi/spec/export-result-schema.test.ts | 1 + src/lib/openapi/spec/export-result-schema.ts | 10 +++++++++- src/lib/services/export-import-service.ts | 6 ++++++ .../api/openapi/__snapshots__/openapi.e2e.test.ts.snap | 7 +++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/lib/openapi/spec/export-result-schema.test.ts b/src/lib/openapi/spec/export-result-schema.test.ts index 76d15dee46b..0aa4621cb79 100644 --- a/src/lib/openapi/spec/export-result-schema.test.ts +++ b/src/lib/openapi/spec/export-result-schema.test.ts @@ -98,6 +98,7 @@ test('exportResultSchema', () => { }, ], segments: [], + tagTypes: [{ name: 'simple', description: 'test' }], }; expect( diff --git a/src/lib/openapi/spec/export-result-schema.ts b/src/lib/openapi/spec/export-result-schema.ts index a550898b797..6cdd5b503ae 100644 --- a/src/lib/openapi/spec/export-result-schema.ts +++ b/src/lib/openapi/spec/export-result-schema.ts @@ -11,12 +11,13 @@ import { variantSchema } from './variant-schema'; import { overrideSchema } from './override-schema'; import { variantsSchema } from './variants-schema'; import { constraintSchema } from './constraint-schema'; +import { tagTypeSchema } from './tag-type-schema'; export const exportResultSchema = { $id: '#/components/schemas/exportResultSchema', type: 'object', additionalProperties: false, - required: ['features', 'featureStrategies'], + required: ['features', 'featureStrategies', 'tagTypes'], properties: { features: { type: 'array', @@ -54,6 +55,12 @@ export const exportResultSchema = { $ref: '#/components/schemas/segmentSchema', }, }, + tagTypes: { + type: 'array', + items: { + $ref: '#/components/schemas/tagTypeSchema', + }, + }, }, components: { schemas: { @@ -69,6 +76,7 @@ export const exportResultSchema = { constraintSchema, parametersSchema, legalValueSchema, + tagTypeSchema, }, }, } as const; diff --git a/src/lib/services/export-import-service.ts b/src/lib/services/export-import-service.ts index 082266c2730..04628e31f23 100644 --- a/src/lib/services/export-import-service.ts +++ b/src/lib/services/export-import-service.ts @@ -88,6 +88,7 @@ export default class ExportImportService { contextFields, featureTags, segments, + tagTypes, ] = await Promise.all([ this.toggleStore.getAllByNames(query.features), await this.featureEnvironmentStore.getAllByFeatures( @@ -102,6 +103,7 @@ export default class ExportImportService { this.contextFieldStore.getAll(), this.featureTagStore.getAllByFeatures(query.features), this.segmentStore.getAll(), + this.tagTypeStore.getAll(), ]); this.addSegmentsToStrategies(featureStrategies, strategySegments); const filteredContextFields = contextFields.filter((field) => @@ -116,6 +118,9 @@ export default class ExportImportService { strategy.segments.includes(segment.id), ), ); + const filteredTagTypes = tagTypes.filter((tagType) => + featureTags.map((tag) => tag.tagType).includes(tagType.name), + ); const result = { features: features.map((item) => { const { createdAt, archivedAt, lastSeenAt, ...rest } = item; @@ -148,6 +153,7 @@ export default class ExportImportService { const { createdAt, createdBy, ...rest } = item; return rest; }), + tagTypes: filteredTagTypes, }; await this.eventStore.store({ type: FEATURES_EXPORTED, diff --git a/src/test/e2e/api/openapi/__snapshots__/openapi.e2e.test.ts.snap b/src/test/e2e/api/openapi/__snapshots__/openapi.e2e.test.ts.snap index 228c9d3899a..cb9a0d9d7bc 100644 --- a/src/test/e2e/api/openapi/__snapshots__/openapi.e2e.test.ts.snap +++ b/src/test/e2e/api/openapi/__snapshots__/openapi.e2e.test.ts.snap @@ -1096,10 +1096,17 @@ exports[`should serve the OpenAPI spec 1`] = ` }, "type": "array", }, + "tagTypes": { + "items": { + "$ref": "#/components/schemas/tagTypeSchema", + }, + "type": "array", + }, }, "required": [ "features", "featureStrategies", + "tagTypes", ], "type": "object", },