@@ -8,73 +8,76 @@ const TEXT_RESPONSE = 'Test Text';
88const JSON_RESPONSE = '{"text": "value"}' ;
99
1010interface TestRequestData {
11- body : string ;
11+ body : string | Buffer ;
1212 method : string | undefined ;
1313 headers : http . IncomingHttpHeaders ;
1414}
1515
16- describe ( 'given a default instance of NodeRequests' , ( ) => {
17- let resolve : ( value : TestRequestData | PromiseLike < TestRequestData > ) => void ;
18- let promise : Promise < TestRequestData > ;
19- let server : http . Server ;
20- let resetResolve : ( ) => void ;
21- let resetPromise : Promise < void > ;
22-
23- beforeEach ( ( ) => {
24- resetPromise = new Promise ( ( res ) => {
25- resetResolve = res ;
26- } ) ;
16+ let resolve : ( value : TestRequestData | PromiseLike < TestRequestData > ) => void ;
17+ let promise : Promise < TestRequestData > ;
18+ let server : http . Server ;
19+ let resetResolve : ( ) => void ;
20+ let resetPromise : Promise < void > ;
2721
28- promise = new Promise < TestRequestData > ( ( res ) => {
29- resolve = res ;
22+ beforeEach ( ( ) => {
23+ resetPromise = new Promise ( ( res ) => {
24+ resetResolve = res ;
25+ } ) ;
26+
27+ promise = new Promise < TestRequestData > ( ( res ) => {
28+ resolve = res ;
29+ } ) ;
30+ server = http . createServer ( { keepAlive : false } , ( req , res ) => {
31+ const chunks : any [ ] = [ ] ;
32+ req . on ( 'data' , ( chunk ) => {
33+ chunks . push ( chunk ) ;
3034 } ) ;
31- server = http . createServer ( { keepAlive : false } , ( req , res ) => {
32- const chunks : any [ ] = [ ] ;
33- req . on ( 'data' , ( chunk ) => {
34- chunks . push ( chunk ) ;
35- } ) ;
36- req . on ( 'end' , ( ) => {
37- resolve ( {
38- method : req . method ,
39- body : Buffer . concat ( chunks ) . toString ( ) ,
40- headers : req . headers ,
41- } ) ;
35+ req . on ( 'end' , ( ) => {
36+ resolve ( {
37+ method : req . method ,
38+ body :
39+ req . headers [ 'content-encoding' ] === 'gzip'
40+ ? Buffer . concat ( chunks )
41+ : Buffer . concat ( chunks ) . toString ( ) ,
42+ headers : req . headers ,
4243 } ) ;
44+ } ) ;
45+ res . statusCode = 200 ;
46+ res . setHeader ( 'Content-Type' , 'text/plain' ) ;
47+ res . setHeader ( 'Connection' , 'close' ) ;
48+ if ( ( req . url ?. indexOf ( 'json' ) || - 1 ) >= 0 ) {
49+ res . end ( JSON_RESPONSE ) ;
50+ } else if ( ( req . url ?. indexOf ( 'interrupt' ) || - 1 ) >= 0 ) {
51+ res . destroy ( ) ;
52+ } else if ( ( req . url ?. indexOf ( '404' ) || - 1 ) >= 0 ) {
53+ res . statusCode = 404 ;
54+ res . end ( ) ;
55+ } else if ( ( req . url ?. indexOf ( 'reset' ) || - 1 ) >= 0 ) {
4356 res . statusCode = 200 ;
44- res . setHeader ( 'Content-Type' , 'text/plain' ) ;
45- res . setHeader ( 'Connection' , 'close' ) ;
46- if ( ( req . url ?. indexOf ( 'json' ) || - 1 ) >= 0 ) {
47- res . end ( JSON_RESPONSE ) ;
48- } else if ( ( req . url ?. indexOf ( 'interrupt' ) || - 1 ) >= 0 ) {
57+ res . flushHeaders ( ) ;
58+ res . write ( 'potato' ) ;
59+ setTimeout ( ( ) => {
4960 res . destroy ( ) ;
50- } else if ( ( req . url ?. indexOf ( '404' ) || - 1 ) >= 0 ) {
51- res . statusCode = 404 ;
52- res . end ( ) ;
53- } else if ( ( req . url ?. indexOf ( 'reset' ) || - 1 ) >= 0 ) {
54- res . statusCode = 200 ;
55- res . flushHeaders ( ) ;
56- res . write ( 'potato' ) ;
57- setTimeout ( ( ) => {
58- res . destroy ( ) ;
59- resetResolve ( ) ;
60- } , 0 ) ;
61- } else if ( ( req . url ?. indexOf ( 'gzip' ) || - 1 ) >= 0 ) {
62- res . setHeader ( 'Content-Encoding' , 'gzip' ) ;
63- res . end ( zlib . gzipSync ( Buffer . from ( JSON_RESPONSE , 'utf8' ) ) ) ;
64- } else {
65- res . end ( TEXT_RESPONSE ) ;
66- }
67- } ) ;
68- server . listen ( PORT ) ;
61+ resetResolve ( ) ;
62+ } , 0 ) ;
63+ } else if ( ( req . url ?. indexOf ( 'gzip' ) || - 1 ) >= 0 ) {
64+ res . setHeader ( 'Content-Encoding' , 'gzip' ) ;
65+ res . end ( zlib . gzipSync ( Buffer . from ( JSON_RESPONSE , 'utf8' ) ) ) ;
66+ } else {
67+ res . end ( TEXT_RESPONSE ) ;
68+ }
6969 } ) ;
70+ server . listen ( PORT ) ;
71+ } ) ;
7072
71- afterEach (
72- async ( ) =>
73- new Promise ( ( resolveClose ) => {
74- server . close ( resolveClose ) ;
75- } ) ,
76- ) ;
73+ afterEach (
74+ async ( ) =>
75+ new Promise ( ( resolveClose ) => {
76+ server . close ( resolveClose ) ;
77+ } ) ,
78+ ) ;
7779
80+ describe ( 'given a default instance of NodeRequests' , ( ) => {
7881 const requests = new NodeRequests ( ) ;
7982 it ( 'can make a basic get request' , async ( ) => {
8083 const res = await requests . fetch ( `http://localhost:${ PORT } ` ) ;
@@ -120,6 +123,17 @@ describe('given a default instance of NodeRequests', () => {
120123 expect ( serverResult . body ) . toEqual ( 'BODY TEXT' ) ;
121124 } ) ;
122125
126+ it ( 'can make a basic post ignoring compressBodyIfPossible' , async ( ) => {
127+ await requests . fetch ( `http://localhost:${ PORT } ` , {
128+ method : 'POST' ,
129+ body : 'BODY TEXT' ,
130+ compressBodyIfPossible : true ,
131+ } ) ;
132+ const serverResult = await promise ;
133+ expect ( serverResult . method ) . toEqual ( 'POST' ) ;
134+ expect ( serverResult . body ) . toEqual ( 'BODY TEXT' ) ;
135+ } ) ;
136+
123137 it ( 'can make a request with headers' , async ( ) => {
124138 await requests . fetch ( `http://localhost:${ PORT } ` , {
125139 method : 'POST' ,
@@ -166,3 +180,30 @@ describe('given a default instance of NodeRequests', () => {
166180 expect ( serverResult . body ) . toEqual ( '' ) ;
167181 } ) ;
168182} ) ;
183+
184+ describe ( 'given an instance of NodeRequests with enableEventCompression turned on' , ( ) => {
185+ const requests = new NodeRequests ( undefined , undefined , undefined , true ) ;
186+ it ( 'can make a basic post with compressBodyIfPossible enabled' , async ( ) => {
187+ await requests . fetch ( `http://localhost:${ PORT } ` , {
188+ method : 'POST' ,
189+ body : 'BODY TEXT' ,
190+ compressBodyIfPossible : true ,
191+ } ) ;
192+ const serverResult = await promise ;
193+ expect ( serverResult . method ) . toEqual ( 'POST' ) ;
194+ expect ( serverResult . headers [ 'content-encoding' ] ) . toEqual ( 'gzip' ) ;
195+ expect ( serverResult . body ) . toEqual ( zlib . gzipSync ( 'BODY TEXT' ) ) ;
196+ } ) ;
197+
198+ it ( 'can make a basic post with compressBodyIfPossible disabled' , async ( ) => {
199+ await requests . fetch ( `http://localhost:${ PORT } ` , {
200+ method : 'POST' ,
201+ body : 'BODY TEXT' ,
202+ compressBodyIfPossible : false ,
203+ } ) ;
204+ const serverResult = await promise ;
205+ expect ( serverResult . method ) . toEqual ( 'POST' ) ;
206+ expect ( serverResult . headers [ 'content-encoding' ] ) . toBeUndefined ( ) ;
207+ expect ( serverResult . body ) . toEqual ( 'BODY TEXT' ) ;
208+ } ) ;
209+ } ) ;
0 commit comments