1 | var should = require('should'),
|
---|
2 | needle = require('./../'),
|
---|
3 | http = require('http'),
|
---|
4 | stream = require('stream'),
|
---|
5 | fs = require('fs'),
|
---|
6 | port = 11111,
|
---|
7 | server;
|
---|
8 |
|
---|
9 | describe('response streams', function() {
|
---|
10 |
|
---|
11 | describe('when the server sends back json', function(){
|
---|
12 |
|
---|
13 | before(function(done) {
|
---|
14 | server = http.createServer(function(req, res) {
|
---|
15 | res.setHeader('Content-Type', 'application/json')
|
---|
16 | res.end('{"foo":"bar"}')
|
---|
17 | }).listen(port, done);
|
---|
18 | });
|
---|
19 |
|
---|
20 | after(function(done) {
|
---|
21 | server.close(done);
|
---|
22 | })
|
---|
23 |
|
---|
24 | describe('and the client uses streams', function(){
|
---|
25 |
|
---|
26 | it('creates a proper streams2 stream', function(done) {
|
---|
27 | var stream = needle.get('localhost:' + port)
|
---|
28 |
|
---|
29 | // newer node versions set this to null instead of false
|
---|
30 | var bool = !!stream._readableState.flowing;
|
---|
31 | should.equal(false, bool);
|
---|
32 |
|
---|
33 | var readableCalled = false;
|
---|
34 | stream.on('readable', function() {
|
---|
35 | readableCalled = true;
|
---|
36 | })
|
---|
37 |
|
---|
38 | stream.on('finish', function() {
|
---|
39 | readableCalled.should.be.true;
|
---|
40 | done();
|
---|
41 | });
|
---|
42 |
|
---|
43 | stream.resume();
|
---|
44 | })
|
---|
45 |
|
---|
46 | it('emits a single data item which is our JSON object', function(done) {
|
---|
47 | var stream = needle.get('localhost:' + port)
|
---|
48 |
|
---|
49 | var chunks = [];
|
---|
50 | stream.on('readable', function () {
|
---|
51 | while (chunk = this.read()) {
|
---|
52 | chunk.should.be.an.Object;
|
---|
53 | chunks.push(chunk);
|
---|
54 | }
|
---|
55 | })
|
---|
56 |
|
---|
57 | stream.on('done', function () {
|
---|
58 | chunks.should.have.length(1)
|
---|
59 | chunks[0].should.have.property('foo', 'bar');
|
---|
60 | done();
|
---|
61 | });
|
---|
62 | })
|
---|
63 |
|
---|
64 | it('emits a raw buffer if we do not want to parse JSON', function(done) {
|
---|
65 | var stream = needle.get('localhost:' + port, { parse: false })
|
---|
66 |
|
---|
67 | var chunks = [];
|
---|
68 | stream.on('readable', function () {
|
---|
69 | while (chunk = this.read()) {
|
---|
70 | Buffer.isBuffer(chunk).should.be.true;
|
---|
71 | chunks.push(chunk);
|
---|
72 | }
|
---|
73 | })
|
---|
74 |
|
---|
75 | stream.on('done', function() {
|
---|
76 | var body = Buffer.concat(chunks).toString();
|
---|
77 | body.should.equal('{"foo":"bar"}')
|
---|
78 | done();
|
---|
79 | });
|
---|
80 | })
|
---|
81 |
|
---|
82 | })
|
---|
83 | })
|
---|
84 |
|
---|
85 | describe('when the server sends back what was posted to it', function () {
|
---|
86 | var file = 'asdf.txt';
|
---|
87 |
|
---|
88 | before(function(done){
|
---|
89 | server = http.createServer(function(req, res) {
|
---|
90 | res.setHeader('Content-Type', 'application/octet')
|
---|
91 | req.pipe(res);
|
---|
92 | }).listen(port);
|
---|
93 |
|
---|
94 | fs.writeFile(file, 'contents of stream', done);
|
---|
95 | });
|
---|
96 |
|
---|
97 | after(function(done){
|
---|
98 | server.close();
|
---|
99 | fs.unlink(file, done);
|
---|
100 | })
|
---|
101 |
|
---|
102 | it('can PUT a stream', function (done) {
|
---|
103 | var stream = needle.put('localhost:' + port, fs.createReadStream(file), { stream: true });
|
---|
104 |
|
---|
105 | var chunks = [];
|
---|
106 | stream.on('readable', function () {
|
---|
107 | while (chunk = this.read()) {
|
---|
108 | Buffer.isBuffer(chunk).should.be.true;
|
---|
109 | chunks.push(chunk);
|
---|
110 | }
|
---|
111 | })
|
---|
112 |
|
---|
113 | stream.on('end', function () {
|
---|
114 | var body = Buffer.concat(chunks).toString();
|
---|
115 | body.should.equal('contents of stream')
|
---|
116 | done();
|
---|
117 | });
|
---|
118 | });
|
---|
119 |
|
---|
120 | it('can PATCH a stream', function (done) {
|
---|
121 | var stream = needle.patch('localhost:' + port, fs.createReadStream(file), { stream: true });
|
---|
122 |
|
---|
123 | var chunks = [];
|
---|
124 | stream.on('readable', function () {
|
---|
125 | while (chunk = this.read()) {
|
---|
126 | Buffer.isBuffer(chunk).should.be.true;
|
---|
127 | chunks.push(chunk);
|
---|
128 | }
|
---|
129 | })
|
---|
130 |
|
---|
131 | stream.on('end', function () {
|
---|
132 | var body = Buffer.concat(chunks).toString();
|
---|
133 | body.should.equal('contents of stream')
|
---|
134 | done();
|
---|
135 | });
|
---|
136 | });
|
---|
137 | })
|
---|
138 | })
|
---|