fix(error-handler): use HTTP 422 for validation errors
This commit is contained in:
@@ -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({
|
||||
|
@@ -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) {
|
||||
|
@@ -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 };
|
||||
|
Reference in New Issue
Block a user