@@ -205,6 +205,88 @@ final class LambdaTests: XCTestCase {
205205 }
206206 }
207207
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+
208290 func testCustomRequestContext( ) async throws {
209291 struct MyRequestContext : LambdaRequestContext {
210292 typealias Event = APIGatewayRequest
0 commit comments