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

Commit

Permalink
Pass response status code back, trigger error failed if 500
Browse files Browse the repository at this point in the history
  • Loading branch information
zackify committed Mar 26, 2017
1 parent cd981d2 commit adf4eab
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 10 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@navjobs/upload",
"version": "1.0.0",
"version": "1.0.1",
"description": "HOC that displays a file upload on clicking children",
"main": "dist/index.js",
"scripts": {
Expand Down
4 changes: 2 additions & 2 deletions src/request/register-listeners.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ export default ({ xhr, progress, resolve }) => {
} catch (e) {
response = xhr.response;
}
resolve({ response });
resolve({ response, error: xhr.status === 500, status: xhr.status });
});

xhr.addEventListener('error', () => {
resolve({ error: true });
resolve({ error: true, status: xhr.status });
});

xhr.addEventListener('abort', () => {
Expand Down
19 changes: 14 additions & 5 deletions src/uploader.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,30 @@ export default class Uploader extends React.Component {
files,
},
progress => this.setState({ progress })
).then(({ response, error, abort }) => {
if (error) return this.setState({ failed: true });
).then(({ response, error, abort, status }) => {
if (error) return this.setState({ failed: true, response, status });
if (abort) return this.setState({ canceled: true });

if (onComplete) onComplete(response);
this.setState({ response, complete: true });
if (onComplete) onComplete(response, status);
this.setState({ response, status, complete: true });
});
}

render() {
let { children } = this.props;
let { progress, canceled, complete, failed, files, response } = this.state;
let {
progress,
canceled,
complete,
failed,
files,
response,
status,
} = this.state;
return children({
files,
failed,
status,
progress,
canceled,
complete,
Expand Down
15 changes: 13 additions & 2 deletions tests/unit/uploader.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Uploader from '../../src/uploader';
test('Triggers upload', async () => {
let progressValue = 0;
let completedValue = false;
let completedStatus = false;

const output = mount(
<Uploader
Expand All @@ -12,7 +13,10 @@ test('Triggers upload', async () => {
method: 'POST',
}}
uploadOnSelection={true}
onComplete={response => completedValue = response}
onComplete={(response, status) => {
completedValue = response;
completedStatus = status;
}}
>
{({ onFiles, startUpload, progress, complete, canceled, failed }) => {
if (progress) progressValue = progress;
Expand Down Expand Up @@ -41,11 +45,13 @@ test('Triggers upload', async () => {
expect(progressValue).toEqual(50);

expect(completedValue).toEqual({ finished: 'hell yes' });
expect(completedStatus).toEqual(200);
});

test('Triggers upload with headers and extra fields', async () => {
let progressValue = 0;
let wasCompleted = false;
let statusCode = false;

const output = mount(
<Uploader
Expand All @@ -62,8 +68,11 @@ test('Triggers upload with headers and extra fields', async () => {
uploadOnSelection={true}
onComplete={() => wasCompleted = true}
>
{({ onFiles, startUpload, progress, complete, canceled, failed }) => {
{(
{ onFiles, startUpload, progress, complete, canceled, failed, status }
) => {
if (progress) progressValue = progress;
if (status) statusCode = status;
return (
<UploadField onFiles={onFiles}>
<div>
Expand All @@ -85,6 +94,7 @@ test('Triggers upload with headers and extra fields', async () => {
expect(fields.test).toEqual('test value');

expect(wasCompleted).toEqual(true);
expect(statusCode).toEqual(200);
});

test('doesnt upload unless upload button is clicked', async () => {
Expand Down Expand Up @@ -175,6 +185,7 @@ test('returns failed on bad request', async () => {
>
{({ onFiles, startUpload, progress, complete, canceled, failed }) => {
if (failed) didFail = true;

return (
<div>
<UploadField onFiles={onFiles}>
Expand Down
1 change: 1 addition & 0 deletions tests/xhr.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ let callbacks = [];
global.headers = [];
let blockSend;
const mock = values => ({
status: 200,
response: JSON.stringify({ finished: 'hell yes' }),
addEventListener: (name, callback) => {
callbacks.push({ name, callback });
Expand Down

0 comments on commit adf4eab

Please sign in to comment.