Skip to content
Snippets Groups Projects
Unverified Commit 0e218922 authored by Praveen Adusumilli's avatar Praveen Adusumilli Committed by GitHub
Browse files

fix: Add validations for aliases (#6426)

parent 08de7aff
No related branches found
No related tags found
No related merge requests found
......@@ -88,6 +88,24 @@ Array [
]
`;
exports[`config/validation validateConfig(config) errors if aliases depth is more than 1 1`] = `
Array [
Object {
"depName": "Configuration Error",
"message": "Invalid alias object configuration",
},
]
`;
exports[`config/validation validateConfig(config) errors if aliases have invalid url 1`] = `
Array [
Object {
"depName": "Configuration Error",
"message": "Invalid alias object configuration",
},
]
`;
exports[`config/validation validateConfig(config) errors if regexManager fields are missing 1`] = `
Array [
Object {
......@@ -150,3 +168,5 @@ Array [
},
]
`;
exports[`config/validation validateConfig(config) validates valid alias objects 1`] = `Array []`;
......@@ -336,5 +336,51 @@ describe('config/validation', () => {
expect(warnings).toHaveLength(0);
expect(errors).toHaveLength(0);
});
it('validates valid alias objects', async () => {
const config = {
aliases: {
example1: 'http://www.example.com',
example2: 'https://www.example2.com/example',
},
};
const { warnings, errors } = await configValidation.validateConfig(
config
);
expect(warnings).toHaveLength(0);
expect(errors).toHaveLength(0);
expect(errors).toMatchSnapshot();
});
it('errors if aliases depth is more than 1', async () => {
const config = {
aliases: {
sample: {
example1: 'http://www.example.com',
},
},
};
const { warnings, errors } = await configValidation.validateConfig(
config
);
expect(warnings).toHaveLength(0);
expect(errors).toHaveLength(1);
expect(errors).toMatchSnapshot();
});
it('errors if aliases have invalid url', async () => {
const config = {
aliases: {
example1: 'noturl',
example2: 'http://www.example.com',
},
};
const { warnings, errors } = await configValidation.validateConfig(
config
);
expect(warnings).toHaveLength(0);
expect(errors).toHaveLength(1);
expect(errors).toMatchSnapshot();
});
});
});
......@@ -56,6 +56,17 @@ export async function validateConfig(
return ignoredNodes.includes(key);
}
function validateAliasObject(key: string, val: object): boolean {
if (key === 'aliases') {
for (const value of Object.values(val)) {
if (!is.urlString(value)) {
return false;
}
}
}
return true;
}
for (const [key, val] of Object.entries(config)) {
const currentPath = parentPath ? `${parentPath}.${key}` : key;
if (
......@@ -346,17 +357,26 @@ export async function validateConfig(
}
} else if (type === 'object' && currentPath !== 'compatibility') {
if (is.object(val)) {
const ignoredObjects = options
.filter((option) => option.freeChoice)
.map((option) => option.name);
if (!ignoredObjects.includes(key)) {
const subValidation = await module.exports.validateConfig(
val,
isPreset,
currentPath
);
warnings = warnings.concat(subValidation.warnings);
errors = errors.concat(subValidation.errors);
if (key === 'aliases') {
if (!validateAliasObject(key, val)) {
errors.push({
depName: 'Configuration Error',
message: `Invalid alias object configuration`,
});
}
} else {
const ignoredObjects = options
.filter((option) => option.freeChoice)
.map((option) => option.name);
if (!ignoredObjects.includes(key)) {
const subValidation = await module.exports.validateConfig(
val,
isPreset,
currentPath
);
warnings = warnings.concat(subValidation.warnings);
errors = errors.concat(subValidation.errors);
}
}
} else {
errors.push({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment