diff --git a/src/vs/platform/configuration/common/configurations.ts b/src/vs/platform/configuration/common/configurations.ts index 0a2e5ca0e6f35..9b88ebcb5e1db 100644 --- a/src/vs/platform/configuration/common/configurations.ts +++ b/src/vs/platform/configuration/common/configurations.ts @@ -122,8 +122,10 @@ export class PolicyConfiguration extends Disposable implements IPolicyConfigurat async initialize(): Promise { 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; diff --git a/src/vs/platform/configuration/test/common/policyConfiguration.test.ts b/src/vs/platform/configuration/test/common/policyConfiguration.test.ts index d289130c0ba6d..39947f5eeae3c 100644 --- a/src/vs/platform/configuration/test/common/policyConfiguration.test.ts +++ b/src/vs/platform/configuration/test/common/policyConfiguration.test.ts @@ -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'; @@ -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): Promise { + 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' }); @@ -132,7 +144,7 @@ suite('PolicyConfiguration', () => { suiteTeardown(() => Registry.as(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()); @@ -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' })));