@@ -28,6 +28,40 @@ describe('Basic', () => {
2828 app . post ( '/posts' , ( c ) => {
2929 return c . redirect ( '/posts' )
3030 } )
31+ app . post ( '/no-body-consumed' , ( c ) => {
32+ if ( ! c . req . raw . body ) {
33+ // force create new request object
34+ throw new Error ( 'No body consumed' )
35+ }
36+ return c . text ( 'No body consumed' )
37+ } )
38+ app . post ( '/body-cancelled' , ( c ) => {
39+ if ( ! c . req . raw . body ) {
40+ // force create new request object
41+ throw new Error ( 'No body consumed' )
42+ }
43+ c . req . raw . body . cancel ( )
44+ return c . text ( 'No body consumed' )
45+ } )
46+ app . post ( '/partially-consumed' , async ( c ) => {
47+ if ( ! c . req . raw . body ) {
48+ // force create new request object
49+ throw new Error ( 'No body consumed' )
50+ }
51+ const reader = c . req . raw . body . getReader ( )
52+ await reader . read ( ) // read only one chunk
53+ return c . text ( 'No body consumed' )
54+ } )
55+ app . post ( '/partially-consumed-and-cancelled' , async ( c ) => {
56+ if ( ! c . req . raw . body ) {
57+ // force create new request object
58+ throw new Error ( 'No body consumed' )
59+ }
60+ const reader = c . req . raw . body . getReader ( )
61+ await reader . read ( ) // read only one chunk
62+ reader . cancel ( )
63+ return c . text ( 'No body consumed' )
64+ } )
3165 app . delete ( '/posts/:id' , ( c ) => {
3266 return c . text ( `DELETE ${ c . req . param ( 'id' ) } ` )
3367 } )
@@ -82,6 +116,60 @@ describe('Basic', () => {
82116 expect ( res . headers [ 'location' ] ) . toBe ( '/posts' )
83117 } )
84118
119+ it ( 'Should return 200 response - POST /no-body-consumed' , async ( ) => {
120+ const res = await request ( server ) . post ( '/no-body-consumed' ) . send ( '' )
121+ expect ( res . status ) . toBe ( 200 )
122+ expect ( res . text ) . toBe ( 'No body consumed' )
123+ } )
124+
125+ it ( 'Should return 200 response - POST /body-cancelled' , async ( ) => {
126+ const res = await request ( server ) . post ( '/body-cancelled' ) . send ( '' )
127+ expect ( res . status ) . toBe ( 200 )
128+ expect ( res . text ) . toBe ( 'No body consumed' )
129+ } )
130+
131+ it ( 'Should return 200 response - POST /partially-consumed' , async ( ) => {
132+ const buffer = Buffer . alloc ( 1024 * 10 ) // large buffer
133+ const res = await new Promise < any > ( ( resolve , reject ) => {
134+ const req = request ( server )
135+ . post ( '/partially-consumed' )
136+ . set ( 'Content-Length' , buffer . length . toString ( ) )
137+
138+ req . write ( buffer )
139+ req . end ( ( err , res ) => {
140+ if ( err ) {
141+ reject ( err )
142+ } else {
143+ resolve ( res )
144+ }
145+ } )
146+ } )
147+
148+ expect ( res . status ) . toBe ( 200 )
149+ expect ( res . text ) . toBe ( 'No body consumed' )
150+ } )
151+
152+ it ( 'Should return 200 response - POST /partially-consumed-and-cancelled' , async ( ) => {
153+ const buffer = Buffer . alloc ( 1 ) // A large buffer will not make the test go far, so keep it small because it won't go far.
154+ const res = await new Promise < any > ( ( resolve , reject ) => {
155+ const req = request ( server )
156+ . post ( '/partially-consumed-and-cancelled' )
157+ . set ( 'Content-Length' , buffer . length . toString ( ) )
158+
159+ req . write ( buffer )
160+ req . end ( ( err , res ) => {
161+ if ( err ) {
162+ reject ( err )
163+ } else {
164+ resolve ( res )
165+ }
166+ } )
167+ } )
168+
169+ expect ( res . status ) . toBe ( 200 )
170+ expect ( res . text ) . toBe ( 'No body consumed' )
171+ } )
172+
85173 it ( 'Should return 201 response - DELETE /posts/123' , async ( ) => {
86174 const res = await request ( server ) . delete ( '/posts/123' )
87175 expect ( res . status ) . toBe ( 200 )
0 commit comments