summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/settings.test.ts
diff options
context:
space:
mode:
authorjerop <[email protected]>2025-06-06 15:32:39 +0000
committerJerop Kipruto <[email protected]>2025-06-06 11:47:37 -0400
commit8c28250bb3e6982e1ecff907d9b6c365c6e371d7 (patch)
tree38965a751eb38cc53e7e538e7d50bea27acf284f /packages/cli/src/config/settings.test.ts
parent4e9d365407564e0f440bf4645607aa47a1d16bca (diff)
Refactor: Improve env var resolution in settings
Refactors the `resolveEnvVarsInObject` function in settings to explicitly handle primitive types (null, undefined, boolean, number) at the beginning of the function. This clarifies the logic for subsequent string, array, and object processing.
Diffstat (limited to 'packages/cli/src/config/settings.test.ts')
-rw-r--r--packages/cli/src/config/settings.test.ts52
1 files changed, 52 insertions, 0 deletions
diff --git a/packages/cli/src/config/settings.test.ts b/packages/cli/src/config/settings.test.ts
index 350c5d33..a562c664 100644
--- a/packages/cli/src/config/settings.test.ts
+++ b/packages/cli/src/config/settings.test.ts
@@ -482,6 +482,57 @@ describe('Settings Loading and Merging', () => {
delete process.env.ITEM_1;
delete process.env.ITEM_2;
});
+
+ it('should correctly pass through null, boolean, and number types, and handle undefined properties', () => {
+ process.env.MY_ENV_STRING = 'env_string_value';
+ process.env.MY_ENV_STRING_NESTED = 'env_string_nested_value';
+
+ const userSettingsContent = {
+ nullVal: null,
+ trueVal: true,
+ falseVal: false,
+ numberVal: 123.45,
+ stringVal: '$MY_ENV_STRING',
+ nestedObj: {
+ nestedNull: null,
+ nestedBool: true,
+ nestedNum: 0,
+ nestedString: 'literal',
+ anotherEnv: '${MY_ENV_STRING_NESTED}',
+ },
+ };
+
+ (mockFsExistsSync as Mock).mockImplementation(
+ (p: fs.PathLike) => p === USER_SETTINGS_PATH,
+ );
+ (fs.readFileSync as Mock).mockImplementation(
+ (p: fs.PathOrFileDescriptor) => {
+ if (p === USER_SETTINGS_PATH)
+ return JSON.stringify(userSettingsContent);
+ return '{}';
+ },
+ );
+
+ const settings = loadSettings(MOCK_WORKSPACE_DIR);
+
+ expect(settings.user.settings.nullVal).toBeNull();
+ expect(settings.user.settings.trueVal).toBe(true);
+ expect(settings.user.settings.falseVal).toBe(false);
+ expect(settings.user.settings.numberVal).toBe(123.45);
+ expect(settings.user.settings.stringVal).toBe('env_string_value');
+ expect(settings.user.settings.undefinedVal).toBeUndefined();
+
+ expect(settings.user.settings.nestedObj.nestedNull).toBeNull();
+ expect(settings.user.settings.nestedObj.nestedBool).toBe(true);
+ expect(settings.user.settings.nestedObj.nestedNum).toBe(0);
+ expect(settings.user.settings.nestedObj.nestedString).toBe('literal');
+ expect(settings.user.settings.nestedObj.anotherEnv).toBe(
+ 'env_string_nested_value',
+ );
+
+ delete process.env.MY_ENV_STRING;
+ delete process.env.MY_ENV_STRING_NESTED;
+ });
});
describe('LoadedSettings class', () => {
@@ -518,6 +569,7 @@ describe('Settings Loading and Merging', () => {
);
loadedSettings.setValue(SettingScope.Workspace, 'theme', 'ocean');
+
expect(loadedSettings.workspace.settings.theme).toBe('ocean');
expect(loadedSettings.merged.theme).toBe('ocean');
});