Skip to content

Commit 94b6565

Browse files
committed
More cleanup
1 parent 12f282a commit 94b6565

10 files changed

Lines changed: 144 additions & 130 deletions

Readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface]
99

1010
[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:0.10-5.x)](https://travis-ci.org/form-data/form-data)
1111
[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/form-data/master.svg?label=windows:0.10-5.x)](https://ci.appveyor.com/project/alexindigo/form-data)
12-
[![Coverage Status](https://img.shields.io/coveralls/jekyll/jekyll/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)
12+
[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master)
1313

1414
[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data)
1515
[![Codacy Badge](https://img.shields.io/codacy/43ece80331c246179695e41f81eeffe2.svg)](https://www.codacy.com/app/form-data/form-data)

test/common.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ var fs = require('fs');
22
var path = require('path');
33
var assert = require('assert');
44
var fake = require('fake');
5+
var mime = require('mime-types');
56

67
var common = module.exports;
78

@@ -30,6 +31,22 @@ common.httpsServerCert = fs.readFileSync(path.join(__dirname, './fixture/cert.pe
3031

3132
common.actions = {};
3233

34+
// generic form field population
35+
common.actions.populateFields = function(form, fields)
36+
{
37+
var field;
38+
for (var name in fields) {
39+
if (!fields.hasOwnProperty(name)) { continue; }
40+
41+
field = fields[name];
42+
// important to append ReadStreams within the same tick
43+
if ((typeof field.value == 'function')) {
44+
field.value = field.value();
45+
}
46+
form.append(name, field.value);
47+
}
48+
};
49+
3350
// generic form submit
3451
common.actions.submit = function(form, server)
3552
{
@@ -48,6 +65,24 @@ common.actions.submit = function(form, server)
4865
});
4966
};
5067

68+
common.actions.checkForm = function(form, fields, callback)
69+
{
70+
var fieldChecked = 0;
71+
72+
form
73+
.on('field', function(name, value) {
74+
fieldChecked++;
75+
common.actions.formOnField(fields, name, value);
76+
})
77+
.on('file', function(name, file) {
78+
fieldChecked++;
79+
common.actions.formOnFile(fields, name, file);
80+
})
81+
.on('end', function() {
82+
callback(fieldChecked);
83+
});
84+
};
85+
5186
common.actions.basicFormOnField = function(name, value) {
5287
assert.strictEqual(name, 'my_field');
5388
assert.strictEqual(value, 'my_value');
@@ -62,8 +97,8 @@ common.actions.formOnField = function(FIELDS, name, value) {
6297
common.actions.formOnFile = function(FIELDS, name, file) {
6398
assert.ok(name in FIELDS);
6499
var field = FIELDS[name];
65-
assert.strictEqual(file.name, path.basename(field.value.path));
66-
assert.strictEqual(file.type, field.type);
100+
assert.strictEqual(file.name, path.basename(field.value.path || field.name));
101+
assert.strictEqual(file.type, field.type ? field.type : mime.lookup(file.name));
67102
};
68103

69104
// after form has finished parsing

test/integration/test-custom-content-type.js

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ var FormData = require(common.dir.lib + '/form_data');
77

88
// wrap non simple values into function
99
// just to deal with ReadStream "autostart"
10-
// Can't wait for 0.10
1110
var FIELDS = {
1211
'no_type': {
1312
value: 'my_value'
@@ -82,23 +81,6 @@ server.listen(common.port, function() {
8281

8382
// custom params object passed to submit
8483
common.actions.submit(form, server);
85-
// form.submit({
86-
// port: common.port,
87-
// path: '/'
88-
// }, function(err, res) {
89-
//
90-
// if (err) {
91-
// throw err;
92-
// }
93-
//
94-
// assert.strictEqual(res.statusCode, 200);
95-
//
96-
// // unstuck new streams
97-
// res.resume();
98-
//
99-
// server.close();
100-
// });
101-
10284
});
10385

10486
process.on('exit', function() {
Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
var common = require('../common');
22
var assert = common.assert;
33
var http = require('http');
4-
var path = require('path');
5-
var mime = require('mime-types');
64
var parseUrl = require('url').parse;
75
var FormData = require(common.dir.lib + '/form_data');
86
var IncomingForm = require('formidable').IncomingForm;
97

108
// static server prepared for all tests
119
var remoteFile = 'http://localhost:' + common.staticPort + '/unicycle.jpg';
1210

13-
var FIELDS;
1411
var server;
1512

1613
var parsedUrl = parseUrl(remoteFile);
@@ -21,19 +18,31 @@ var options = {
2118
host: parsedUrl.hostname
2219
};
2320

21+
var FIELDS = {
22+
'my_field': {
23+
value: 'my_value'
24+
},
25+
'my_buffer': {
26+
type: FormData.DEFAULT_CONTENT_TYPE,
27+
value: common.defaultTypeValue
28+
},
29+
'remote_file': {
30+
value: 'TBD',
31+
name: remoteFile
32+
}
33+
};
34+
// count total
35+
var fieldsPassed = Object.keys(FIELDS).length;
36+
2437
// request static file
2538
http.request(options, function(response) {
2639

27-
FIELDS = [
28-
{name: 'my_field', value: 'my_value'},
29-
{name: 'my_buffer', value: new Buffer([1, 2, 3])},
30-
{name: 'remote_file', value: response }
31-
];
32-
3340
var form = new FormData();
34-
FIELDS.forEach(function(field) {
35-
form.append(field.name, field.value);
36-
});
41+
42+
// add http response to the form fields
43+
FIELDS['remote_file'].value = response;
44+
45+
common.actions.populateFields(form, FIELDS);
3746

3847
server.listen(common.port, function() {
3948
common.actions.submit(form, server);
@@ -48,23 +57,16 @@ server = http.createServer(function(req, res) {
4857

4958
form.parse(req);
5059

51-
form
52-
.on('field', function(name, value) {
53-
var field = FIELDS.shift();
54-
assert.strictEqual(name, field.name);
55-
assert.strictEqual(value, field.value + '');
56-
})
57-
.on('file', function(name, file) {
58-
var field = FIELDS.shift();
59-
assert.strictEqual(name, field.name);
60-
// http response doesn't have path property
61-
assert.strictEqual(file.name, path.basename(field.value.path || remoteFile));
62-
assert.strictEqual(file.type, mime.lookup(file.name));
63-
})
64-
.on('end', common.actions.formOnEnd.bind(null, res));
60+
common.actions.checkForm(form, FIELDS, function(fieldsChecked)
61+
{
62+
// keep track of number of the processed fields
63+
fieldsPassed = fieldsPassed - fieldsChecked;
64+
// finish it
65+
common.actions.formOnEnd(res);
66+
});
6567
});
6668

6769

6870
process.on('exit', function() {
69-
assert.strictEqual(FIELDS.length, 0);
71+
assert.strictEqual(fieldsPassed, 0);
7072
});

test/integration/test-pipe.js

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ var remoteFile = 'http://localhost:' + common.staticPort + '/unicycle.jpg';
1111

1212
// wrap non simple values into function
1313
// just to deal with ReadStream "autostart"
14-
// Can't wait for 0.10
1514
var FIELDS = {
1615
'my_field': {
1716
value: 'my_value'
@@ -37,16 +36,13 @@ var server = http.createServer(function(req, res) {
3736

3837
form.parse(req);
3938

40-
form
41-
.on('field', function(name, value) {
42-
fieldsPassed--;
43-
common.actions.formOnField(FIELDS, name, value);
44-
})
45-
.on('file', function(name, file) {
46-
fieldsPassed--;
47-
common.actions.formOnFile(FIELDS, name, file);
48-
})
49-
.on('end', common.actions.formOnEnd.bind(null, res));
39+
common.actions.checkForm(form, FIELDS, function(fieldsChecked)
40+
{
41+
// keep track of number of the processed fields
42+
fieldsPassed = fieldsPassed - fieldsChecked;
43+
// finish it
44+
common.actions.formOnEnd(res);
45+
});
5046
});
5147

5248
server.listen(common.port, function() {

test/integration/test-return-http-request.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ server.listen(common.port, function() {
7474
});
7575
};
7676

77-
// track progres
77+
// track progress
7878
form.on('progress', function(chunk) {
7979
progress += chunk.length;
8080
assert.ok(progress <= expectedLength);

test/integration/test-submit-custom-header.js

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ var remoteFile = 'http://localhost:' + common.staticPort + '/unicycle.jpg';
1111

1212
// wrap non simple values into function
1313
// just to deal with ReadStream "autostart"
14-
// Can't wait for 0.10
1514
var FIELDS = {
1615
'my_field': {
1716
value: 'my_value'
@@ -38,33 +37,20 @@ var server = http.createServer(function(req, res) {
3837

3938
form.parse(req);
4039

41-
form
42-
.on('field', function(name, value) {
43-
fieldsPassed--;
44-
common.actions.formOnField(FIELDS, name, value);
45-
})
46-
.on('file', function(name, file) {
47-
fieldsPassed--;
48-
common.actions.formOnFile(FIELDS, name, file);
49-
})
50-
.on('end', common.actions.formOnEnd.bind(null, res));
40+
common.actions.checkForm(form, FIELDS, function(fieldsChecked)
41+
{
42+
// keep track of number of the processed fields
43+
fieldsPassed = fieldsPassed - fieldsChecked;
44+
// finish it
45+
common.actions.formOnEnd(res);
46+
});
5147
});
5248

5349
server.listen(common.port, function() {
5450

5551
var form = new FormData();
5652

57-
var field;
58-
for (var name in FIELDS) {
59-
if (!FIELDS.hasOwnProperty(name)) { continue; }
60-
61-
field = FIELDS[name];
62-
// important to append ReadStreams within the same tick
63-
if ((typeof field.value == 'function')) {
64-
field.value = field.value();
65-
}
66-
form.append(name, field.value);
67-
}
53+
common.actions.populateFields(form, FIELDS);
6854

6955
// custom params object passed to submit
7056
form.submit({
@@ -73,13 +59,15 @@ server.listen(common.port, function() {
7359
headers: {
7460
'x-test-header': 'test-header-value'
7561
}
76-
}, function(err, res) {
77-
if (err) throw err;
62+
}, function(error, result) {
63+
if (error) {
64+
throw error;
65+
}
7866

79-
assert.strictEqual(res.statusCode, 200);
67+
assert.strictEqual(result.statusCode, 200);
8068

8169
// unstuck streams
82-
res.resume();
70+
result.resume();
8371
server.close();
8472
});
8573

test/integration/test-submit-custom.js

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ var remoteFile = 'http://localhost:' + common.staticPort + '/unicycle.jpg';
1111

1212
// wrap non simple values into function
1313
// just to deal with ReadStream "autostart"
14-
// Can't wait for 0.10
1514
var FIELDS = {
1615
'my_field': {
1716
value: 'my_value'
@@ -37,41 +36,30 @@ var server = http.createServer(function(req, res) {
3736

3837
form.parse(req);
3938

40-
form
41-
.on('field', function(name, value) {
42-
fieldsPassed--;
43-
common.actions.formOnField(FIELDS, name, value);
44-
})
45-
.on('file', function(name, file) {
46-
fieldsPassed--;
47-
common.actions.formOnFile(FIELDS, name, file);
48-
})
49-
.on('end', common.actions.formOnEnd.bind(null, res));
39+
common.actions.checkForm(form, FIELDS, function(fieldsChecked)
40+
{
41+
// keep track of number of the processed fields
42+
fieldsPassed = fieldsPassed - fieldsChecked;
43+
// finish it
44+
common.actions.formOnEnd(res);
45+
});
5046
});
5147

5248
server.listen(common.port, function() {
5349

5450
var form = new FormData();
5551

56-
var field;
57-
for (var name in FIELDS) {
58-
if (!FIELDS.hasOwnProperty(name)) { continue; }
59-
60-
field = FIELDS[name];
61-
// important to append ReadStreams within the same tick
62-
if ((typeof field.value == 'function')) {
63-
field.value = field.value();
64-
}
65-
form.append(name, field.value);
66-
}
52+
common.actions.populateFields(form, FIELDS);
6753

6854
// custom params object passed to submit
6955
form.submit({
7056
port: common.port,
7157
path: '/'
7258
}, function(err, res) {
7359

74-
if (err) throw err;
60+
if (err) {
61+
throw err;
62+
}
7563

7664
assert.strictEqual(res.statusCode, 200);
7765

0 commit comments

Comments
 (0)