@@ -38,7 +38,9 @@ function createMockEvent(event: Partial<HandlerEvent> = {}): HandlerEvent {
38
38
rawQuery : "" ,
39
39
path : "/" ,
40
40
httpMethod : "GET" ,
41
- headers : { } ,
41
+ headers : {
42
+ host : "localhost:3000" ,
43
+ } ,
42
44
multiValueHeaders : { } ,
43
45
queryStringParameters : null ,
44
46
multiValueQueryStringParameters : null ,
@@ -74,6 +76,80 @@ describe("netlify createRequestHandler", () => {
74
76
} ) ;
75
77
} ) ;
76
78
79
+ it ( "handles root // requests" , async ( ) => {
80
+ mockedCreateRequestHandler . mockImplementation ( ( ) => async ( req ) => {
81
+ return new Response ( `URL: ${ new URL ( req . url ) . pathname } ` ) ;
82
+ } ) ;
83
+
84
+ // We don't have a real app to test, but it doesn't matter. We won't ever
85
+ // call through to the real createRequestHandler
86
+ // @ts -expect-error
87
+ await lambdaTester ( createRequestHandler ( { build : undefined } ) )
88
+ . event ( createMockEvent ( { rawUrl : "http://localhost:3000//" } ) )
89
+ . expectResolve ( ( res ) => {
90
+ expect ( res . statusCode ) . toBe ( 200 ) ;
91
+ expect ( res . body ) . toBe ( "URL: //" ) ;
92
+ } ) ;
93
+ } ) ;
94
+
95
+ it ( "handles nested // requests" , async ( ) => {
96
+ mockedCreateRequestHandler . mockImplementation ( ( ) => async ( req ) => {
97
+ return new Response ( `URL: ${ new URL ( req . url ) . pathname } ` ) ;
98
+ } ) ;
99
+
100
+ // We don't have a real app to test, but it doesn't matter. We won't ever
101
+ // call through to the real createRequestHandler
102
+ // @ts -expect-error
103
+ await lambdaTester ( createRequestHandler ( { build : undefined } ) )
104
+ . event ( createMockEvent ( { rawUrl : "http://localhost:3000//foo//bar" } ) )
105
+ . expectResolve ( ( res ) => {
106
+ expect ( res . statusCode ) . toBe ( 200 ) ;
107
+ expect ( res . body ) . toBe ( "URL: //foo//bar" ) ;
108
+ } ) ;
109
+ } ) ;
110
+
111
+ it ( "handles root // requests (development)" , async ( ) => {
112
+ let oldEnv = process . env . NODE_ENV ;
113
+ process . env . NODE_ENV = "development" ;
114
+
115
+ mockedCreateRequestHandler . mockImplementation ( ( ) => async ( req ) => {
116
+ return new Response ( `URL: ${ new URL ( req . url ) . pathname } ` ) ;
117
+ } ) ;
118
+
119
+ // We don't have a real app to test, but it doesn't matter. We won't ever
120
+ // call through to the real createRequestHandler
121
+ // @ts -expect-error
122
+ await lambdaTester ( createRequestHandler ( { build : undefined } ) )
123
+ . event ( createMockEvent ( { path : "//" } ) )
124
+ . expectResolve ( ( res ) => {
125
+ expect ( res . statusCode ) . toBe ( 200 ) ;
126
+ expect ( res . body ) . toBe ( "URL: //" ) ;
127
+ } ) ;
128
+
129
+ process . env . NODE_ENV = oldEnv ;
130
+ } ) ;
131
+
132
+ it ( "handles nested // requests (development)" , async ( ) => {
133
+ let oldEnv = process . env . NODE_ENV ;
134
+ process . env . NODE_ENV = "development" ;
135
+
136
+ mockedCreateRequestHandler . mockImplementation ( ( ) => async ( req ) => {
137
+ return new Response ( `URL: ${ new URL ( req . url ) . pathname } ` ) ;
138
+ } ) ;
139
+
140
+ // We don't have a real app to test, but it doesn't matter. We won't ever
141
+ // call through to the real createRequestHandler
142
+ // @ts -expect-error
143
+ await lambdaTester ( createRequestHandler ( { build : undefined } ) )
144
+ . event ( createMockEvent ( { path : "//foo//bar" } ) )
145
+ . expectResolve ( ( res ) => {
146
+ expect ( res . statusCode ) . toBe ( 200 ) ;
147
+ expect ( res . body ) . toBe ( "URL: //foo//bar" ) ;
148
+ } ) ;
149
+
150
+ process . env . NODE_ENV = oldEnv ;
151
+ } ) ;
152
+
77
153
it ( "handles null body" , async ( ) => {
78
154
mockedCreateRequestHandler . mockImplementation ( ( ) => async ( ) => {
79
155
return new Response ( null , { status : 200 } ) ;
0 commit comments