Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/vs/platform/configuration/common/configurations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,10 @@ export class PolicyConfiguration extends Disposable implements IPolicyConfigurat
async initialize(): Promise<ConfigurationModel> {
this.logService.trace('PolicyConfiguration#initialize');

this.update(await this.updatePolicyDefinitions(this.defaultConfiguration.configurationModel.keys), false);
this.update(await this.updatePolicyDefinitions(Object.keys(this.configurationRegistry.getExcludedConfigurationProperties())), false);
this.update(await this.updatePolicyDefinitions([
...this.defaultConfiguration.configurationModel.keys,
...Object.keys(this.configurationRegistry.getExcludedConfigurationProperties()),
]), false);
this._register(this.policyService.onDidChange(policyNames => this.onDidChangePolicies(policyNames)));
this._register(this.defaultConfiguration.onDidChangeConfiguration(async ({ properties }) => this.update(await this.updatePolicyDefinitions(properties), true)));
return this._configurationModel;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*--------------------------------------------------------------------------------------------*/

import assert from 'assert';
import { IStringDictionary } from '../../../../base/common/collections.js';
import { Event } from '../../../../base/common/event.js';
import { URI } from '../../../../base/common/uri.js';
import { DefaultConfiguration, PolicyConfiguration } from '../../common/configurations.js';
Expand All @@ -15,17 +16,28 @@ import { Extensions, IConfigurationNode, IConfigurationRegistry } from '../../co
import { Registry } from '../../../registry/common/platform.js';
import { VSBuffer } from '../../../../base/common/buffer.js';
import { deepClone } from '../../../../base/common/objects.js';
import { IPolicyService } from '../../../policy/common/policy.js';
import { AbstractPolicyService, IPolicyService, PolicyDefinition } from '../../../policy/common/policy.js';
import { FilePolicyService } from '../../../policy/common/filePolicyService.js';
import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js';
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
import { PolicyCategory } from '../../../../base/common/policy.js';

class TestPolicyService extends AbstractPolicyService {

updateCount = 0;

protected _updatePolicyDefinitions(_policyDefinitions: IStringDictionary<PolicyDefinition>): Promise<void> {
this.updateCount++;
return Promise.resolve();
}
}

suite('PolicyConfiguration', () => {

const disposables = ensureNoDisposablesAreLeakedInTestSuite();

let testObject: PolicyConfiguration;
let defaultConfiguration: DefaultConfiguration;
let fileService: IFileService;
let policyService: IPolicyService;
const policyFile = URI.file('policyFile').with({ scheme: 'vscode-tests' });
Expand Down Expand Up @@ -132,7 +144,7 @@ suite('PolicyConfiguration', () => {
suiteTeardown(() => Registry.as<IConfigurationRegistry>(Extensions.Configuration).deregisterConfigurations([policyConfigurationNode]));

setup(async () => {
const defaultConfiguration = disposables.add(new DefaultConfiguration(new NullLogService()));
defaultConfiguration = disposables.add(new DefaultConfiguration(new NullLogService()));
await defaultConfiguration.initialize();
fileService = disposables.add(new FileService(new NullLogService()));
const diskFileSystemProvider = disposables.add(new InMemoryFileSystemProvider());
Expand All @@ -141,6 +153,23 @@ suite('PolicyConfiguration', () => {
testObject = disposables.add(new PolicyConfiguration(defaultConfiguration, policyService, new NullLogService()));
});

test('initialize: submits included and excluded policy definitions together', async () => {
const testPolicyService = disposables.add(new TestPolicyService());
const testPolicyConfiguration = disposables.add(new PolicyConfiguration(defaultConfiguration, testPolicyService, new NullLogService()));

await testPolicyConfiguration.initialize();

assert.deepStrictEqual({
updateCount: testPolicyService.updateCount,
hasIncludedPolicy: !!testPolicyService.policyDefinitions.PolicySettingA,
hasExcludedPolicy: !!testPolicyService.policyDefinitions.PolicyInternalSetting,
}, {
updateCount: 1,
hasIncludedPolicy: true,
hasExcludedPolicy: true,
});
});

test('initialize: with policies', async () => {
await fileService.writeFile(policyFile, VSBuffer.fromString(JSON.stringify({ 'PolicySettingA': 'policyValueA' })));

Expand Down