From eb3c5813ac77bccb68eeb87aae5c9c78ddb2e245 Mon Sep 17 00:00:00 2001
From: Pedro Gomes
Date: Tue, 20 Mar 2018 13:57:37 +0000
Subject: [PATCH] Add entire response object on each request response
---
src/browser/services/fetch-client.js | 4 ++--
src/core/utils/error-factory.js | 6 +++---
src/node/services/request-client.js | 2 +-
test/core/utils/error-factory.spec.js | 7 +++++++
4 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/browser/services/fetch-client.js b/src/browser/services/fetch-client.js
index e733b37..7dc314e 100644
--- a/src/browser/services/fetch-client.js
+++ b/src/browser/services/fetch-client.js
@@ -27,12 +27,12 @@ export default class FetchClient extends Client {
})
.catch(error => {
if (!error.json) {
- return Promise.reject(createError(this._formatResponse({ error, status: -1 })));
+ return Promise.reject(createError(this._formatResponse({ error, status: -1 }), error));
}
return error.text()
.then(this._parseText)
- .then(body => Promise.reject(createError(this._formatResponse(error, body))));
+ .then(body => Promise.reject(createError(this._formatResponse(error, body), error)));
});
}
diff --git a/src/core/utils/error-factory.js b/src/core/utils/error-factory.js
index 7d45435..ed1d867 100644
--- a/src/core/utils/error-factory.js
+++ b/src/core/utils/error-factory.js
@@ -1,9 +1,9 @@
import errors from '../errors';
-export function createError(response) {
+export function createError(error, response) {
for (const SDKError of errors) {
- if (SDKError.hasError && SDKError.hasError(response)) {
- return new SDKError(response);
+ if (SDKError.hasError && SDKError.hasError(error)) {
+ return new SDKError({ ...error, response });
}
}
}
diff --git a/src/node/services/request-client.js b/src/node/services/request-client.js
index 502997d..2a0f91d 100644
--- a/src/node/services/request-client.js
+++ b/src/node/services/request-client.js
@@ -16,7 +16,7 @@ export default class RequestClient extends Client {
url
})
.then(response => this._formatResponse(response))
- .catch(response => Promise.reject(response instanceof RequestError ? response : createError(this._formatResponse(response.response))));
+ .catch(response => Promise.reject(response instanceof RequestError ? response : createError(this._formatResponse(response.response), response)));
}
_formatResponse({ body, headers, statusCode }) {
diff --git a/test/core/utils/error-factory.spec.js b/test/core/utils/error-factory.spec.js
index 4857f57..2c32904 100644
--- a/test/core/utils/error-factory.spec.js
+++ b/test/core/utils/error-factory.spec.js
@@ -53,5 +53,12 @@ describe('ErrorFactory', () => {
it('should create a `ValidationFailedError`', () => {
expect(createError({ body: { code: 'validation_failed' } })).toBeInstanceOf(ValidationFailedError);
});
+
+ it('should create add an `response` attribute when provided', () => {
+ const error = createError({ status: 403 }, { foo: 'bar' });
+
+ expect(error).toBeInstanceOf(ForbiddenError);
+ expect(error.response).toEqual({ foo: 'bar' });
+ });
});
});