You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
parttimejob/node_modules/needle/test/stream_events_spec.js

144 lines
3.5 KiB

var needle = require('../'),
fs = require('fs'),
should = require('should'),
helpers = require('./helpers');
describe('stream events', function() {
var server,
port = 3456,
responseData,
serverOpts = {},
requestHandler = function(req, res) { res.end('OK') }
before(function() {
var opts = {
port: port,
handler: function(req, res) { requestHandler(req, res) }
}
server = helpers.server(opts);
})
after(function() {
server.close();
})
beforeEach(function() {
responseData = '';
})
describe('when consuming data directly', function() {
function send_request(opts, cb) {
return needle
.get('http://localhost:' + port, opts)
.on('data', function(data) { responseData += data })
}
describe('and request stream fails', function() {
it('emits done event with error', function(done) {
requestHandler = function(req, res) { req.socket.destroy() }
send_request({}).on('done', function(err) {
err.code.should.eql('ECONNRESET');
responseData.should.eql('');
done()
})
})
})
describe('and request succeeds but decoding fails', function() {
it('emits done event without error', function(done) {
requestHandler = function(req, res) {
res.setHeader('Content-Type', 'application/json')
res.end('invalid:json')
}
send_request({ json: true }).on('done', function(err) {
should.not.exist(err);
responseData.should.eql('invalid:json');
done()
})
})
})
describe('and request succeeds and pipeline works ok', function() {
it('emits done event without error', function(done) {
requestHandler = function(req, res) { res.end('{"ok":1}') }
send_request({ json: true }).on('done', function(err) {
should.not.exist(err);
responseData.should.eql('{"ok":1}');
done()
})
})
})
})
describe('when piping to a fs writableStream', function() {
var outFile = 'test/tmp.dat';
function send_request(opts, cb) {
return needle
.get('http://localhost:' + port, opts)
.pipe(fs.createWriteStream(outFile))
.on('data', function(data) { responseData += data })
}
after(function(done) {
fs.unlink(outFile, done)
})
describe('and request stream fails', function() {
it('final stream emits done event with error', function(done) {
requestHandler = function(req, res) { req.socket.destroy() }
send_request({}).on('done', function(err) {
err.code.should.eql('ECONNRESET');
done()
})
})
})
describe('and request succeeds but decoding fails', function() {
it('final stream emits done event without error', function(done) {
requestHandler = function(req, res) {
res.setHeader('Content-Type', 'application/json')
res.end('invalid:json')
}
send_request({ json: true }).on('done', function(err) {
should.not.exist(err);
done()
})
})
})
describe('and request succeeds and pipeline works ok', function() {
it('final stream emits done event without error', function(done) {
requestHandler = function(req, res) { res.end('{"ok":1}') }
send_request({ json: true }).on('done', function(err) {
should.not.exist(err);
done()
})
})
})
})
})