From f944fa2fd7ec41e2d6c68cde01314b8885a09b51 Mon Sep 17 00:00:00 2001 From: Loay Date: Tue, 25 Oct 2016 10:03:05 -0400 Subject: [PATCH] Return error when no file is uploaded --- lib/storage-handler.js | 15 ++++++++++++--- package.json | 3 ++- test/upload-download.test.js | 29 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/lib/storage-handler.js b/lib/storage-handler.js index fe9628c..4063bf6 100644 --- a/lib/storage-handler.js +++ b/lib/storage-handler.js @@ -41,7 +41,7 @@ exports.upload = function(provider, req, res, options, cb) { form.handlePart = function(part) { var self = this; - if (part.filename === undefined) { + if (part.filename === undefined || part.filename === '') { var value = ''; var decoder = new StringDecoder(this.encoding); @@ -187,11 +187,20 @@ exports.upload = function(provider, req, res, options, cb) { }; form.parse(req, function(err, _fields, _files) { + cb = cb || function() {}; + if (err) { console.error(err); + return cb(err); } - // eslint-disable-next-line no-unused-expressions - cb && cb(err, {files: files, fields: fields}); + + if (Object.keys(_files).length === 0) { + err = new Error('No file content uploaded'); + err.statusCode = 400; // DO NOT MODIFY res.status directly! + return cb(err); + } + + cb(null, {files: files, fields: fields}); }); }; diff --git a/package.json b/package.json index 50ee093..86e0994 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "loopback": "^3.0.0", "mkdirp": "^0.5.0", "mocha": "^2.1.0", - "supertest": "^0.15.0" + "supertest": "^0.15.0", + "semver": "^5.3.0" }, "repository": { "type": "git", diff --git a/test/upload-download.test.js b/test/upload-download.test.js index 164a3e7..a7d3728 100644 --- a/test/upload-download.test.js +++ b/test/upload-download.test.js @@ -7,6 +7,7 @@ var request = require('supertest'); var loopback = require('loopback'); var assert = require('assert'); +var semver = require('semver'); var app = loopback(); var path = require('path'); @@ -213,6 +214,34 @@ describe('storage service', function() { }); }); + it('returns error when no file is provided to upload', function(done) { + if (semver.gt(process.versions.node, '4.0.0')) { + request('http://localhost:' + app.get('port')) + .post('/imageContainers/album1/upload') + .set('Accept', 'application/json') + .set('Connection', 'keep-alive') + .expect('Content-Type', /json/) + .expect(400, function(err, res) { + var indexOfMsg = + res.body.error.message.toLowerCase().indexOf('no file'); + assert.notEqual(indexOfMsg, -1, + 'Error message does not contain \"no file\"'); + done(err); + }); + } else { + request('http://localhost:' + app.get('port')) + .post('/imageContainers/album1/upload') + .set('Accept', 'application/json') + .set('Connection', 'keep-alive') + .expect('Content-Type', /json/) + .expect(500, function(err, res) { + assert.equal(res.body.error.message, + 'bad content-type header, no content-type'); + done(err); + }); + } + }); + it('should get file by name', function(done) { request('http://localhost:' + app.get('port')) .get('/containers/album1/files/test.jpg')