Skip to content

Commit bf1122b

Browse files
alan-agius4filipesilva
authored andcommitted
fix(@angular-devkit/core): show allowed enum values when validation on enum fails
(cherry picked from commit 600d266)
1 parent 31d01fc commit bf1122b

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

packages/angular_devkit/core/src/json/schema/registry.ts

+10-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,16 @@ export class SchemaValidationException extends BaseException {
6363

6464
const messages = errors.map((err) => {
6565
let message = `Data path ${JSON.stringify(err.instancePath)} ${err.message}`;
66-
if (err.keyword === 'additionalProperties') {
67-
message += `(${err.params.additionalProperty})`;
66+
switch (err.keyword) {
67+
case 'additionalProperties':
68+
message += `(${err.params.additionalProperty})`;
69+
break;
70+
71+
case 'enum':
72+
message += `. Allowed values are: ${(err.params.allowedValues as string[] | undefined)
73+
?.map((v) => `"${v}"`)
74+
.join(', ')}`;
75+
break;
6876
}
6977

7078
return message + '.';

packages/angular_devkit/core/src/json/schema/registry_spec.ts

+26-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/* eslint-disable @typescript-eslint/no-explicit-any */
1010
import { map, mergeMap } from 'rxjs/operators';
1111
import { SchemaFormat } from './interface';
12-
import { CoreSchemaRegistry } from './registry';
12+
import { CoreSchemaRegistry, SchemaValidationException } from './registry';
1313
import { addUndefinedDefaults } from './transforms';
1414

1515
describe('CoreSchemaRegistry', () => {
@@ -138,6 +138,31 @@ describe('CoreSchemaRegistry', () => {
138138
.then(done, done.fail);
139139
});
140140

141+
it('fails on invalid enum value', (done) => {
142+
const registry = new CoreSchemaRegistry();
143+
registry.addPostTransform(addUndefinedDefaults);
144+
const data = { packageManager: 'foo' };
145+
146+
registry
147+
.compile({
148+
properties: {
149+
packageManager: { type: 'string', enum: ['npm', 'yarn', 'pnpm', 'cnpm'] },
150+
},
151+
additionalProperties: false,
152+
})
153+
.pipe(
154+
mergeMap((validator) => validator(data)),
155+
map((result) => {
156+
expect(result.success).toBe(false);
157+
expect(new SchemaValidationException(result.errors).message).toContain(
158+
`Data path "/packageManager" must be equal to one of the allowed values. Allowed values are: "npm", "yarn", "pnpm", "cnpm".`,
159+
);
160+
}),
161+
)
162+
.toPromise()
163+
.then(done, done.fail);
164+
});
165+
141166
it('fails on invalid additionalProperties async', (done) => {
142167
const registry = new CoreSchemaRegistry();
143168
registry.addPostTransform(addUndefinedDefaults);

0 commit comments

Comments
 (0)