adapt ObjectToConfigAdapter.getFlattenedPaths to consider arrays as final values (#56105)
* adapt getFlattenedPaths to consider arrays as final values * add getUnusedConfigKeys test * improve tests
This commit is contained in:
parent
7d2074a95a
commit
a1ccb29731
53
src/core/server/config/object_to_config_adapter.test.ts
Normal file
53
src/core/server/config/object_to_config_adapter.test.ts
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Licensed to Elasticsearch B.V. under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch B.V. licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import { ObjectToConfigAdapter } from './object_to_config_adapter';
|
||||
|
||||
describe('ObjectToConfigAdapter', () => {
|
||||
describe('#getFlattenedPaths()', () => {
|
||||
it('considers arrays as final values', () => {
|
||||
const data = {
|
||||
string: 'string',
|
||||
array: ['an', 'array'],
|
||||
};
|
||||
const config = new ObjectToConfigAdapter(data);
|
||||
|
||||
expect(config.getFlattenedPaths()).toEqual(['string', 'array']);
|
||||
});
|
||||
|
||||
it('handles nested arrays', () => {
|
||||
const data = {
|
||||
string: 'string',
|
||||
array: ['an', 'array'],
|
||||
nested: {
|
||||
number: 12,
|
||||
array: [{ key: 1 }, { key: 2 }],
|
||||
},
|
||||
};
|
||||
const config = new ObjectToConfigAdapter(data);
|
||||
|
||||
expect(config.getFlattenedPaths()).toEqual([
|
||||
'string',
|
||||
'array',
|
||||
'nested.number',
|
||||
'nested.array',
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
import { cloneDeep, get, has, set } from 'lodash';
|
||||
|
||||
import { getFlattenedObject } from '../../utils';
|
||||
import { Config, ConfigPath } from './';
|
||||
|
||||
/**
|
||||
|
@ -41,24 +42,10 @@ export class ObjectToConfigAdapter implements Config {
|
|||
}
|
||||
|
||||
public getFlattenedPaths() {
|
||||
return [...flattenObjectKeys(this.rawConfig)];
|
||||
return Object.keys(getFlattenedObject(this.rawConfig));
|
||||
}
|
||||
|
||||
public toRaw() {
|
||||
return cloneDeep(this.rawConfig);
|
||||
}
|
||||
}
|
||||
|
||||
function* flattenObjectKeys(
|
||||
obj: { [key: string]: any },
|
||||
path: string = ''
|
||||
): IterableIterator<string> {
|
||||
if (typeof obj !== 'object' || obj === null) {
|
||||
yield path;
|
||||
} else {
|
||||
for (const [key, value] of Object.entries(obj)) {
|
||||
const newPath = path !== '' ? `${path}.${key}` : key;
|
||||
yield* flattenObjectKeys(value, newPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -200,6 +200,24 @@ describe('getUnusedConfigKeys', () => {
|
|||
).toEqual(['foo.dolly']);
|
||||
});
|
||||
|
||||
it('handles array values', async () => {
|
||||
expect(
|
||||
await getUnusedConfigKeys({
|
||||
coreHandledConfigPaths: ['core', 'array'],
|
||||
pluginSpecs: [],
|
||||
disabledPluginSpecs: [],
|
||||
settings: {
|
||||
core: {
|
||||
prop: 'value',
|
||||
array: [1, 2, 3],
|
||||
},
|
||||
array: ['some', 'values'],
|
||||
},
|
||||
legacyConfig: getConfig({}),
|
||||
})
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
describe('using deprecation', () => {
|
||||
it('should use the plugin deprecations provider', async () => {
|
||||
expect(
|
||||
|
|
Loading…
Reference in a new issue