summaryrefslogtreecommitdiff
path: root/packages/cli/src/config/settings.test.ts
diff options
context:
space:
mode:
authorshrutip90 <[email protected]>2025-08-21 00:38:12 -0700
committerGitHub <[email protected]>2025-08-21 07:38:12 +0000
commitba5309c4050efde8b0be0d9dd726e5c5f1a4c4c6 (patch)
treed34cc814b2968bc8a09add14128544afe0f4f529 /packages/cli/src/config/settings.test.ts
parent0242ecd83a5b0673a6ef97a406a743b286ef12e2 (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.ts64
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
+ });
+ });
});