diff options
| author | jerop <[email protected]> | 2025-06-06 15:32:39 +0000 |
|---|---|---|
| committer | Jerop Kipruto <[email protected]> | 2025-06-06 11:47:37 -0400 |
| commit | 8c28250bb3e6982e1ecff907d9b6c365c6e371d7 (patch) | |
| tree | 38965a751eb38cc53e7e538e7d50bea27acf284f /packages/cli/src/config/settings.test.ts | |
| parent | 4e9d365407564e0f440bf4645607aa47a1d16bca (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.ts | 52 |
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'); }); |
