Skip to content

Commit

Permalink
Adding HTTP status code for transformResponse (#4580)
Browse files Browse the repository at this point in the history
* Adding HTTP status code for transformResponse

* refs #1214

* Fix wrong argument for tranformResponse

* Fix test wrong argument for tranformData

* Add test case for transformData

* Add test case for transformData (reference headers case)

Co-authored-by: Jay <jasonsaayman@gmail.com>
  • Loading branch information
kaishuu0123 and jasonsaayman committed May 9, 2022
1 parent 9579bad commit 2f50c82
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 9 deletions.
2 changes: 1 addition & 1 deletion index.d.ts
Expand Up @@ -10,7 +10,7 @@ export interface AxiosRequestTransformer {
}

export interface AxiosResponseTransformer {
(data: any, headers?: AxiosResponseHeaders): any;
(data: any, headers?: AxiosResponseHeaders, status?: number): any;
}

export interface AxiosAdapter {
Expand Down
3 changes: 3 additions & 0 deletions lib/core/dispatchRequest.js
Expand Up @@ -36,6 +36,7 @@ module.exports = function dispatchRequest(config) {
config,
config.data,
config.headers,
null,
config.transformRequest
);

Expand Down Expand Up @@ -63,6 +64,7 @@ module.exports = function dispatchRequest(config) {
config,
response.data,
response.headers,
response.status,
config.transformResponse
);

Expand All @@ -77,6 +79,7 @@ module.exports = function dispatchRequest(config) {
config,
reason.response.data,
reason.response.headers,
reason.response.status,
config.transformResponse
);
}
Expand Down
5 changes: 3 additions & 2 deletions lib/core/transformData.js
Expand Up @@ -8,14 +8,15 @@ var defaults = require('../defaults');
*
* @param {Object|String} data The data to be transformed
* @param {Array} headers The headers for the request or response
* @param {Number} status HTTP status code
* @param {Array|Function} fns A single function or Array of functions
* @returns {*} The resulting transformed data
*/
module.exports = function transformData(data, headers, fns) {
module.exports = function transformData(data, headers, status, fns) {
var context = this || defaults;
/*eslint no-param-reassign:0*/
utils.forEach(fns, function transform(fn) {
data = fn.call(context, data, headers);
data = fn.call(context, data, headers, status);
});

return data;
Expand Down
27 changes: 25 additions & 2 deletions test/specs/core/transformData.spec.js
Expand Up @@ -3,7 +3,7 @@ var transformData = require('../../../lib/core/transformData');
describe('core::transformData', function () {
it('should support a single transformer', function () {
var data;
data = transformData(data, null, function (data) {
data = transformData(data, null, null, function (data) {
data = 'foo';
return data;
});
Expand All @@ -13,7 +13,7 @@ describe('core::transformData', function () {

it('should support an array of transformers', function () {
var data = '';
data = transformData(data, null, [function (data) {
data = transformData(data, null, null, [function (data) {
data += 'f';
return data;
}, function (data) {
Expand All @@ -26,5 +26,28 @@ describe('core::transformData', function () {

expect(data).toEqual('foo');
});

it('should support reference headers in transformData', function () {
var headers = {
'content-type': 'foo/bar',
};
var data = '';
data = transformData(data, headers, null, [function (data, headers) {
data += headers['content-type'];
return data;
}]);

expect(data).toEqual('foo/bar');
});

it('should support reference status code in transformData', function () {
var data = '';
data = transformData(data, null, 200, [function (data, headers, status) {
data += status;
return data;
}]);

expect(data).toEqual('200');
});
});

8 changes: 4 additions & 4 deletions test/unit/defaults/transformReponse.js
Expand Up @@ -6,24 +6,24 @@ describe('transformResponse', function () {
describe('200 request', function () {
it('parses json', function () {
var data = '{"message": "hello, world"}';
var result = transformData(data, {'content-type': 'application/json'}, defaults.transformResponse);
var result = transformData(data, {'content-type': 'application/json'}, 200, defaults.transformResponse);
assert.strictEqual(result.message, 'hello, world');
});
it('ignores XML', function () {
var data = '<message>hello, world</message>';
var result = transformData(data, {'content-type': 'text/xml'}, defaults.transformResponse);
var result = transformData(data, {'content-type': 'text/xml'}, 200, defaults.transformResponse);
assert.strictEqual(result, data);
});
});
describe('204 request', function () {
it('does not parse the empty string', function () {
var data = '';
var result = transformData(data, {'content-type': undefined}, defaults.transformResponse);
var result = transformData(data, {'content-type': undefined}, 204, defaults.transformResponse);
assert.strictEqual(result, '');
});
it('does not parse undefined', function () {
var data = undefined;
var result = transformData(data, {'content-type': undefined}, defaults.transformResponse);
var result = transformData(data, {'content-type': undefined}, 200, defaults.transformResponse);
assert.strictEqual(result, data);
});
});
Expand Down

0 comments on commit 2f50c82

Please sign in to comment.