summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/settings.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/config/settings.test.ts')
-rw-r--r--packages/cli/src/config/settings.test.ts154
1 files changed, 44 insertions, 110 deletions
diff --git a/packages/cli/src/config/settings.test.ts b/packages/cli/src/config/settings.test.ts
index d537eeb1..65a556be 100644
--- a/packages/cli/src/config/settings.test.ts
+++ b/packages/cli/src/config/settings.test.ts
@@ -949,23 +949,37 @@ describe('Settings Loading and Merging', () => {
delete process.env['WORKSPACE_ENDPOINT'];
});
- it('should prioritize user env variables over workspace env variables if keys clash after resolution', () => {
- const userSettingsContent = { configValue: '$SHARED_VAR' };
- const workspaceSettingsContent = { configValue: '$SHARED_VAR' };
+ it('should correctly resolve and merge env variables from different scopes', () => {
+ process.env['SYSTEM_VAR'] = 'system_value';
+ process.env['USER_VAR'] = 'user_value';
+ process.env['WORKSPACE_VAR'] = 'workspace_value';
+ process.env['SHARED_VAR'] = 'final_value';
- (mockFsExistsSync as Mock).mockReturnValue(true);
- const originalSharedVar = process.env['SHARED_VAR'];
- // Temporarily delete to ensure a clean slate for the test's specific manipulations
- delete process.env['SHARED_VAR'];
+ const systemSettingsContent = {
+ configValue: '$SHARED_VAR',
+ systemOnly: '$SYSTEM_VAR',
+ };
+ const userSettingsContent = {
+ configValue: '$SHARED_VAR',
+ userOnly: '$USER_VAR',
+ theme: 'dark',
+ };
+ const workspaceSettingsContent = {
+ configValue: '$SHARED_VAR',
+ workspaceOnly: '$WORKSPACE_VAR',
+ theme: 'light',
+ };
+ (mockFsExistsSync as Mock).mockReturnValue(true);
(fs.readFileSync as Mock).mockImplementation(
(p: fs.PathOrFileDescriptor) => {
+ if (p === getSystemSettingsPath()) {
+ return JSON.stringify(systemSettingsContent);
+ }
if (p === USER_SETTINGS_PATH) {
- process.env['SHARED_VAR'] = 'user_value_for_user_read'; // Set for user settings read
return JSON.stringify(userSettingsContent);
}
if (p === MOCK_WORKSPACE_SETTINGS_PATH) {
- process.env['SHARED_VAR'] = 'workspace_value_for_workspace_read'; // Set for workspace settings read
return JSON.stringify(workspaceSettingsContent);
}
return '{}';
@@ -974,115 +988,35 @@ describe('Settings Loading and Merging', () => {
const settings = loadSettings(MOCK_WORKSPACE_DIR);
+ // Check resolved values in individual scopes
// @ts-expect-error: dynamic property for test
- expect(settings.user.settings.configValue).toBe(
- 'user_value_for_user_read',
- );
+ expect(settings.system.settings.configValue).toBe('final_value');
// @ts-expect-error: dynamic property for test
- expect(settings.workspace.settings.configValue).toBe(
- 'workspace_value_for_workspace_read',
- );
- // Merged should take workspace's resolved value
+ expect(settings.system.settings.systemOnly).toBe('system_value');
// @ts-expect-error: dynamic property for test
- expect(settings.merged.configValue).toBe(
- 'workspace_value_for_workspace_read',
- );
-
- // Restore original environment variable state
- if (originalSharedVar !== undefined) {
- process.env['SHARED_VAR'] = originalSharedVar;
- } else {
- delete process.env['SHARED_VAR']; // Ensure it's deleted if it wasn't there before
- }
- });
-
- it('should prioritize workspace env variables over user env variables if keys clash after resolution', () => {
- const userSettingsContent = { configValue: '$SHARED_VAR' };
- const workspaceSettingsContent = { configValue: '$SHARED_VAR' };
-
- (mockFsExistsSync as Mock).mockReturnValue(true);
- const originalSharedVar = process.env['SHARED_VAR'];
- // Temporarily delete to ensure a clean slate for the test's specific manipulations
- delete process.env['SHARED_VAR'];
-
- (fs.readFileSync as Mock).mockImplementation(
- (p: fs.PathOrFileDescriptor) => {
- if (p === USER_SETTINGS_PATH) {
- process.env['SHARED_VAR'] = 'user_value_for_user_read'; // Set for user settings read
- return JSON.stringify(userSettingsContent);
- }
- if (p === MOCK_WORKSPACE_SETTINGS_PATH) {
- process.env['SHARED_VAR'] = 'workspace_value_for_workspace_read'; // Set for workspace settings read
- return JSON.stringify(workspaceSettingsContent);
- }
- return '{}';
- },
- );
-
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
-
- expect(settings.user.settings.configValue).toBe(
- 'user_value_for_user_read',
- );
- expect(settings.workspace.settings.configValue).toBe(
- 'workspace_value_for_workspace_read',
- );
- // Merged should take workspace's resolved value
- expect(settings.merged.configValue).toBe(
- 'workspace_value_for_workspace_read',
- );
-
- // Restore original environment variable state
- if (originalSharedVar !== undefined) {
- process.env['SHARED_VAR'] = originalSharedVar;
- } else {
- delete process.env['SHARED_VAR']; // Ensure it's deleted if it wasn't there before
- }
- });
-
- it('should prioritize system env variables over workspace env variables if keys clash after resolution', () => {
- const workspaceSettingsContent = { configValue: '$SHARED_VAR' };
- const systemSettingsContent = { configValue: '$SHARED_VAR' };
-
- (mockFsExistsSync as Mock).mockReturnValue(true);
- const originalSharedVar = process.env['SHARED_VAR'];
- // Temporarily delete to ensure a clean slate for the test's specific manipulations
- delete process.env['SHARED_VAR'];
-
- (fs.readFileSync as Mock).mockImplementation(
- (p: fs.PathOrFileDescriptor) => {
- if (p === getSystemSettingsPath()) {
- process.env['SHARED_VAR'] = 'system_value_for_system_read'; // Set for system settings read
- return JSON.stringify(systemSettingsContent);
- }
- if (p === MOCK_WORKSPACE_SETTINGS_PATH) {
- process.env['SHARED_VAR'] = 'workspace_value_for_workspace_read'; // Set for workspace settings read
- return JSON.stringify(workspaceSettingsContent);
- }
- return '{}';
- },
- );
-
- const settings = loadSettings(MOCK_WORKSPACE_DIR);
+ expect(settings.user.settings.configValue).toBe('final_value');
+ // @ts-expect-error: dynamic property for test
+ expect(settings.user.settings.userOnly).toBe('user_value');
+ // @ts-expect-error: dynamic property for test
+ expect(settings.workspace.settings.configValue).toBe('final_value');
+ // @ts-expect-error: dynamic property for test
+ expect(settings.workspace.settings.workspaceOnly).toBe('workspace_value');
+ // Check merged values (system > workspace > user)
// @ts-expect-error: dynamic property for test
- expect(settings.system.settings.configValue).toBe(
- 'system_value_for_system_read',
- );
+ expect(settings.merged.configValue).toBe('final_value');
// @ts-expect-error: dynamic property for test
- expect(settings.workspace.settings.configValue).toBe(
- 'workspace_value_for_workspace_read',
- );
- // Merged should take system's resolved value
+ expect(settings.merged.systemOnly).toBe('system_value');
+ // @ts-expect-error: dynamic property for test
+ expect(settings.merged.userOnly).toBe('user_value');
// @ts-expect-error: dynamic property for test
- expect(settings.merged.configValue).toBe('system_value_for_system_read');
+ expect(settings.merged.workspaceOnly).toBe('workspace_value');
+ expect(settings.merged.theme).toBe('light'); // workspace overrides user
- // Restore original environment variable state
- if (originalSharedVar !== undefined) {
- process.env['SHARED_VAR'] = originalSharedVar;
- } else {
- delete process.env['SHARED_VAR']; // Ensure it's deleted if it wasn't there before
- }
+ delete process.env['SYSTEM_VAR'];
+ delete process.env['USER_VAR'];
+ delete process.env['WORKSPACE_VAR'];
+ delete process.env['SHARED_VAR'];
});
it('should correctly merge dnsResolutionOrder with workspace taking precedence', () => {