From 3865fb41ae87160acef59bd122a75a70ae32304e Mon Sep 17 00:00:00 2001 From: Mateusz Kwasniewski Date: Thu, 8 May 2025 11:37:15 +0200 Subject: [PATCH] fix: project environments have info about required approvals (#9929) --- .../environments/environment-oss.e2e.test.ts | 11 +++++++++++ .../features/environments/environments-controller.ts | 7 ++++--- src/lib/openapi/spec/environment-project-schema.ts | 12 ++++++++++++ src/lib/openapi/spec/environments-project-schema.ts | 8 ++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/lib/features/environments/environment-oss.e2e.test.ts b/src/lib/features/environments/environment-oss.e2e.test.ts index 47dfaea742..768f53b353 100644 --- a/src/lib/features/environments/environment-oss.e2e.test.ts +++ b/src/lib/features/environments/environment-oss.e2e.test.ts @@ -56,3 +56,14 @@ test('querying environments in OSS only returns environments that are included i expect(names).toEqual(['default', 'development', 'production']); }); }); + +test('querying project environments in OSS only returns environments that are included in oss', async () => { + await app.request + .get('/api/admin/environments/project/default') + .expect(200) + .expect((res) => { + expect(res.body.environments).toHaveLength(3); + const names = res.body.environments.map((env) => env.name); + expect(names).toEqual(['default', 'development', 'production']); + }); +}); diff --git a/src/lib/features/environments/environments-controller.ts b/src/lib/features/environments/environments-controller.ts index 4e5af16b1b..18c07757f1 100644 --- a/src/lib/features/environments/environments-controller.ts +++ b/src/lib/features/environments/environments-controller.ts @@ -231,15 +231,16 @@ export class EnvironmentsController extends Controller { req: Request, res: Response, ): Promise { + const environments = await this.service.getProjectEnvironments( + req.params.projectId, + ); this.openApiService.respondWithValidation( 200, res, environmentsProjectSchema.$id, { version: 1, - environments: (await this.service.getProjectEnvironments( - req.params.projectId, - )) as any, + environments, }, ); } diff --git a/src/lib/openapi/spec/environment-project-schema.ts b/src/lib/openapi/spec/environment-project-schema.ts index 3d10863545..32d9ef6962 100644 --- a/src/lib/openapi/spec/environment-project-schema.ts +++ b/src/lib/openapi/spec/environment-project-schema.ts @@ -1,6 +1,8 @@ import type { FromSchema } from 'json-schema-to-ts'; import { createFeatureStrategySchema } from './create-feature-strategy-schema'; import { createStrategyVariantSchema } from './create-strategy-variant-schema'; +import { constraintSchema } from './constraint-schema'; +import { parametersSchema } from './parameters-schema'; export const environmentProjectSchema = { $id: '#/components/schemas/environmentProjectSchema', @@ -63,11 +65,21 @@ export const environmentProjectSchema = { description: 'Indicates whether the environment can be enabled for feature flags in the project', }, + requiredApprovals: { + type: 'integer', + nullable: true, + description: + 'Experimental field. The number of approvals required before a change request can be applied in this environment.', + minimum: 1, + example: 3, + }, }, components: { schemas: { createFeatureStrategySchema, createStrategyVariantSchema, + constraintSchema, + parametersSchema, }, }, } as const; diff --git a/src/lib/openapi/spec/environments-project-schema.ts b/src/lib/openapi/spec/environments-project-schema.ts index acb26a503b..80ee149eca 100644 --- a/src/lib/openapi/spec/environments-project-schema.ts +++ b/src/lib/openapi/spec/environments-project-schema.ts @@ -1,5 +1,9 @@ import type { FromSchema } from 'json-schema-to-ts'; import { environmentProjectSchema } from './environment-project-schema'; +import { createFeatureStrategySchema } from './create-feature-strategy-schema'; +import { createStrategyVariantSchema } from './create-strategy-variant-schema'; +import { constraintSchema } from './constraint-schema'; +import { parametersSchema } from './parameters-schema'; export const environmentsProjectSchema = { $id: '#/components/schemas/environmentsProjectSchema', @@ -24,6 +28,10 @@ export const environmentsProjectSchema = { components: { schemas: { environmentProjectSchema, + createFeatureStrategySchema, + createStrategyVariantSchema, + constraintSchema, + parametersSchema, }, }, } as const;