errors: set statusCode in ResponseError
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
@@ -35,6 +35,8 @@ describe('ResponseError', () => {
|
||||
const e = await ResponseError.fromResponse(response as Response);
|
||||
expect(e.name).toEqual('ResponseError');
|
||||
expect(e.message).toEqual('Request failed with 444 Fours');
|
||||
expect(e.statusCode).toEqual(444);
|
||||
expect(e.statusText).toEqual('Fours');
|
||||
expect(e.cause.name).toEqual('Fours');
|
||||
expect(e.cause.message).toEqual('Expected fives');
|
||||
expect(e.cause.stack).toEqual('lines');
|
||||
|
||||
@@ -53,6 +53,9 @@ export class ResponseError extends Error {
|
||||
*/
|
||||
readonly cause: Error;
|
||||
|
||||
readonly statusCode: number;
|
||||
|
||||
readonly statusText: string;
|
||||
/**
|
||||
* Constructs a ResponseError based on a failed response.
|
||||
*
|
||||
@@ -65,9 +68,9 @@ export class ResponseError extends Error {
|
||||
): Promise<ResponseError> {
|
||||
const data = await parseErrorResponseBody(response);
|
||||
|
||||
const status = data.response.statusCode || response.status;
|
||||
const statusText = data.error.name || response.statusText;
|
||||
const message = `Request failed with ${status} ${statusText}`;
|
||||
const statusCode = data.response.statusCode || response.status;
|
||||
const statusText = response.statusText;
|
||||
const message = `Request failed with ${statusCode} ${statusText}`;
|
||||
const cause = deserializeError(data.error);
|
||||
|
||||
return new ResponseError({
|
||||
@@ -75,19 +78,26 @@ export class ResponseError extends Error {
|
||||
response,
|
||||
data,
|
||||
cause,
|
||||
statusCode,
|
||||
statusText,
|
||||
});
|
||||
}
|
||||
|
||||
private constructor(props: {
|
||||
private constructor(opts: {
|
||||
message: string;
|
||||
response: ConsumedResponse;
|
||||
data: ErrorResponseBody;
|
||||
cause: Error;
|
||||
statusCode: number;
|
||||
statusText: string;
|
||||
}) {
|
||||
super(props.message);
|
||||
super(opts.message);
|
||||
|
||||
this.name = 'ResponseError';
|
||||
this.response = props.response;
|
||||
this.body = props.data;
|
||||
this.cause = props.cause;
|
||||
this.response = opts.response;
|
||||
this.body = opts.data;
|
||||
this.cause = opts.cause;
|
||||
this.statusCode = opts.statusCode;
|
||||
this.statusText = opts.statusText;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user