Skip to content

Commit b4715f9

Browse files
committed
test: add test cases for various cases of body consumption
1 parent 3099e69 commit b4715f9

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

test/server.test.ts

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)