Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/chronicle/common/test/sessionIndexingPreference.spec.ts
13405 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { describe, expect, it } from 'vitest';
7
import { SessionIndexingPreference } from '../sessionIndexingPreference';
8
9
function createMockConfigService(opts: {
10
localIndexEnabled?: boolean;
11
cloudSyncEnabled?: boolean;
12
excludeRepositories?: string[];
13
} = {}) {
14
const configs: Record<string, unknown> = {};
15
// Map by fullyQualifiedId
16
configs['github.copilot.chat.localIndex.enabled'] = opts.localIndexEnabled ?? false;
17
configs['github.copilot.chat.advanced.sessionSearch.cloudSync.enabled'] = opts.cloudSyncEnabled ?? false;
18
configs['github.copilot.chat.advanced.sessionSearch.cloudSync.excludeRepositories'] = opts.excludeRepositories ?? [];
19
20
return {
21
getConfig: (key: { fullyQualifiedId: string }) => configs[key.fullyQualifiedId],
22
} as unknown as import('../../../../platform/configuration/common/configurationService').IConfigurationService;
23
}
24
25
describe('SessionIndexingPreference', () => {
26
it('getStorageLevel returns local when no cloud sync', () => {
27
const pref = new SessionIndexingPreference(createMockConfigService({ localIndexEnabled: true }));
28
expect(pref.getStorageLevel()).toBe('local');
29
});
30
31
it('getStorageLevel returns user when cloud sync enabled', () => {
32
const pref = new SessionIndexingPreference(createMockConfigService({
33
localIndexEnabled: true,
34
cloudSyncEnabled: true,
35
}));
36
expect(pref.getStorageLevel()).toBe('user');
37
});
38
39
it('getStorageLevel returns local for excluded repo', () => {
40
const pref = new SessionIndexingPreference(createMockConfigService({
41
localIndexEnabled: true,
42
cloudSyncEnabled: true,
43
excludeRepositories: ['my-org/private-repo'],
44
}));
45
expect(pref.getStorageLevel('my-org/private-repo')).toBe('local');
46
});
47
48
it('getStorageLevel returns user for non-excluded repo', () => {
49
const pref = new SessionIndexingPreference(createMockConfigService({
50
localIndexEnabled: true,
51
cloudSyncEnabled: true,
52
excludeRepositories: ['my-org/private-repo'],
53
}));
54
expect(pref.getStorageLevel('microsoft/vscode')).toBe('user');
55
});
56
57
it('hasCloudConsent returns false when cloud sync disabled', () => {
58
const pref = new SessionIndexingPreference(createMockConfigService({ cloudSyncEnabled: false }));
59
expect(pref.hasCloudConsent()).toBe(false);
60
});
61
62
it('hasCloudConsent returns true when cloud sync enabled', () => {
63
const pref = new SessionIndexingPreference(createMockConfigService({ cloudSyncEnabled: true }));
64
expect(pref.hasCloudConsent()).toBe(true);
65
});
66
67
it('hasCloudConsent returns false for excluded repo', () => {
68
const pref = new SessionIndexingPreference(createMockConfigService({
69
cloudSyncEnabled: true,
70
excludeRepositories: ['my-org/*'],
71
}));
72
expect(pref.hasCloudConsent('my-org/secret-repo')).toBe(false);
73
});
74
75
it('hasCloudConsent supports glob patterns', () => {
76
const pref = new SessionIndexingPreference(createMockConfigService({
77
cloudSyncEnabled: true,
78
excludeRepositories: ['private-org/*'],
79
}));
80
expect(pref.hasCloudConsent('private-org/repo-a')).toBe(false);
81
expect(pref.hasCloudConsent('private-org/repo-b')).toBe(false);
82
expect(pref.hasCloudConsent('public-org/repo-a')).toBe(true);
83
});
84
});
85
86