Skip to content

Commit 7b17511

Browse files
committed
Allow default values in env vars. Tests
1 parent a784142 commit 7b17511

3 files changed

Lines changed: 46 additions & 6 deletions

File tree

packages/cdkConstructs/src/config/index.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,36 @@ import {CloudFormationClient, DescribeStacksCommand} from "@aws-sdk/client-cloud
22
import {S3Client, HeadObjectCommand} from "@aws-sdk/client-s3"
33
import {StandardStackProps} from "../apps/createApp"
44

5-
export function getConfigFromEnvVar(varName: string, prefix: string = "CDK_CONFIG_"): string {
5+
export function getConfigFromEnvVar(
6+
varName: string,
7+
prefix: string = "CDK_CONFIG_",
8+
defaultValue: string | undefined = undefined
9+
): string {
610
const value = process.env[prefix + varName]
711
if (!value) {
12+
if (defaultValue !== undefined) {
13+
return defaultValue
14+
}
815
throw new Error(`Environment variable ${prefix}${varName} is not set`)
916
}
1017
return value
1118
}
1219

13-
export function getBooleanConfigFromEnvVar(varName: string, prefix: string = "CDK_CONFIG_"): boolean {
14-
const value = getConfigFromEnvVar(varName, prefix)
20+
export function getBooleanConfigFromEnvVar(
21+
varName: string,
22+
prefix: string = "CDK_CONFIG_",
23+
defaultValue: string | undefined = undefined
24+
): boolean {
25+
const value = getConfigFromEnvVar(varName, prefix, defaultValue)
1526
return value.toLowerCase().trim() === "true"
1627
}
1728

18-
export function getNumberConfigFromEnvVar(varName: string, prefix: string = "CDK_CONFIG_"): number {
19-
const value = getConfigFromEnvVar(varName, prefix)
29+
export function getNumberConfigFromEnvVar(
30+
varName: string,
31+
prefix: string = "CDK_CONFIG_",
32+
defaultValue: string | undefined = undefined
33+
): number {
34+
const value = getConfigFromEnvVar(varName, prefix, defaultValue)
2035
return Number(value)
2136
}
2237

packages/cdkConstructs/tests/config/index.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ describe("config helpers", () => {
9393
expect(getConfigFromEnvVar("STACK_NAME")).toBe("primary")
9494
})
9595

96+
test("getConfigFromEnvVar returns the default value when env var is not set", () => {
97+
delete process.env.CDK_CONFIG_MISSING
98+
99+
expect(getConfigFromEnvVar("MISSING", "CDK_CONFIG_", "fallback")).toBe("fallback")
100+
})
101+
96102
test("getConfigFromEnvVar throws when value is missing", () => {
97103
delete process.env.CDK_CONFIG_MISSING
98104

@@ -114,12 +120,31 @@ describe("config helpers", () => {
114120
expect(getBooleanConfigFromEnvVar("OTHER_FLAG")).toBe(false)
115121
})
116122

123+
test("getBooleanConfigFromEnvVar uses default value when env var is not set", () => {
124+
delete process.env.CDK_CONFIG_BOOL_MISSING
125+
126+
expect(getBooleanConfigFromEnvVar("BOOL_MISSING", "CDK_CONFIG_", "true")).toBe(true)
127+
expect(getBooleanConfigFromEnvVar("BOOL_MISSING", "CDK_CONFIG_", "false")).toBe(false)
128+
})
129+
117130
test("getNumberConfigFromEnvVar parses numeric strings", () => {
118131
process.env.CDK_CONFIG_TIMEOUT = "45"
119132

120133
expect(getNumberConfigFromEnvVar("TIMEOUT")).toBe(45)
121134
})
122135

136+
test("getNumberConfigFromEnvVar uses default value when env var is not set", () => {
137+
delete process.env.CDK_CONFIG_NUM_MISSING
138+
139+
expect(getNumberConfigFromEnvVar("NUM_MISSING", "CDK_CONFIG_", "99")).toBe(99)
140+
})
141+
142+
test("getConfigFromEnvVar ignores default value when env var is set", () => {
143+
process.env.CDK_CONFIG_STACK_NAME = "primary"
144+
145+
expect(getConfigFromEnvVar("STACK_NAME", "CDK_CONFIG_", "ignored")).toBe("primary")
146+
})
147+
123148
test("getTrustStoreVersion returns the version ID from S3", async () => {
124149
mockCloudFormationSend.mockResolvedValueOnce({
125150
Stacks: [{

packages/deploymentUtils/src/config/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {CloudFormationClient, ListExportsCommand} from "@aws-sdk/client-cloudfor
33
export function getConfigFromEnvVar(varName: string, defaultValue: string | undefined = undefined): string {
44
const value = process.env[varName]
55
if (!value) {
6-
if (defaultValue) {
6+
if (defaultValue !== undefined) {
77
return defaultValue
88
}
99
throw new Error(`Environment variable ${varName} is not set`)

0 commit comments

Comments
 (0)