@@ -17,14 +17,21 @@ const fakeProxyResponse = (): ServerResponse => {
17
17
return res ;
18
18
} ;
19
19
20
+ const createRequestWithBody = ( body : unknown ) : Request => {
21
+ const req = new IncomingMessage ( new Socket ( ) ) as Request ;
22
+ req . url = '/test_path' ;
23
+ req . body = body ;
24
+ return req ;
25
+ } ;
26
+
20
27
describe ( 'fixRequestBody' , ( ) => {
21
28
it ( 'should not write when body is undefined' , ( ) => {
22
29
const proxyRequest = fakeProxyRequest ( ) ;
23
30
24
31
jest . spyOn ( proxyRequest , 'setHeader' ) ;
25
32
jest . spyOn ( proxyRequest , 'write' ) ;
26
33
27
- fixRequestBody ( proxyRequest , { body : undefined } as Request , fakeProxyResponse ( ) ) ;
34
+ fixRequestBody ( proxyRequest , createRequestWithBody ( undefined ) ) ;
28
35
29
36
expect ( proxyRequest . setHeader ) . not . toHaveBeenCalled ( ) ;
30
37
expect ( proxyRequest . write ) . not . toHaveBeenCalled ( ) ;
@@ -37,7 +44,7 @@ describe('fixRequestBody', () => {
37
44
jest . spyOn ( proxyRequest , 'setHeader' ) ;
38
45
jest . spyOn ( proxyRequest , 'write' ) ;
39
46
40
- fixRequestBody ( proxyRequest , { body : { } } as Request , fakeProxyResponse ( ) ) ;
47
+ fixRequestBody ( proxyRequest , createRequestWithBody ( { } ) ) ;
41
48
42
49
expect ( proxyRequest . setHeader ) . toHaveBeenCalled ( ) ;
43
50
expect ( proxyRequest . write ) . toHaveBeenCalled ( ) ;
@@ -50,11 +57,7 @@ describe('fixRequestBody', () => {
50
57
jest . spyOn ( proxyRequest , 'setHeader' ) ;
51
58
jest . spyOn ( proxyRequest , 'write' ) ;
52
59
53
- fixRequestBody (
54
- proxyRequest ,
55
- { body : { someField : 'some value' } } as Request ,
56
- fakeProxyResponse ( )
57
- ) ;
60
+ fixRequestBody ( proxyRequest , createRequestWithBody ( { someField : 'some value' } ) ) ;
58
61
59
62
const expectedBody = JSON . stringify ( { someField : 'some value' } ) ;
60
63
expect ( proxyRequest . setHeader ) . toHaveBeenCalledWith ( 'Content-Length' , expectedBody . length ) ;
@@ -68,11 +71,7 @@ describe('fixRequestBody', () => {
68
71
jest . spyOn ( proxyRequest , 'setHeader' ) ;
69
72
jest . spyOn ( proxyRequest , 'write' ) ;
70
73
71
- fixRequestBody (
72
- proxyRequest ,
73
- { body : { someField : 'some value' } } as Request ,
74
- fakeProxyResponse ( )
75
- ) ;
74
+ fixRequestBody ( proxyRequest , createRequestWithBody ( { someField : 'some value' } ) ) ;
76
75
77
76
const expectedBody = querystring . stringify ( { someField : 'some value' } ) ;
78
77
expect ( proxyRequest . setHeader ) . toHaveBeenCalledWith ( 'Content-Length' , expectedBody . length ) ;
@@ -86,11 +85,7 @@ describe('fixRequestBody', () => {
86
85
jest . spyOn ( proxyRequest , 'setHeader' ) ;
87
86
jest . spyOn ( proxyRequest , 'write' ) ;
88
87
89
- fixRequestBody (
90
- proxyRequest ,
91
- { body : { someField : 'some value' } } as Request ,
92
- fakeProxyResponse ( )
93
- ) ;
88
+ fixRequestBody ( proxyRequest , createRequestWithBody ( { someField : 'some value' } ) ) ;
94
89
95
90
const expectedBody = querystring . stringify ( { someField : 'some value' } ) ;
96
91
expect ( proxyRequest . setHeader ) . toHaveBeenCalledWith ( 'Content-Length' , expectedBody . length ) ;
@@ -104,62 +99,34 @@ describe('fixRequestBody', () => {
104
99
jest . spyOn ( proxyRequest , 'setHeader' ) ;
105
100
jest . spyOn ( proxyRequest , 'write' ) ;
106
101
107
- fixRequestBody (
108
- proxyRequest ,
109
- { body : { someField : 'some value' } } as Request ,
110
- fakeProxyResponse ( )
111
- ) ;
102
+ fixRequestBody ( proxyRequest , createRequestWithBody ( { someField : 'some value' } ) ) ;
112
103
113
104
const expectedBody = JSON . stringify ( { someField : 'some value' } ) ;
114
105
expect ( proxyRequest . setHeader ) . toHaveBeenCalledWith ( 'Content-Length' , expectedBody . length ) ;
115
106
expect ( proxyRequest . write ) . toHaveBeenCalledTimes ( 1 ) ;
116
107
expect ( proxyRequest . write ) . toHaveBeenCalledWith ( expectedBody ) ;
117
108
} ) ;
118
109
119
- it ( 'should return 400 and abort request on "Connection: Upgrade" header ' , ( ) => {
110
+ it ( 'should not fixRequestBody() when there bodyParser fails ' , ( ) => {
120
111
const proxyRequest = fakeProxyRequest ( ) ;
121
- const request = { body : { someField : 'some value' } } as Request ;
122
-
123
- proxyRequest . destroy = jest . fn ( ) ;
124
- request . destroy = jest . fn ( ) ;
125
-
126
- const proxyResponse = fakeProxyResponse ( ) ;
127
- proxyRequest . setHeader ( 'connection' , 'upgrade' ) ;
128
- proxyRequest . setHeader ( 'content-type' , 'application/x-www-form-urlencoded' ) ;
129
-
130
- jest . spyOn ( proxyRequest , 'destroy' ) ;
131
- jest . spyOn ( request , 'destroy' ) ;
132
- jest . spyOn ( proxyResponse , 'writeHead' ) ;
133
- jest . spyOn ( proxyResponse , 'end' ) ;
134
-
135
- fixRequestBody ( proxyRequest , request , proxyResponse ) ;
136
-
137
- expect ( proxyResponse . writeHead ) . toHaveBeenCalledWith ( 400 ) ;
138
- expect ( proxyResponse . end ) . toHaveBeenCalledTimes ( 1 ) ;
139
- expect ( proxyRequest . destroy ) . toHaveBeenCalledTimes ( 1 ) ;
140
- expect ( request . destroy ) . toHaveBeenCalledTimes ( 1 ) ;
141
- } ) ;
142
-
143
- it ( 'should return 400 and abort request on invalid request data' , ( ) => {
144
- const proxyRequest = fakeProxyRequest ( ) ;
145
- const request = { body : { 'INVALID \n\r DATA' : '' } } as Request ;
146
-
147
- proxyRequest . destroy = jest . fn ( ) ;
148
- request . destroy = jest . fn ( ) ;
112
+ const request = {
113
+ get readableLength ( ) {
114
+ return 4444 ; // simulate bodyParser failure
115
+ } ,
116
+ } as Request ;
149
117
150
118
const proxyResponse = fakeProxyResponse ( ) ;
151
119
proxyRequest . setHeader ( 'content-type' , 'application/x-www-form-urlencoded' ) ;
152
120
121
+ jest . spyOn ( proxyRequest , 'write' ) ;
153
122
jest . spyOn ( proxyRequest , 'destroy' ) ;
154
- jest . spyOn ( request , 'destroy' ) ;
155
123
jest . spyOn ( proxyResponse , 'writeHead' ) ;
156
124
jest . spyOn ( proxyResponse , 'end' ) ;
157
125
158
- fixRequestBody ( proxyRequest , request , proxyResponse ) ;
126
+ fixRequestBody ( proxyRequest , request ) ;
159
127
160
- expect ( proxyResponse . writeHead ) . toHaveBeenCalledWith ( 400 ) ;
161
- expect ( proxyResponse . end ) . toHaveBeenCalledTimes ( 1 ) ;
162
- expect ( proxyRequest . destroy ) . toHaveBeenCalledTimes ( 1 ) ;
163
- expect ( request . destroy ) . toHaveBeenCalledTimes ( 1 ) ;
128
+ expect ( proxyResponse . end ) . toHaveBeenCalledTimes ( 0 ) ;
129
+ expect ( proxyRequest . write ) . toHaveBeenCalledTimes ( 0 ) ;
130
+ expect ( proxyRequest . destroy ) . toHaveBeenCalledTimes ( 0 ) ;
164
131
} ) ;
165
132
} ) ;
0 commit comments