/node_modules/request/tests/test-form.js

https://bitbucket.org/gagginaspinnata/todo-app-with-angularjs · JavaScript · 79 lines · 52 code · 19 blank · 8 comment · 12 complexity · be87c76894622ee67746f763598c01d5 MD5 · raw file

  1. var assert = require('assert')
  2. var http = require('http');
  3. var path = require('path');
  4. var mime = require('mime');
  5. var request = require('../main.js');
  6. var fs = require('fs');
  7. var remoteFile = 'http://nodejs.org/images/logo.png';
  8. var FIELDS = [
  9. {name: 'my_field', value: 'my_value'},
  10. {name: 'my_buffer', value: new Buffer([1, 2, 3])},
  11. {name: 'my_file', value: fs.createReadStream(__dirname + '/unicycle.jpg')},
  12. {name: 'remote_file', value: request(remoteFile) }
  13. ];
  14. var server = http.createServer(function(req, res) {
  15. // temp workaround
  16. var data = '';
  17. req.setEncoding('utf8');
  18. req.on('data', function(d) {
  19. data += d;
  20. });
  21. req.on('end', function() {
  22. // check for the fields' traces
  23. // 1st field : my_field
  24. var field = FIELDS.shift();
  25. assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
  26. assert.ok( data.indexOf(field.value) != -1 );
  27. // 2nd field : my_buffer
  28. var field = FIELDS.shift();
  29. assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
  30. assert.ok( data.indexOf(field.value) != -1 );
  31. // 3rd field : my_file
  32. var field = FIELDS.shift();
  33. assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
  34. assert.ok( data.indexOf('; filename="'+path.basename(field.value.path)+'"') != -1 );
  35. // check for unicycle.jpg traces
  36. assert.ok( data.indexOf('2005:06:21 01:44:12') != -1 );
  37. assert.ok( data.indexOf('Content-Type: '+mime.lookup(field.value.path) ) != -1 );
  38. // 4th field : remote_file
  39. var field = FIELDS.shift();
  40. assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
  41. assert.ok( data.indexOf('; filename="'+path.basename(field.value.path)+'"') != -1 );
  42. // check for http://nodejs.org/images/logo.png traces
  43. assert.ok( data.indexOf('ImageReady') != -1 );
  44. assert.ok( data.indexOf('Content-Type: '+mime.lookup(remoteFile) ) != -1 );
  45. res.writeHead(200);
  46. res.end('done');
  47. });
  48. });
  49. server.listen(8080, function() {
  50. var req = request.post('http://localhost:8080/upload', function () {
  51. server.close();
  52. })
  53. var form = req.form()
  54. FIELDS.forEach(function(field) {
  55. form.append(field.name, field.value);
  56. });
  57. });
  58. process.on('exit', function() {
  59. assert.strictEqual(FIELDS.length, 0);
  60. });