From 99bf8fcc1924fcb2f1d0c3e3086413d9d92b3625 Mon Sep 17 00:00:00 2001 From: Oliwia Rogala Date: Wed, 13 Mar 2024 12:09:52 +0100 Subject: [PATCH] fix(spec): validation errors formatting (#9687) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Enrico Bottacin Co-authored-by: VladimĂ­r Gorej --- src/core/plugins/spec/selectors.js | 7 +-- test/unit/core/plugins/spec/selectors.js | 55 +++++++++++++++++++++++- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/core/plugins/spec/selectors.js b/src/core/plugins/spec/selectors.js index bd7bb8e7..82607ac8 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 6cbb99cd..29f6ca25 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" + ]) + }) +})