1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Add file upload test for http request node

This commit is contained in:
Nick O'Leary 2019-03-06 21:21:35 +00:00
parent fe0d0f08e4
commit 3c013b3533
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9
2 changed files with 62 additions and 2 deletions

View File

@ -186,8 +186,8 @@ module.exports = function(RED) {
} }
} else if (this.authType === "digest") { } else if (this.authType === "digest") {
if (this.credentials.user) { if (this.credentials.user) {
// The first request will be send without auth information. Based on the 401 response, the library can determine // The first request will be sent without auth information. Based on the 401 response, the library can determine
// which auth type is required by the server. Then the request is resubmitted the with the appropriate auth header. // which auth type is required by the server. Then the request is resubmitted with the appropriate auth header.
opts.auth = { opts.auth = {
user: this.credentials.user, user: this.credentials.user,
pass: this.credentials.password || "", pass: this.credentials.password || "",

View File

@ -28,6 +28,7 @@ var httpProxyNode = require("nr-test-utils").require("@node-red/nodes/core/io/06
var hashSum = require("hash-sum"); var hashSum = require("hash-sum");
var httpProxy = require('http-proxy'); var httpProxy = require('http-proxy');
var cookieParser = require('cookie-parser'); var cookieParser = require('cookie-parser');
var multer = require("multer");
var RED = require("nr-test-utils").require("node-red/lib/red"); var RED = require("nr-test-utils").require("node-red/lib/red");
var fs = require('fs-extra'); var fs = require('fs-extra');
var auth = require('basic-auth'); var auth = require('basic-auth');
@ -118,7 +119,28 @@ describe('HTTP Request Node', function() {
} }
before(function(done) { before(function(done) {
testApp = express(); testApp = express();
// The fileupload test needs a different set of middleware - so mount
// as a separate express instance
var fileUploadApp = express();
var mp = multer({ storage: multer.memoryStorage() }).any();
fileUploadApp.post("/file-upload",function(req,res,next) {
mp(req,res,function(err) {
req._body = true;
next(err);
})
},bodyParser.json(),function(req,res) {
res.json({
body: req.body,
files: req.files
})
});
testApp.use(fileUploadApp);
testApp.use(bodyParser.raw({type:"*/*"})); testApp.use(bodyParser.raw({type:"*/*"}));
testApp.use(cookieParser(undefined,{decode:String})); testApp.use(cookieParser(undefined,{decode:String}));
testApp.get('/statusCode204', function(req,res) { res.status(204).end();}); testApp.get('/statusCode204', function(req,res) { res.status(204).end();});
@ -1645,6 +1667,44 @@ describe('HTTP Request Node', function() {
}); });
}); });
describe('file-upload', function() {
it('should upload a file', function(done) {
var flow = [{id:'n1',type:'http request',wires:[['n2']],method:'POST',ret:'obj',url:getTestURL('/file-upload')},
{id:"n2", type:"helper"}];
helper.load(httpRequestNode, flow, function() {
var n1 = helper.getNode("n1");
var n2 = helper.getNode("n2");
n2.on("input", function(msg) {
try {
msg.payload.should.have.property("body",{"other":"123"});
msg.payload.should.have.property("files");
msg.payload.files.should.have.length(1);
msg.payload.files[0].should.have.property('fieldname','file');
msg.payload.files[0].should.have.property('originalname','file.txt');
msg.payload.files[0].should.have.property('buffer',{"type":"Buffer","data":[72,101,108,108,111,32,87,111,114,108,100]});
done();
} catch(err) {
done(err);
}
});
n1.receive({
headers: {
'content-type':'multipart/form-data'
},
payload: {
file: {
value: Buffer.from("Hello World"),
options: {
filename: "file.txt"
}
},
other: 123
}
});
});
})
})
describe('redirect-cookie', function() { describe('redirect-cookie', function() {
it('should send cookies to the same domain when redirected(no cookies)', function(done) { it('should send cookies to the same domain when redirected(no cookies)', function(done) {
var flow = [{id:'n1',type:'http request',wires:[['n2']],method:'GET',ret:'obj',url:getTestURL('/redirectToSameDomain')}, var flow = [{id:'n1',type:'http request',wires:[['n2']],method:'GET',ret:'obj',url:getTestURL('/redirectToSameDomain')},