1+ import { Server } from 'node:http'
12import supertest , { SuperTest , Test } from 'supertest'
2- import { describe , it , expect , beforeEach } from 'vitest'
3+ import { describe , it , expect , beforeEach , afterEach } from 'vitest'
34import { fetch } from 'node-fetch-native'
4- import { createApp , toNodeListener , App , eventHandler } from '../src'
5- import { sendProxy } from '../src/utils/proxy'
5+ import { createApp , toNodeListener , App , eventHandler , getHeaders , getMethod , readRawBody } from '../src'
6+ import { sendProxy , proxyRequest } from '../src/utils/proxy'
67
78describe ( '' , ( ) => {
89 let app : App
910 let request : SuperTest < Test >
1011
11- beforeEach ( ( ) => {
12+ let server : Server
13+ let url : string
14+
15+ beforeEach ( async ( ) => {
1216 app = createApp ( { debug : false } )
1317 request = supertest ( toNodeListener ( app ) )
18+ server = new Server ( toNodeListener ( app ) )
19+ await new Promise ( ( resolve ) => { server . listen ( 0 , ( ) => resolve ( null ) ) } )
20+ url = 'http://localhost:' + ( server . address ( ) as any ) . port
21+ } )
22+
23+ afterEach ( async ( ) => {
24+ await new Promise ( ( resolve ) => { server . close ( ( ) => resolve ( null ) ) } )
1425 } )
1526
1627 describe ( 'sendProxy' , ( ) => {
@@ -19,10 +30,36 @@ describe('', () => {
1930 return sendProxy ( event , 'https://example.com' , { fetch } )
2031 } ) )
2132
22- const result = await request
23- . get ( '/' )
33+ const result = await request . get ( '/' )
2434
2535 expect ( result . text ) . toContain ( 'a href="https://www.iana.org/domains/example">More information...</a>' )
2636 } )
2737 } )
38+
39+ describe ( 'proxyRequest' , ( ) => {
40+ it ( 'can proxy request' , async ( ) => {
41+ app . use ( '/debug' , eventHandler ( async ( event ) => {
42+ const headers = getHeaders ( event )
43+ delete headers . host
44+ let body
45+ try { body = await readRawBody ( event ) } catch { }
46+ return {
47+ method : getMethod ( event ) ,
48+ headers,
49+ body
50+ }
51+ } ) )
52+
53+ app . use ( '/' , eventHandler ( ( event ) => {
54+ return proxyRequest ( event , url + '/debug' , { fetch } )
55+ } ) )
56+
57+ const result = await fetch ( url + '/' , {
58+ method : 'POST' ,
59+ body : 'hello'
60+ } ) . then ( r => r . text ( ) )
61+
62+ expect ( result ) . toMatchInlineSnapshot ( '"{\\"method\\":\\"POST\\",\\"headers\\":{\\"accept\\":\\"*/*\\",\\"accept-encoding\\":\\"gzip, deflate, br\\",\\"connection\\":\\"close\\",\\"content-length\\":\\"5\\",\\"content-type\\":\\"text/plain;charset=UTF-8\\",\\"user-agent\\":\\"node-fetch\\"},\\"body\\":\\"hello\\"}"' )
63+ } )
64+ } )
2865} )
0 commit comments