diff --git a/src/core/plugins/spec/selectors.js b/src/core/plugins/spec/selectors.js index bd7bb8e7688..82607ac8f1f 100644 --- a/src/core/plugins/spec/selectors.js +++ b/src/core/plugins/spec/selectors.js @@ -496,11 +496,12 @@ export const validationErrors = (state, pathMethod) => { paramValues.forEach( (p) => { let errors = p.get("errors") - if ( errors && errors.count() ) { - errors.forEach( e => result.push(e)) + if (errors && errors.count()) { + errors + .map((e) => (Map.isMap(e) ? `${e.get("propKey")}: ${e.get("error")}` : e)) + .forEach((e) => result.push(e)) } }) - return result } diff --git a/test/unit/core/plugins/spec/selectors.js b/test/unit/core/plugins/spec/selectors.js index 6cbb99cd264..29f6ca25a34 100644 --- a/test/unit/core/plugins/spec/selectors.js +++ b/test/unit/core/plugins/spec/selectors.js @@ -14,7 +14,8 @@ import { parameterInclusionSettingFor, consumesOptionsFor, taggedOperations, - isMediaTypeSchemaPropertiesEqual + isMediaTypeSchemaPropertiesEqual, + validationErrors } from "core/plugins/spec/selectors" import Petstore from "./assets/petstore.json" @@ -1380,3 +1381,55 @@ describe("isMediaTypeSchemaPropertiesEqual", () => { }) }) }) +describe("validationErrors", function() { + const state = fromJS({ + meta: { + paths: { + "/": { + get: { + parameters: { + id: { + errors: [ + "Value must be an integer" + ] + } + } + }, + post: { + parameters: { + body: { + errors: [ + { + error: "Value must be an integer", + propKey: "id" + }, + { + error: "Value must be a string", + propKey: "name" + } + ] + } + } + } + } + } + } + }) + + it("should return validation errors without formatting them", function () { + const result = validationErrors(state, ["/", "get"]) + + expect(result).toEqual([ + "Value must be an integer" + ]) + }) + + it("should return formatted validation errors", function () { + const result = validationErrors(state, ["/", "post"]) + + expect(result).toEqual([ + "id: Value must be an integer", + "name: Value must be a string" + ]) + }) +})