/* */ 
var common = require('../common');
var BOUNDARY = '---------------------------10102754414578508781458777923',
    FIXTURE = TEST_FIXTURES + '/multi_video.upload',
    fs = require('fs'),
    http = require('http'),
    formidable = require(common.lib + '/index'),
    server = http.createServer();
server.on('request', function(req, res) {
  var form = new formidable.IncomingForm(),
      uploads = {};
  form.uploadDir = TEST_TMP;
  form.hash = 'sha1';
  form.parse(req);
  form.on('fileBegin', function(field, file) {
    assert.equal(field, 'upload');
    var tracker = {
      file: file,
      progress: [],
      ended: false
    };
    uploads[file.name] = tracker;
    file.on('progress', function(bytesReceived) {
      tracker.progress.push(bytesReceived);
      assert.equal(bytesReceived, file.size);
    }).on('end', function() {
      tracker.ended = true;
    });
  }).on('field', function(field, value) {
    assert.equal(field, 'title');
    assert.equal(value, '');
  }).on('file', function(field, file) {
    assert.equal(field, 'upload');
    assert.strictEqual(uploads[file.name].file, file);
  }).on('end', function() {
    assert.ok(uploads['shortest_video.flv']);
    assert.ok(uploads['shortest_video.flv'].ended);
    assert.ok(uploads['shortest_video.flv'].progress.length > 3);
    assert.equal(uploads['shortest_video.flv'].file.hash, 'd6a17616c7143d1b1438ceeef6836d1a09186b3a');
    assert.equal(uploads['shortest_video.flv'].progress.slice(-1), uploads['shortest_video.flv'].file.size);
    assert.ok(uploads['shortest_video.mp4']);
    assert.ok(uploads['shortest_video.mp4'].ended);
    assert.ok(uploads['shortest_video.mp4'].progress.length > 3);
    assert.equal(uploads['shortest_video.mp4'].file.hash, '937dfd4db263f4887ceae19341dcc8d63bcd557f');
    server.close();
    res.writeHead(200);
    res.end('good');
  });
});
server.listen(TEST_PORT, function() {
  var stat,
      headers,
      request,
      fixture;
  stat = fs.statSync(FIXTURE);
  request = http.request({
    port: TEST_PORT,
    path: '/',
    method: 'POST',
    headers: {
      'content-type': 'multipart/form-data; boundary=' + BOUNDARY,
      'content-length': stat.size
    }
  });
  fs.createReadStream(FIXTURE).pipe(request);
});
