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')
.set('Authorization', token)
.send(appAuthClient)
.expect(400);
.expect(422);
expect(response.body.meta.type).toEqual('ModelValidation');
expect(response.body.errors).toMatchObject({

View File

@@ -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) {

View File

@@ -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 };