fix(error-handler): use HTTP 422 for validation errors

This commit is contained in:
Ali BARIN
2024-08-26 12:46:00 +00:00
parent 337ba6ea87
commit 5995038e21
3 changed files with 9 additions and 15 deletions

View File

@@ -81,7 +81,7 @@ describe('POST /api/v1/admin/apps/:appKey/auth-clients', () => {
.post('/api/v1/admin/apps/gitlab/auth-clients') .post('/api/v1/admin/apps/gitlab/auth-clients')
.set('Authorization', token) .set('Authorization', token)
.send(appAuthClient) .send(appAuthClient)
.expect(400); .expect(422);
expect(response.body.meta.type).toEqual('ModelValidation'); expect(response.body.meta.type).toEqual('ModelValidation');
expect(response.body.errors).toMatchObject({ expect(response.body.errors).toMatchObject({

View File

@@ -17,7 +17,7 @@ const errorHandler = (error, request, response, next) => {
} }
if (error instanceof ValidationError) { if (error instanceof ValidationError) {
renderObjectionError(response, error); renderObjectionError(response, error, 422);
} }
if (error instanceof DataError) { if (error instanceof DataError) {

View File

@@ -64,22 +64,16 @@ const renderError = (response, errors, status, type) => {
return response.status(errorStatus).send(payload); return response.status(errorStatus).send(payload);
}; };
const renderObjectionError = (response, error) => { const renderObjectionError = (response, error, status) => {
const { const { statusCode, type, data = {} } = error;
statusCode,
type,
data = {},
} = error;
const errorEntries = Object.entries(data); const computedStatusCode = status || statusCode;
const computedErrors = errorEntries.reduce((errors, [fieldName, fieldErrors]) => { const computedErrors = Object.entries(data).map(([fieldName, fieldErrors]) => ({
const computedErrors = fieldErrors.map(fieldError => fieldError.message); [fieldName]: fieldErrors.map(({ message }) => message)
}));
return errors.concat({ [fieldName]: computedErrors }); return renderError(response, computedErrors, computedStatusCode, type);
}, []);
return renderError(response, computedErrors, statusCode, type);
}; };
export { renderObject, renderError, renderObjectionError }; export { renderObject, renderError, renderObjectionError };