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')
|
.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({
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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 };
|
||||||
|
Reference in New Issue
Block a user