From 837f667a6bcd151db6fe51338cd2c19916a9cebc Mon Sep 17 00:00:00 2001 From: FOWEPJF255 Date: Fri, 16 Oct 2026 13:40:55 +0800 Subject: [PATCH] fix(aws-cdk): use recommended value for a single unconfigured flag --- .../aws-cdk/lib/commands/flags/operations.ts | 2 +- .../test/commands/flag-operations.test.ts | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/aws-cdk/lib/commands/flags/operations.ts b/packages/aws-cdk/lib/commands/flags/operations.ts index b08d26476..45773f693 100644 --- a/packages/aws-cdk/lib/commands/flags/operations.ts +++ b/packages/aws-cdk/lib/commands/flags/operations.ts @@ -401,7 +401,7 @@ export class FlagOperations { const cdkJsonContent = await fs.readFile(cdkJsonPath, 'utf-8'); const cdkJson = JSON.parse(cdkJsonContent); - if (flagNames.length === 1 && !params.safe && !params.all) { + if (flagNames.length === 1 && params.value !== undefined && !params.safe && !params.all) { const boolValue = params.value === 'true'; cdkJson.context[String(flagNames[0])] = boolValue; await this.ioHelper.defaults.info(`Setting flag '${flagNames}' to: ${boolValue}`); diff --git a/packages/aws-cdk/test/commands/flag-operations.test.ts b/packages/aws-cdk/test/commands/flag-operations.test.ts index 1297b768b..2b504679d 100644 --- a/packages/aws-cdk/test/commands/flag-operations.test.ts +++ b/packages/aws-cdk/test/commands/flag-operations.test.ts @@ -945,6 +945,40 @@ describe('modifyValues', () => { requestResponseSpy.mockRestore(); }); + test('sets a single unconfigured flag to its recommended value', async () => { + const flagName = '@aws-cdk/aws-cloudfront:defaultViewerProtocolPolicyRedirectToHttps'; + const flags: FeatureFlag[] = [{ + module: 'aws-cdk-lib', + name: flagName, + recommendedValue: true, + userValue: undefined, + explanation: 'Redirect viewer requests to HTTPS by default', + }]; + const cdkJsonPath = await createCdkJsonFile({}); + + setupMockToolkitForPrototyping(mockToolkit); + + const requestResponseSpy = jest.spyOn(ioHelper, 'requestResponse'); + requestResponseSpy.mockResolvedValue(true); + + const options: FlagsOptions = { + set: true, + unconfigured: true, + recommended: true, + }; + + const flagOperations = new FlagCommandHandler(flags, ioHelper, options, mockToolkit); + await flagOperations.processFlagsCommand(); + + const updatedContent = await fs.promises.readFile(cdkJsonPath, 'utf-8'); + const updatedJson = JSON.parse(updatedContent); + + expect(updatedJson.context[flagName]).toBe(true); + + await cleanupCdkJsonFile(cdkJsonPath); + requestResponseSpy.mockRestore(); + }); + test('sets all flags to recommended values', async () => { const cdkJsonPath = await createCdkJsonFile({ '@aws-cdk/core:testFlag': false,