139 lines
3.6 KiB
JavaScript
139 lines
3.6 KiB
JavaScript
|
var should = require('should'),
|
||
|
needle = require('./../'),
|
||
|
http = require('http'),
|
||
|
stream = require('stream'),
|
||
|
fs = require('fs'),
|
||
|
port = 11111,
|
||
|
server;
|
||
|
|
||
|
describe('response streams', function() {
|
||
|
|
||
|
describe('when the server sends back json', function(){
|
||
|
|
||
|
before(function(done) {
|
||
|
server = http.createServer(function(req, res) {
|
||
|
res.setHeader('Content-Type', 'application/json')
|
||
|
res.end('{"foo":"bar"}')
|
||
|
}).listen(port, done);
|
||
|
});
|
||
|
|
||
|
after(function(done) {
|
||
|
server.close(done);
|
||
|
})
|
||
|
|
||
|
describe('and the client uses streams', function(){
|
||
|
|
||
|
it('creates a proper streams2 stream', function(done) {
|
||
|
var stream = needle.get('localhost:' + port)
|
||
|
|
||
|
// newer node versions set this to null instead of false
|
||
|
var bool = !!stream._readableState.flowing;
|
||
|
should.equal(false, bool);
|
||
|
|
||
|
var readableCalled = false;
|
||
|
stream.on('readable', function() {
|
||
|
readableCalled = true;
|
||
|
})
|
||
|
|
||
|
stream.on('finish', function() {
|
||
|
readableCalled.should.be.true;
|
||
|
done();
|
||
|
});
|
||
|
|
||
|
stream.resume();
|
||
|
})
|
||
|
|
||
|
it('emits a single data item which is our JSON object', function(done) {
|
||
|
var stream = needle.get('localhost:' + port)
|
||
|
|
||
|
var chunks = [];
|
||
|
stream.on('readable', function () {
|
||
|
while (chunk = this.read()) {
|
||
|
chunk.should.be.an.Object;
|
||
|
chunks.push(chunk);
|
||
|
}
|
||
|
})
|
||
|
|
||
|
stream.on('done', function () {
|
||
|
chunks.should.have.length(1)
|
||
|
chunks[0].should.have.property('foo', 'bar');
|
||
|
done();
|
||
|
});
|
||
|
})
|
||
|
|
||
|
it('emits a raw buffer if we do not want to parse JSON', function(done) {
|
||
|
var stream = needle.get('localhost:' + port, { parse: false })
|
||
|
|
||
|
var chunks = [];
|
||
|
stream.on('readable', function () {
|
||
|
while (chunk = this.read()) {
|
||
|
Buffer.isBuffer(chunk).should.be.true;
|
||
|
chunks.push(chunk);
|
||
|
}
|
||
|
})
|
||
|
|
||
|
stream.on('done', function() {
|
||
|
var body = Buffer.concat(chunks).toString();
|
||
|
body.should.equal('{"foo":"bar"}')
|
||
|
done();
|
||
|
});
|
||
|
})
|
||
|
|
||
|
})
|
||
|
})
|
||
|
|
||
|
describe('when the server sends back what was posted to it', function () {
|
||
|
var file = 'asdf.txt';
|
||
|
|
||
|
before(function(done){
|
||
|
server = http.createServer(function(req, res) {
|
||
|
res.setHeader('Content-Type', 'application/octet')
|
||
|
req.pipe(res);
|
||
|
}).listen(port);
|
||
|
|
||
|
fs.writeFile(file, 'contents of stream', done);
|
||
|
});
|
||
|
|
||
|
after(function(done){
|
||
|
server.close();
|
||
|
fs.unlink(file, done);
|
||
|
})
|
||
|
|
||
|
it('can PUT a stream', function (done) {
|
||
|
var stream = needle.put('localhost:' + port, fs.createReadStream(file), { stream: true });
|
||
|
|
||
|
var chunks = [];
|
||
|
stream.on('readable', function () {
|
||
|
while (chunk = this.read()) {
|
||
|
Buffer.isBuffer(chunk).should.be.true;
|
||
|
chunks.push(chunk);
|
||
|
}
|
||
|
})
|
||
|
|
||
|
stream.on('end', function () {
|
||
|
var body = Buffer.concat(chunks).toString();
|
||
|
body.should.equal('contents of stream')
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('can PATCH a stream', function (done) {
|
||
|
var stream = needle.patch('localhost:' + port, fs.createReadStream(file), { stream: true });
|
||
|
|
||
|
var chunks = [];
|
||
|
stream.on('readable', function () {
|
||
|
while (chunk = this.read()) {
|
||
|
Buffer.isBuffer(chunk).should.be.true;
|
||
|
chunks.push(chunk);
|
||
|
}
|
||
|
})
|
||
|
|
||
|
stream.on('end', function () {
|
||
|
var body = Buffer.concat(chunks).toString();
|
||
|
body.should.equal('contents of stream')
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
})
|
||
|
})
|