Skip to content
This repository has been archived by the owner on Apr 26, 2022. It is now read-only.

Commit

Permalink
Merge pull request #35 from manish-tal/master
Browse files Browse the repository at this point in the history
UploadRequest to provide original xhr request as part of callback par…
  • Loading branch information
zackify committed May 28, 2019
2 parents cc04a42 + 336fab8 commit c854f8e
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/request/register-listeners.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,25 @@ export default ({ xhr, progress, resolve }) => {
} catch (e) {
response = xhr.response;
}

let headers = xhr
.getAllResponseHeaders()
.trim()
.split(/[\r\n]+/)
.map(line => line.split(': '))
.reduce(
(acc, [header, value]) => {
acc[header] = value;
return acc;
},
{}
);

resolve({
response,
error: xhr.status < 200 || xhr.status >= 300,
status: xhr.status,
headers,
});
});

Expand Down
35 changes: 35 additions & 0 deletions tests/unit/request/register-listeners.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ test('register listeners catches non json', () => {
addEventListener(name, value) {
listeners[name] = value;
},
getAllResponseHeaders() {
return 'header1: value1\r\nheader2: value2';
},
};

registerListeners({
Expand All @@ -26,3 +29,35 @@ test('register listeners catches non json', () => {
expect(listeners.progress()).toEqual(false);
expect(resolves[0].response).toEqual('not json');
});

test('register listeners returns header values', () => {
let listeners = {}, resolves = [];

const xhr = {
response: [],
upload: {
addEventListener(name, value) {
listeners[name] = value;
},
},
addEventListener(name, value) {
listeners[name] = value;
},
getAllResponseHeaders() {
return 'header1: value1\r\nheader2: value2';
},
};

registerListeners({
xhr,
resolve(value) {
resolves.push(value);
},
});
listeners.load();

const headers = resolves[0].headers;

expect(headers['header1']).toEqual('value1');
expect(headers['header2']).toEqual('value2');
});
3 changes: 3 additions & 0 deletions tests/xhr.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,8 @@ const mock = values => ({
setTimeout(() => progress({ loaded: 0.5, total: 1 }), 5);
setTimeout(() => load(JSON.stringify({ finished: 'hell yes' })), 15);
},
getAllResponseHeaders: () => {
return '';
},
...values,
});

0 comments on commit c854f8e

Please sign in to comment.