diff options
| author | shrutip90 <[email protected]> | 2025-08-21 00:38:12 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-21 07:38:12 +0000 |
| commit | ba5309c4050efde8b0be0d9dd726e5c5f1a4c4c6 (patch) | |
| tree | d34cc814b2968bc8a09add14128544afe0f4f529 /packages/cli/src/config/settings.test.ts | |
| parent | 0242ecd83a5b0673a6ef97a406a743b286ef12e2 (diff) | |
Force restart on trust level change to reload settings (#6713)
Diffstat (limited to 'packages/cli/src/config/settings.test.ts')
| -rw-r--r-- | packages/cli/src/config/settings.test.ts | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/packages/cli/src/config/settings.test.ts b/packages/cli/src/config/settings.test.ts index 65a556be..83580542 100644 --- a/packages/cli/src/config/settings.test.ts +++ b/packages/cli/src/config/settings.test.ts @@ -27,6 +27,11 @@ vi.mock('./settings.js', async (importActual) => { }; }); +// Mock trustedFolders +vi.mock('./trustedFolders.js', () => ({ + isWorkspaceTrusted: vi.fn(), +})); + // NOW import everything else, including the (now effectively re-exported) settings.js import * as pathActual from 'path'; // Restored for MOCK_WORKSPACE_SETTINGS_PATH import { @@ -41,6 +46,7 @@ import { } from 'vitest'; import * as fs from 'fs'; // fs will be mocked separately import stripJsonComments from 'strip-json-comments'; // Will be mocked separately +import { isWorkspaceTrusted } from './trustedFolders.js'; // These imports will get the versions from the vi.mock('./settings.js', ...) factory. import { @@ -97,6 +103,7 @@ describe('Settings Loading and Merging', () => { (mockFsExistsSync as Mock).mockReturnValue(false); (fs.readFileSync as Mock).mockReturnValue('{}'); // Return valid empty JSON (mockFsMkdirSync as Mock).mockImplementation(() => undefined); + vi.mocked(isWorkspaceTrusted).mockReturnValue(true); }); afterEach(() => { @@ -1421,4 +1428,61 @@ describe('Settings Loading and Merging', () => { ]); }); }); + + describe('with workspace trust', () => { + it('should merge workspace settings when workspace is trusted', () => { + (mockFsExistsSync as Mock).mockReturnValue(true); + const userSettingsContent = { theme: 'dark', sandbox: false }; + const workspaceSettingsContent = { + sandbox: true, + contextFileName: 'WORKSPACE.md', + }; + + (fs.readFileSync as Mock).mockImplementation( + (p: fs.PathOrFileDescriptor) => { + if (p === USER_SETTINGS_PATH) + return JSON.stringify(userSettingsContent); + if (p === MOCK_WORKSPACE_SETTINGS_PATH) + return JSON.stringify(workspaceSettingsContent); + return '{}'; + }, + ); + + const settings = loadSettings(MOCK_WORKSPACE_DIR); + + expect(settings.merged.sandbox).toBe(true); + expect(settings.merged.contextFileName).toBe('WORKSPACE.md'); + expect(settings.merged.theme).toBe('dark'); + }); + + it('should NOT merge workspace settings when workspace is not trusted', () => { + vi.mocked(isWorkspaceTrusted).mockReturnValue(false); + (mockFsExistsSync as Mock).mockReturnValue(true); + const userSettingsContent = { + theme: 'dark', + sandbox: false, + contextFileName: 'USER.md', + }; + const workspaceSettingsContent = { + sandbox: true, + contextFileName: 'WORKSPACE.md', + }; + + (fs.readFileSync as Mock).mockImplementation( + (p: fs.PathOrFileDescriptor) => { + if (p === USER_SETTINGS_PATH) + return JSON.stringify(userSettingsContent); + if (p === MOCK_WORKSPACE_SETTINGS_PATH) + return JSON.stringify(workspaceSettingsContent); + return '{}'; + }, + ); + + const settings = loadSettings(MOCK_WORKSPACE_DIR); + + expect(settings.merged.sandbox).toBe(false); // User setting + expect(settings.merged.contextFileName).toBe('USER.md'); // User setting + expect(settings.merged.theme).toBe('dark'); // User setting + }); + }); }); |
