Files
swift-aws-lambda-runtime/Examples/Testing/Sources/main.swift
T
Sébastien Stormacq cef85b9fe8 [examples] add an example project to show test strategies (#438)
This new example project show four testing strategies for Swift Lambda
function

- Unit testing the business logic (not specific to Swift Lambda) 
- Integration testing the handler method 
- Local invocation with the Swift Lambda Runtime 
- Local invocation with SAM 

**[IMPORTANT]**
To allow testing the handler, I had to change visibility of a method in
the Runtime project. This method is clearly marked for testing only, so
it should not be a problem. Happy to read feedback and discuss however.
2024-12-25 07:43:20 +01:00

49 lines
1.6 KiB
Swift

//===----------------------------------------------------------------------===//
//
// This source file is part of the SwiftAWSLambdaRuntime open source project
//
// Copyright (c) 2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//
import AWSLambdaEvents
import AWSLambdaRuntime
#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
public struct MyHandler: Sendable {
public func handler(event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {
context.logger.debug("HTTP API Message received")
context.logger.trace("Event: \(event)")
var header = HTTPHeaders()
header["content-type"] = "application/json"
// API Gateway sends text or URL encoded data as a Base64 encoded string
if let base64EncodedString = event.body,
let decodedData = Data(base64Encoded: base64EncodedString),
let decodedString = String(data: decodedData, encoding: .utf8)
{
// call our business code to process the payload and return a response
return APIGatewayV2Response(statusCode: .ok, headers: header, body: decodedString.uppercasedFirst())
} else {
return APIGatewayV2Response(statusCode: .badRequest)
}
}
}
let runtime = LambdaRuntime(body: MyHandler().handler)
try await runtime.run()