source: trip-planner-front/node_modules/needle/test/post_data_spec.js@ 6a80231

Last change on this file since 6a80231 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 32.4 KB
Line 
1var needle = require('..'),
2 http = require('http'),
3 should = require('should'),
4 sinon = require('sinon'),
5 stream = require('stream'),
6 helpers = require('./helpers');
7
8var multiparts = ['----------------------NODENEEDLEHTTPCLIENT'];
9multiparts.push(['Content-Disposition: form-data; name=\"foo\"'])
10multiparts.push(['\r\nbar\r\n----------------------NODENEEDLEHTTPCLIENT--'])
11// multiparts.push(['Content-Disposition: form-data; name=\"test\"'])
12// multiparts.push(['\r\næµè¯\r\n----------------------NODENEEDLEHTTPCLIENT--'])
13// multiparts.push(['\r\n' + Buffer.from('测试').toString() + '\r\n----------------------NODENEEDLEHTTPCLIENT--'])
14
15
16describe('post data (e.g. request body)', function() {
17
18 var stub, spy, server;
19
20 before(function(done) {
21 server = helpers.server({ port: 4321 }, done);
22 })
23
24 after(function(done) {
25 server.close(done);
26 })
27
28 afterEach(function() {
29 if (stub) stub.restore();
30 if (spy) spy.restore();
31 })
32
33 function get(data, opts, cb) {
34 return needle.request('get', 'http://localhost:' + 4321, data, opts, cb)
35 }
36
37 function post(data, opts, cb) {
38 return needle.request('post', 'http://localhost:' + 4321, data, opts, cb)
39 }
40
41 function spystub_request() {
42 var http_req = http.request;
43 stub = sinon.stub(http, 'request').callsFake(function(opts, cb) {
44 var req = http_req(opts, cb);
45 spy = sinon.spy(req, 'write');
46 return req;
47 })
48 }
49
50 function check_request(method) {
51 stub.calledOnce.should.be.true;
52 stub.args[0][0]['headers']['host'].should.equal('localhost:4321');
53 stub.args[0][0]['method'].should.equal(method);
54 }
55
56 describe('with multipart: true', function() {
57
58 describe('when null', function() {
59
60 it('sends request (non multipart)', function(done) {
61 spystub_request();
62
63 post(null, { multipart: true }, function(err, resp) {
64 check_request('post');
65 done();
66 })
67 })
68
69 it('doesnt set Content-Type header', function(done) {
70 post(null, { multipart: true }, function(err, resp) {
71 should.not.exist(resp.body.headers['content-type']);
72 done();
73 })
74 })
75
76 it('doesnt change default Accept header', function(done) {
77 post(null, { multipart: true }, function(err, resp) {
78 // resp.body contains 'header' and 'body', mirroring what we sent
79 resp.body.headers['accept'].should.equal('*/*');
80 done();
81 })
82 })
83
84 it('doesnt write anything', function(done) {
85 spystub_request();
86
87 post(null, { multipart: true }, function(err, resp) {
88 spy.called.should.be.false;
89 resp.body.body.should.eql('');
90 done();
91 })
92 })
93
94 })
95
96 describe('when string', function() {
97
98 it('explodes', function() {
99 (function() {
100 post('foobar', { multipart: true })
101 }).should.throw()
102 })
103
104 })
105
106 describe('when object', function() {
107
108 describe('get request', function() {
109
110 it('sends request', function(done) {
111 spystub_request();
112
113 get({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
114 check_request('get');
115 done();
116 })
117 })
118
119 it('sets Content-Type header', function(done) {
120 post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
121 resp.body.headers['content-type'].should.equal('multipart/form-data; boundary=--------------------NODENEEDLEHTTPCLIENT');
122 done();
123 })
124 })
125
126 it('doesnt change default Accept header', function(done) {
127 post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
128 resp.body.headers['accept'].should.equal('*/*');
129 done();
130 })
131 })
132
133 it('writes string as buffer', function(done) {
134 spystub_request();
135
136 get({ foo: 'bar' }, { multipart: true }, function(err, resp) {
137 spy.called.should.be.true;
138
139 spy.args[0][0].should.be.an.instanceof(String);
140 spy.args[0][0].toString().should.equal(multiparts.join('\r\n'));
141 resp.body.body.should.eql(multiparts.join('\r\n'));
142 done();
143 })
144 })
145
146 it('writes japanese chars correctly as binary', function(done) {
147 spystub_request();
148
149 get({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
150 spy.called.should.be.true;
151
152 spy.args[0][0].should.be.an.instanceof(String);
153 Buffer.from(spy.args[0][0]).toString('hex').should.eql('2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d22666f6f220d0a0d0a6261720d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2274657374220d0a0d0ac3a6c2b5c28bc3a8c2afc2950d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e542d2d')
154 done();
155 })
156 })
157
158
159 })
160
161 describe('post request', function() {
162
163 it('sends request', function(done) {
164 spystub_request();
165
166 post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
167 check_request('post');
168 done();
169 })
170 })
171
172 it('writes string as buffer', function(done) {
173 spystub_request();
174
175 post({ foo: 'bar' }, { multipart: true }, function(err, resp) {
176 spy.called.should.be.true;
177 spy.args[0][0].should.be.an.instanceof(String);
178 spy.args[0][0].toString().should.equal(multiparts.join('\r\n'));
179 resp.body.body.should.eql(multiparts.join('\r\n'));
180 done();
181 })
182 })
183
184 it('writes japanese chars correctly as binary', function(done) {
185 spystub_request();
186
187 post({ foo: 'bar', test: '测试' }, { multipart: true }, function(err, resp) {
188 spy.called.should.be.true;
189 spy.args[0][0].should.be.an.instanceof(String);
190 Buffer.from(spy.args[0][0]).toString('hex').should.eql('2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d22666f6f220d0a0d0a6261720d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e540d0a436f6e74656e742d446973706f736974696f6e3a20666f726d2d646174613b206e616d653d2274657374220d0a0d0ac3a6c2b5c28bc3a8c2afc2950d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d4e4f44454e4545444c4548545450434c49454e542d2d')
191 done();
192 })
193 })
194
195 })
196
197 })
198
199 describe('when stream', function() {
200
201 var stream_for_multipart;
202
203 before(function() {
204 stream_for_multipart = new stream.Readable();
205 stream_for_multipart._read = function() {
206 this.push('foobar');
207 this.push(null);
208 }
209 })
210
211 it('explodes', function() {
212 (function() {
213 post(stream_for_multipart, { multipart: true })
214 }).should.throw()
215 })
216
217 })
218
219 })
220
221 describe('non multipart', function() {
222
223 describe('when null', function() {
224
225 describe('get request', function() {
226
227 it('sends request', function(done) {
228 spystub_request();
229
230 get(null, {}, function(err, resp) {
231 check_request('get');
232 done();
233 })
234 })
235
236 it('doesnt write anything', function(done) {
237 spystub_request();
238
239 get(null, {}, function(err, resp) {
240 spy.called.should.be.false;
241 resp.body.body.should.eql('');
242 done();
243 })
244 })
245
246 })
247
248 describe('post request', function() {
249
250 it('sends request', function(done) {
251 spystub_request();
252
253 post(null, {}, function(err, resp) {
254 check_request('post');
255 done();
256 })
257 })
258
259 it('doesnt write anything', function(done) {
260 spystub_request();
261
262 post(null, {}, function(err, resp) {
263 spy.called.should.be.false;
264 resp.body.body.should.eql('');
265 done();
266 })
267 })
268
269 })
270
271 })
272
273 describe('when string with no equal sign', function() {
274
275 describe('get request', function() {
276
277 it('explodes', function() {
278 (function() {
279 get('foobar', {})
280 }).should.throw()
281 })
282
283 })
284
285 describe('post request', function() {
286
287 it('sends request', function(done) {
288 spystub_request();
289
290 post('foobar', {}, function(err, resp) {
291 check_request('post');
292 done();
293 })
294 })
295
296 it('writes string as buffer', function(done) {
297 spystub_request();
298
299 post('foobar', {}, function(err, resp) {
300 spy.called.should.be.true;
301 spy.args[0][0].should.be.an.instanceof(Buffer);
302 spy.args[0][0].toString().should.equal('foobar');
303 resp.body.body.should.eql('foobar');
304 done();
305 })
306 })
307
308 })
309
310 })
311
312 describe('when string WITH equal sign', function() {
313
314 describe('get request', function() {
315
316 describe('with json: false (default)', function() {
317
318 it('sends request, adding data as querystring', function(done) {
319 spystub_request();
320
321 get('foo=bar', { json: false }, function(err, resp) {
322 check_request('get');
323 stub.args[0][0]['path'].should.equal('/?foo=bar')
324 done();
325 })
326 })
327
328 it('doesnt set Content-Type header', function(done) {
329 get('foo=bar', { json: false }, function(err, resp) {
330 // resp.body contains 'header' and 'body', mirroring what we sent
331 should.not.exist(resp.body.headers['content-type']);
332 done();
333 })
334 })
335
336 it('doesnt change default Accept header', function(done) {
337 get('foo=bar', { json: false }, function(err, resp) {
338 // resp.body contains 'header' and 'body', mirroring what we sent
339 resp.body.headers['accept'].should.equal('*/*');
340 done();
341 })
342 })
343
344 it('doesnt write anything', function(done) {
345 get('foo=bar', { json: false }, function(err, resp) {
346 spy.called.should.be.false;
347 resp.body.body.should.eql('');
348 done();
349 })
350 })
351
352 })
353
354 describe('with json: true', function() {
355
356 it('sends request, without setting a querystring', function(done) {
357 spystub_request();
358
359 get('foo=bar', { json: true }, function(err, resp) {
360 check_request('get');
361 stub.args[0][0]['path'].should.equal('/')
362 done();
363 })
364 })
365
366 it('sets Content-Type header', function(done) {
367 get('foo=bar', { json: true }, function(err, resp) {
368 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
369 done();
370 })
371 })
372
373 it('set Accept header to application/json', function(done) {
374 get('foo=bar', { json: true }, function(err, resp) {
375 resp.body.headers['accept'].should.equal('application/json');
376 done();
377 })
378 })
379
380 it('writes raw string (assuming it already is JSON, so no JSON.stringify)', function(done) {
381 get('foo=bar', { json: true }, function(err, resp) {
382 spy.called.should.be.true;
383 spy.args[0][0].toString().should.eql('foo=bar')
384 resp.body.body.should.eql('foo=bar');
385 done();
386 })
387 })
388
389 })
390
391 })
392
393 describe('post request', function() {
394
395 describe('with json: false (default)', function() {
396
397 it('sends request', function(done) {
398 spystub_request();
399
400 post('foo=bar', { json: false }, function(err, resp) {
401 check_request('post');
402 done();
403 })
404 })
405
406 it('sets Content-Type header to www-form-urlencoded', function(done) {
407 post('foo=bar', { json: false }, function(err, resp) {
408 resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
409 done();
410 })
411 })
412
413 it('doesnt change default Accept header', function(done) {
414 post('foo=bar', { json: false }, function(err, resp) {
415 // resp.body contains 'header' and 'body', mirroring what we sent
416 resp.body.headers['accept'].should.equal('*/*');
417 done();
418 })
419 })
420
421 it('writes as buffer', function(done) {
422 post('foo=bar', { json: false }, function(err, resp) {
423 spy.called.should.be.true;
424 spy.args[0][0].should.be.an.instanceof(Buffer);
425 spy.args[0][0].toString().should.equal('foo=bar');
426 resp.body.body.should.eql('foo=bar');
427 done();
428 })
429 })
430
431 })
432
433 describe('with json: true', function() {
434
435 it('sends request', function(done) {
436 spystub_request();
437
438 post('foo=bar', { json: true }, function(err, resp) {
439 check_request('post');
440 done();
441 })
442 })
443
444 it('sets Content-Type header', function(done) {
445 post('foo=bar', { json: true }, function(err, resp) {
446 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
447 done();
448 })
449 })
450
451 it('set Accept header to application/json', function(done) {
452 post('foo=bar', { json: true }, function(err, resp) {
453 resp.body.headers['accept'].should.equal('application/json');
454 done();
455 })
456 })
457
458 it('writes raw string (assuming it already is JSON, so no JSON.stringify)', function(done) {
459 post('foo=bar', { json: true }, function(err, resp) {
460 spy.called.should.be.true;
461 var json = JSON.stringify('foo=bar');
462 spy.args[0][0].toString().should.eql('foo=bar')
463 resp.body.body.should.eql('foo=bar');
464 done();
465 })
466 })
467
468 })
469
470 })
471
472 })
473
474 describe('when object', function() {
475
476 describe('get request', function() {
477
478 describe('with json: false (default)', function() {
479
480 it('sends request, adding data as querystring', function(done) {
481 spystub_request();
482
483 get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
484 check_request('get');
485 stub.args[0][0]['path'].should.equal('/?foo=bar&test=%E6%B5%8B%E8%AF%95')
486 done();
487 })
488 })
489
490 it('doesnt set Content-Type header', function(done) {
491 get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
492 // resp.body contains 'header' and 'body', mirroring what we sent
493 should.not.exist(resp.body.headers['content-type']);
494 done();
495 })
496 })
497
498 it('doesnt change default Accept header', function(done) {
499 get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
500 // resp.body contains 'header' and 'body', mirroring what we sent
501 resp.body.headers['accept'].should.equal('*/*');
502 done();
503 })
504 })
505
506 it('doesnt write anything', function(done) {
507 get({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
508 spy.called.should.be.false;
509 resp.body.body.should.eql('');
510 done();
511 })
512 })
513
514 })
515
516 describe('with json: true', function() {
517
518 it('sends request, without setting a querystring', function(done) {
519 spystub_request();
520
521 get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
522 check_request('get');
523 stub.args[0][0]['path'].should.equal('/')
524 done();
525 })
526 })
527
528 it('sets Content-Type header', function(done) {
529 get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
530 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
531 done();
532 })
533 })
534
535 it('set Accept header to application/json', function(done) {
536 get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
537 resp.body.headers['accept'].should.equal('application/json');
538 done();
539 })
540 })
541
542 it('writes JSON.stringify version of object', function(done) {
543 get({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
544 spy.called.should.be.true;
545 var json = JSON.stringify({ foo: 'bar', test: '测试' })
546 spy.args[0][0].toString().should.eql(json)
547 resp.body.body.should.eql(json);
548 done();
549 })
550 })
551
552 })
553
554 })
555
556 describe('post request', function() {
557
558 describe('with json: false (default)', function() {
559
560 it('sends request', function(done) {
561 spystub_request();
562
563 post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
564 check_request('post');
565 done();
566 })
567 })
568
569 it('sets Content-Type header to www-form-urlencoded', function(done) {
570 post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
571 resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
572 done();
573 })
574 })
575
576 it('doesnt change default Accept header', function(done) {
577 post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
578 // resp.body contains 'header' and 'body', mirroring what we sent
579 resp.body.headers['accept'].should.equal('*/*');
580 done();
581 })
582 })
583
584 it('writes as buffer', function(done) {
585 post({ foo: 'bar', test: '测试' }, { json: false }, function(err, resp) {
586 spy.called.should.be.true;
587 spy.args[0][0].should.be.an.instanceof(Buffer);
588 spy.args[0][0].toString().should.equal('foo=bar&test=%E6%B5%8B%E8%AF%95');
589 resp.body.body.should.eql('foo=bar&test=%E6%B5%8B%E8%AF%95');
590 done();
591 })
592 })
593
594 })
595
596 describe('with json: false and content_type = "application/json"', function() {
597
598 var opts = { json: false, content_type: 'application/json' };
599
600 it('sends request', function(done) {
601 spystub_request();
602
603 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
604 check_request('post');
605 done();
606 })
607 })
608
609 it('sets Content-Type header to application/json', function(done) {
610 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
611 resp.body.headers['content-type'].should.equal('application/json');
612 done();
613 })
614 })
615
616 it('doesnt change default Accept header', function(done) {
617 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
618 // resp.body contains 'header' and 'body', mirroring what we sent
619 resp.body.headers['accept'].should.equal('*/*');
620 done();
621 })
622 })
623
624 it('writes as buffer', function(done) {
625 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
626 spy.called.should.be.true;
627 spy.args[0][0].constructor.name.should.eql('Buffer');
628 spy.args[0][0].toString().should.equal('foo=bar&test=%E6%B5%8B%E8%AF%95');
629 resp.body.body.should.eql('foo=bar&test=%E6%B5%8B%E8%AF%95');
630 done();
631 })
632 })
633
634 })
635
636 describe('with json: undefined but content-type = application/json', function() {
637
638 var opts = { headers: { 'content-type': 'application/json' } };
639
640 it('sends request', function(done) {
641 spystub_request();
642
643 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
644 check_request('post');
645 done();
646 })
647 })
648
649 it('doesnt change Content-Type header', function(done) {
650 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
651 resp.body.headers['content-type'].should.equal('application/json');
652 done();
653 })
654 })
655
656 it('leaves default Accept header', function(done) {
657 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
658 resp.body.headers['accept'].should.equal('*/*');
659 done();
660 })
661 })
662
663 it('writes JSON.stringified object', function(done) {
664 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
665 spy.called.should.be.true;
666 var json = JSON.stringify({ foo: 'bar', test: '测试' })
667 spy.args[0][0].toString().should.eql(json)
668 resp.body.body.should.eql(json);
669 done();
670 })
671 })
672 })
673
674 describe('with json: true', function() {
675
676 it('sends request', function(done) {
677 spystub_request();
678
679 post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
680 check_request('post');
681 done();
682 })
683 })
684
685 it('sets Content-Type header', function(done) {
686 post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
687 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
688 done();
689 })
690 })
691
692 it('set Accept header to application/json', function(done) {
693 post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
694 resp.body.headers['accept'].should.equal('application/json');
695 done();
696 })
697 })
698
699 it('writes JSON.stringified object', function(done) {
700 post({ foo: 'bar', test: '测试' }, { json: true }, function(err, resp) {
701 spy.called.should.be.true;
702 var json = JSON.stringify({ foo: 'bar', test: '测试' })
703 spy.args[0][0].toString().should.eql(json)
704 resp.body.body.should.eql(json);
705 done();
706 })
707 })
708
709 })
710
711
712 describe('with json: true and content_type: */* (passed, not default)', function() {
713
714 var opts = { json: true, accept: '*/*' };
715
716 it('sends request', function(done) {
717 spystub_request();
718
719 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
720 check_request('post');
721 done();
722 })
723 })
724
725 it('sets Content-Type header to application/json', function(done) {
726 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
727 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
728 done();
729 })
730 })
731
732 it('respects Accept header set by user', function(done) {
733 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
734 resp.body.headers['accept'].should.equal('*/*');
735 done();
736 })
737 })
738
739 it('writes JSON.stringified object', function(done) {
740 post({ foo: 'bar', test: '测试' }, opts, function(err, resp) {
741 spy.called.should.be.true;
742 var json = JSON.stringify({ foo: 'bar', test: '测试' })
743 spy.args[0][0].toString().should.eql(json)
744 resp.body.body.should.eql(json);
745 done();
746 })
747 })
748
749 })
750
751 })
752
753 })
754
755 describe('when buffer', function() {
756
757 describe('get request', function() {
758
759 describe('with json: false (default)', function() {
760
761 it('sends request', function(done) {
762 spystub_request();
763
764 get(Buffer.from('foobar'), { json: false }, function(err, resp) {
765 check_request('get');
766 done();
767 })
768 })
769
770 it('sets Content-Type header', function(done) {
771 get(Buffer.from('foobar'), { json: false }, function(err, resp) {
772 // should.not.exist(resp.body.headers['content-type']);
773 resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
774
775 done();
776 })
777 })
778
779 it('doesnt change default Accept header', function(done) {
780 get(Buffer.from('foobar'), { json: false }, function(err, resp) {
781 // resp.body contains 'header' and 'body', mirroring what we sent
782 resp.body.headers['accept'].should.equal('*/*');
783 done();
784 })
785 })
786
787 it('writes as buffer', function(done) {
788 get(Buffer.from('foobar'), { json: false }, function(err, resp) {
789 spy.called.should.be.true;
790 spy.args[0][0].should.be.an.instanceof(Buffer);
791 spy.args[0][0].toString().should.equal('foobar');
792 resp.body.body.should.eql('foobar');
793 done();
794 })
795 })
796
797 })
798
799 describe('with json: true', function() {
800
801 it('sends request, without setting a querystring', function(done) {
802 spystub_request();
803
804 get(Buffer.from('foobar'), { json: true }, function(err, resp) {
805 check_request('get');
806 done();
807 })
808 })
809
810 it('sets Content-Type header', function(done) {
811 get(Buffer.from('foobar'), { json: true }, function(err, resp) {
812 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
813 done();
814 })
815 })
816
817 it('set Accept header to application/json', function(done) {
818 get(Buffer.from('foobar'), { json: true }, function(err, resp) {
819 resp.body.headers['accept'].should.equal('application/json');
820 done();
821 })
822 })
823
824 it('writes JSON.stringify version of object', function(done) {
825 get(Buffer.from('foobar'), { json: true }, function(err, resp) {
826 spy.called.should.be.true;
827 spy.args[0][0].toString().should.eql('foobar')
828 resp.body.body.should.eql('foobar');
829 done();
830 })
831 })
832
833 })
834
835 })
836
837 describe('post request', function() {
838
839 describe('with json: false (default)', function() {
840
841 it('sends request', function(done) {
842 spystub_request();
843
844 post(Buffer.from('foobar'), { json: false }, function(err, resp) {
845 check_request('post');
846 done();
847 })
848 })
849
850 it('sets Content-Type header to www-form-urlencoded', function(done) {
851 post(Buffer.from('foobar'), { json: false }, function(err, resp) {
852 resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
853 done();
854 })
855 })
856
857 it('doesnt change default Accept header', function(done) {
858 post(Buffer.from('foobar'), { json: false }, function(err, resp) {
859 // resp.body contains 'header' and 'body', mirroring what we sent
860 resp.body.headers['accept'].should.equal('*/*');
861 done();
862 })
863 })
864
865 it('writes as buffer', function(done) {
866 post(Buffer.from('foobar'), { json: false }, function(err, resp) {
867 spy.called.should.be.true;
868 spy.args[0][0].should.be.an.instanceof(Buffer);
869 spy.args[0][0].toString().should.equal('foobar');
870 resp.body.body.should.eql('foobar');
871 done();
872 })
873 })
874
875 })
876
877 describe('with json: true', function() {
878
879 it('sends request', function(done) {
880 spystub_request();
881
882 post(Buffer.from('foobar'), { json: true }, function(err, resp) {
883 check_request('post');
884 done();
885 })
886 })
887
888 it('sets Content-Type header', function(done) {
889 post(Buffer.from('foobar'), { json: true }, function(err, resp) {
890 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
891 done();
892 })
893 })
894
895 it('set Accept header to application/json', function(done) {
896 post(Buffer.from('foobar'), { json: true }, function(err, resp) {
897 resp.body.headers['accept'].should.equal('application/json');
898 done();
899 })
900 })
901
902 it('passes raw buffer (assuming its a JSON string beneath)', function(done) {
903 post(Buffer.from('foobar'), { json: true }, function(err, resp) {
904 spy.called.should.be.true;
905 spy.args[0][0].toString().should.eql('foobar')
906 resp.body.body.should.eql('foobar');
907 done();
908 })
909 })
910
911 })
912
913 })
914
915 })
916
917 describe('when stream', function() {
918
919 var input_stream;
920
921 beforeEach(function() {
922 input_stream = new stream.Readable();
923 input_stream._read = function() {
924 this.push('foobar');
925 this.push(null);
926 }
927 })
928
929 describe('get request', function() {
930
931 it('explodes', function() {
932 (function() {
933 get(input_stream, {})
934 }).should.throw()
935 })
936
937 });
938
939 describe('post request', function() {
940
941 describe('with json: false (default)', function() {
942
943 it('sends request', function(done) {
944 spystub_request();
945
946 post(input_stream, { json: false }, function(err, resp) {
947 check_request('post');
948 done();
949 })
950 })
951
952 it('sets Content-Type header to www-form-urlencoded', function(done) {
953 post(input_stream, { json: false }, function(err, resp) {
954 resp.body.headers['content-type'].should.equal('application/x-www-form-urlencoded');
955 done();
956 })
957 })
958
959 it('doesnt change default Accept header', function(done) {
960 post(input_stream, { json: false }, function(err, resp) {
961 // resp.body contains 'header' and 'body', mirroring what we sent
962 resp.body.headers['accept'].should.equal('*/*');
963 done();
964 })
965 })
966
967 it('writes as buffer', function(done) {
968 post(input_stream, { json: false }, function(err, resp) {
969 spy.called.should.be.true;
970 spy.args[0][0].should.be.an.instanceof(Buffer);
971 spy.args[0][0].toString().should.equal('foobar');
972 resp.body.body.should.eql('foobar');
973 done();
974 })
975 })
976
977 })
978
979 describe('with json: true', function() {
980
981 it('sends request', function(done) {
982 spystub_request();
983
984 post(input_stream, { json: true }, function(err, resp) {
985 check_request('post');
986 done();
987 })
988 })
989
990 it('sets Content-Type header', function(done) {
991 post(input_stream, { json: true }, function(err, resp) {
992 resp.body.headers['content-type'].should.equal('application/json; charset=utf-8');
993 done();
994 })
995 })
996
997 it('set Accept header to application/json', function(done) {
998 post(input_stream, { json: true }, function(err, resp) {
999 resp.body.headers['accept'].should.equal('application/json');
1000 done();
1001 })
1002 })
1003
1004 it('writes JSON.stringified object', function(done) {
1005 post(input_stream, { json: true }, function(err, resp) {
1006 spy.called.should.be.true;
1007 spy.args[0][0].toString().should.eql('foobar')
1008 resp.body.body.should.eql('foobar');
1009 done();
1010 })
1011 })
1012
1013 })
1014
1015 })
1016
1017 })
1018
1019 })
1020
1021})
Note: See TracBrowser for help on using the repository browser.