From 5995038e2154dd475fa5bfb4a58f23c25cda8d01 Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Mon, 26 Aug 2024 12:46:00 +0000 Subject: [PATCH] fix(error-handler): use HTTP 422 for validation errors --- .../admin/apps/create-auth-client.ee.test.js | 2 +- packages/backend/src/helpers/error-handler.js | 2 +- packages/backend/src/helpers/renderer.js | 20 +++++++------------ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/backend/src/controllers/api/v1/admin/apps/create-auth-client.ee.test.js b/packages/backend/src/controllers/api/v1/admin/apps/create-auth-client.ee.test.js index 2b5a374c..6e449cac 100644 --- a/packages/backend/src/controllers/api/v1/admin/apps/create-auth-client.ee.test.js +++ b/packages/backend/src/controllers/api/v1/admin/apps/create-auth-client.ee.test.js @@ -81,7 +81,7 @@ describe('POST /api/v1/admin/apps/:appKey/auth-clients', () => { .post('/api/v1/admin/apps/gitlab/auth-clients') .set('Authorization', token) .send(appAuthClient) - .expect(400); + .expect(422); expect(response.body.meta.type).toEqual('ModelValidation'); expect(response.body.errors).toMatchObject({ diff --git a/packages/backend/src/helpers/error-handler.js b/packages/backend/src/helpers/error-handler.js index 44d58fcc..9de3d1d0 100644 --- a/packages/backend/src/helpers/error-handler.js +++ b/packages/backend/src/helpers/error-handler.js @@ -17,7 +17,7 @@ const errorHandler = (error, request, response, next) => { } if (error instanceof ValidationError) { - renderObjectionError(response, error); + renderObjectionError(response, error, 422); } if (error instanceof DataError) { diff --git a/packages/backend/src/helpers/renderer.js b/packages/backend/src/helpers/renderer.js index 10851385..a87ce710 100644 --- a/packages/backend/src/helpers/renderer.js +++ b/packages/backend/src/helpers/renderer.js @@ -64,22 +64,16 @@ const renderError = (response, errors, status, type) => { return response.status(errorStatus).send(payload); }; -const renderObjectionError = (response, error) => { - const { - statusCode, - type, - data = {}, - } = error; +const renderObjectionError = (response, error, status) => { + const { statusCode, type, data = {} } = error; - const errorEntries = Object.entries(data); + const computedStatusCode = status || statusCode; - const computedErrors = errorEntries.reduce((errors, [fieldName, fieldErrors]) => { - const computedErrors = fieldErrors.map(fieldError => fieldError.message); + const computedErrors = Object.entries(data).map(([fieldName, fieldErrors]) => ({ + [fieldName]: fieldErrors.map(({ message }) => message) + })); - return errors.concat({ [fieldName]: computedErrors }); - }, []); - - return renderError(response, computedErrors, statusCode, type); + return renderError(response, computedErrors, computedStatusCode, type); }; export { renderObject, renderError, renderObjectionError };