Skip to content

Commit bd50685

Browse files
author
Adrian Punga
committed
Added test for the custom header functionality
1 parent bee0032 commit bd50685

1 file changed

Lines changed: 92 additions & 0 deletions

File tree

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
var common = require('../common');
2+
var assert = common.assert;
3+
var http = require('http');
4+
var path = require('path');
5+
var mime = require('mime');
6+
var request = require('request');
7+
var fs = require('fs');
8+
var FormData = require(common.dir.lib + '/form_data');
9+
var IncomingForm = require('formidable').IncomingForm;
10+
11+
var remoteFile = 'http://nodejs.org/images/logo.png';
12+
13+
// wrap non simple values into function
14+
// just to deal with ReadStream "autostart"
15+
// Can't wait for 0.10
16+
var FIELDS = {
17+
'my_field': 'my_value',
18+
'my_buffer': function(){ return new Buffer([1, 2, 3]); },
19+
'my_file': function(){ return fs.createReadStream(common.dir.fixture + '/unicycle.jpg'); },
20+
'remote_file': function(){ return request(remoteFile); }
21+
};
22+
var fieldsPassed = Object.keys(FIELDS).length;
23+
24+
var server = http.createServer(function(req, res) {
25+
26+
assert.ok(req.headers['x-test-header'], 'test-header-value');
27+
28+
var form = new IncomingForm({uploadDir: common.dir.tmp});
29+
30+
form.parse(req);
31+
32+
form
33+
.on('field', function(name, value) {
34+
fieldsPassed--;
35+
var field = FIELDS[name];
36+
assert.ok(field);
37+
assert.strictEqual(value, ''+field);
38+
})
39+
.on('file', function(name, file) {
40+
fieldsPassed--;
41+
var field = FIELDS[name];
42+
assert.ok(field);
43+
assert.strictEqual(file.name, path.basename(field.path));
44+
assert.strictEqual(file.type, mime.lookup(file.name));
45+
})
46+
.on('end', function() {
47+
res.writeHead(200);
48+
res.end('done');
49+
});
50+
});
51+
52+
server.listen(common.port, function() {
53+
54+
var form = new FormData();
55+
56+
for (var name in FIELDS) {
57+
if (!FIELDS.hasOwnProperty(name)) continue;
58+
59+
// important to append ReadStreams within the same tick
60+
if ((typeof FIELDS[name] == 'function')) {
61+
FIELDS[name] = FIELDS[name]();
62+
}
63+
64+
form.append(name, FIELDS[name]);
65+
}
66+
67+
// custom params object passed to submit
68+
form.submit({
69+
port: common.port,
70+
path: '/',
71+
headers: {
72+
'x-test-header': 'test-header-value'
73+
}
74+
}, function(err, res) {
75+
76+
if (err) {
77+
throw err;
78+
}
79+
80+
assert.strictEqual(res.statusCode, 200);
81+
82+
// unstuck new streams
83+
res.resume();
84+
85+
server.close();
86+
});
87+
88+
});
89+
90+
process.on('exit', function() {
91+
assert.strictEqual(fieldsPassed, 0);
92+
});

0 commit comments

Comments
 (0)