@@ -8,73 +8,76 @@ const TEXT_RESPONSE = 'Test Text';
8
8
const JSON_RESPONSE = '{"text": "value"}' ;
9
9
10
10
interface TestRequestData {
11
- body : string ;
11
+ body : string | Buffer ;
12
12
method : string | undefined ;
13
13
headers : http . IncomingHttpHeaders ;
14
14
}
15
15
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 > ;
27
21
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 ) ;
30
34
} ) ;
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 ,
42
43
} ) ;
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 ) {
43
56
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 ( ( ) => {
49
60
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
+ }
69
69
} ) ;
70
+ server . listen ( PORT ) ;
71
+ } ) ;
70
72
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
+ ) ;
77
79
80
+ describe ( 'given a default instance of NodeRequests' , ( ) => {
78
81
const requests = new NodeRequests ( ) ;
79
82
it ( 'can make a basic get request' , async ( ) => {
80
83
const res = await requests . fetch ( `http://localhost:${ PORT } ` ) ;
@@ -120,6 +123,17 @@ describe('given a default instance of NodeRequests', () => {
120
123
expect ( serverResult . body ) . toEqual ( 'BODY TEXT' ) ;
121
124
} ) ;
122
125
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
+
123
137
it ( 'can make a request with headers' , async ( ) => {
124
138
await requests . fetch ( `http://localhost:${ PORT } ` , {
125
139
method : 'POST' ,
@@ -166,3 +180,30 @@ describe('given a default instance of NodeRequests', () => {
166
180
expect ( serverResult . body ) . toEqual ( '' ) ;
167
181
} ) ;
168
182
} ) ;
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