@@ -205,6 +205,88 @@ final class LambdaTests: XCTestCase {
205
205
}
206
206
}
207
207
208
+ func testSimpleRouteURLFunction( ) async throws {
209
+ let router = Router ( context: BasicLambdaRequestContext< FunctionURLRequest> . self )
210
+ router. middlewares. add ( LogRequestsMiddleware ( . debug) )
211
+ router. post { request, _ in
212
+ XCTAssertEqual ( request. head. authority, " 127.0.0.1:8080 " )
213
+ return [ " response " : " hello " ]
214
+ }
215
+ let lambda = FunctionURLLambdaFunction ( router: router)
216
+ try await lambda. test { client in
217
+ try await client. execute ( uri: " / " , method: . post) { response in
218
+ XCTAssertEqual ( response. statusCode, . ok)
219
+ XCTAssertEqual ( response. headers ? [ " Content-Type " ] , " application/json; charset=utf-8 " )
220
+ XCTAssertEqual ( response. body, #"{"response":"hello"}"# )
221
+ }
222
+ }
223
+ }
224
+
225
+ func testBase64EncodingURLFunction( ) async throws {
226
+ let router = Router ( context: BasicLambdaRequestContext< FunctionURLRequest> . self )
227
+ router. middlewares. add ( LogRequestsMiddleware ( . debug) )
228
+ router. post { request, _ in
229
+ let buffer = try await request. body. collect ( upTo: . max)
230
+ return Response ( status: . ok, body: . init( byteBuffer: buffer) )
231
+ }
232
+ let lambda = FunctionURLLambdaFunction ( router: router)
233
+ try await lambda. test { client in
234
+ let body = ByteBuffer ( bytes: ( 0 ... 255 ) . map { _ in UInt8 . random ( in: 0 ... 255 ) } )
235
+ try await client. execute ( uri: " / " , method: . post, headers: [ . userAgent: " HBXCT/2.0 " ] , body: body) { response in
236
+ XCTAssertEqual ( response. isBase64Encoded, true )
237
+ XCTAssertEqual ( response. body, Base64 . encodeToString ( bytes: body. readableBytesView) )
238
+ }
239
+ }
240
+ }
241
+
242
+ func testHeaderValuesURLFunction( ) async throws {
243
+ let router = Router ( context: BasicLambdaRequestContext< FunctionURLRequest> . self )
244
+ router. middlewares. add ( LogRequestsMiddleware ( . debug) )
245
+ router. post { request, _ -> HTTPResponse . Status in
246
+ XCTAssertEqual ( request. headers [ . userAgent] , " HBXCT/2.0 " )
247
+ XCTAssertEqual ( request. headers [ . acceptLanguage] , " en " )
248
+ return . ok
249
+ }
250
+ router. post ( " /multi " ) { request, _ -> HTTPResponse . Status in
251
+ XCTAssertEqual ( request. headers [ . userAgent] , " HBXCT/2.0 " )
252
+ XCTAssertEqual ( request. headers [ values: . acceptLanguage] , [ " en " , " fr " ] )
253
+ return . ok
254
+ }
255
+ let lambda = FunctionURLLambdaFunction ( router: router)
256
+ try await lambda. test { client in
257
+ try await client. execute ( uri: " / " , method: . post, headers: [ . userAgent: " HBXCT/2.0 " , . acceptLanguage: " en " ] ) { response in
258
+ XCTAssertEqual ( response. statusCode, . ok)
259
+ }
260
+ var headers : HTTPFields = [ . userAgent: " HBXCT/2.0 " , . acceptLanguage: " en " ]
261
+ headers [ values: . acceptLanguage] . append ( " fr " )
262
+ try await client. execute ( uri: " /multi " , method: . post, headers: headers) { response in
263
+ XCTAssertEqual ( response. statusCode, . ok)
264
+ }
265
+ }
266
+ }
267
+
268
+ func testQueryValuesURLFunction( ) async throws {
269
+ let router = Router ( context: BasicLambdaRequestContext< FunctionURLRequest> . self )
270
+ router. middlewares. add ( LogRequestsMiddleware ( . debug) )
271
+ router. post { request, _ -> HTTPResponse . Status in
272
+ XCTAssertEqual ( request. uri. queryParameters [ " foo " ] , " bar " )
273
+ return . ok
274
+ }
275
+ router. post ( " /multi " ) { request, _ -> HTTPResponse . Status in
276
+ XCTAssertEqual ( request. uri. queryParameters. getAll ( " foo " ) , [ " bar1 " , " bar2 " ] )
277
+ return . ok
278
+ }
279
+ let lambda = FunctionURLLambdaFunction ( router: router)
280
+ try await lambda. test { client in
281
+ try await client. execute ( uri: " /?foo=bar " , method: . post) { response in
282
+ XCTAssertEqual ( response. statusCode, . ok)
283
+ }
284
+ try await client. execute ( uri: " /multi?foo=bar1&foo=bar2 " , method: . post) { response in
285
+ XCTAssertEqual ( response. statusCode, . ok)
286
+ }
287
+ }
288
+ }
289
+
208
290
func testCustomRequestContext( ) async throws {
209
291
struct MyRequestContext : LambdaRequestContext {
210
292
typealias Event = APIGatewayRequest
0 commit comments