Skip to content

Commit b3cec46

Browse files
author
Andrea Scuderi
committed
Simplify Unit Tests
1 parent 3c09578 commit b3cec46

File tree

2 files changed

+31
-110
lines changed

2 files changed

+31
-110
lines changed

Tests/BreezeLambdaAPITests/BreezeLambdaHandlerTests.swift

-27
Original file line numberDiff line numberDiff line change
@@ -34,34 +34,7 @@ struct BreezeLambdaHandlerTests {
3434
let encoder = JSONEncoder()
3535

3636
let logger = Logger(label: "BreezeLambdaAPITests")
37-
3837
let config = BreezeDynamoDBConfig(region: .useast1, tableName: "Breeze", keyName: "sku")
39-
40-
// @Test
41-
// func testSerially() async throws {
42-
// try await test_initWhenMissing__HANDLER_thenThrowError()
43-
// try await test_initWhenInvalid__HANDLER_thenThrowError()
44-
//
45-
// try await test_create()
46-
// try await test_create_whenInvalidItem_thenError()
47-
// try await test_create_whenMissingItem_thenError()
48-
//
49-
// try await test_read()
50-
// try await test_read_whenInvalidRequest_thenError()
51-
// try await test_read_whenMissingItem_thenError()
52-
//
53-
// try await test_update()
54-
// try await test_update_whenInvalidRequest_thenError()
55-
// try await test_update_whenMissingItem_thenError()
56-
//
57-
// try await test_delete()
58-
// try await test_delete_whenRequestIsOutaded()
59-
// try await test_delete_whenInvalidRequest_thenError()
60-
// try await test_delete_whenMissingItem_thenError()
61-
//
62-
// try await test_list()
63-
// try await test_list_whenError()
64-
// }
6538

6639
// @Test
6740
// func test_initWhenMissing_AWS_REGION_thenDefaultRegion() async throws {

Tests/BreezeLambdaAPITests/Lambda.swift

+31-83
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,10 @@ import Foundation
2727
import Logging
2828
import Testing
2929
import SotoDynamoDB
30+
import AsyncHTTPClient
3031

3132
extension Lambda {
3233

33-
enum TestState {
34-
case none
35-
case running
36-
case result(BreezeLambdaHandler.Output)
37-
}
38-
3934
static func test<T: BreezeCodable>(
4035
_ handlerType: BreezeLambdaHandler<T>.Type,
4136
config: BreezeDynamoDBConfig,
@@ -48,83 +43,36 @@ extension Lambda {
4843
let decoder = JSONDecoder()
4944
let encoder = JSONEncoder()
5045

51-
return try await testGracefulShutdown { gracefulShutdownTestTrigger in
52-
let httpClientService = BreezeHTTPClientService(timeout: .seconds(1), logger: logger)
53-
let awsClient = AWSClient()
54-
let db = SotoDynamoDB.DynamoDB(client: awsClient)
55-
let dbManager = BreezeDynamoDBManagerMock(db: db, tableName: config.tableName, keyName: config.keyName)
56-
let sut = handlerType.init(dbManager: dbManager, operation: operation)
57-
58-
let serviceGroup = ServiceGroup(
59-
configuration: .init(
60-
services: [
61-
.init(
62-
service: httpClientService,
63-
successTerminationBehavior: .ignore,
64-
failureTerminationBehavior: .gracefullyShutdownGroup
65-
)
66-
],
67-
logger: logger
68-
)
69-
)
70-
71-
let testState = try await withThrowingTaskGroup(of: TestState.self) { group in
72-
group.addTask {
73-
try await serviceGroup.run()
74-
try await awsClient.shutdown()
75-
return TestState.running
76-
}
77-
78-
group.addTask {
79-
defer {
80-
gracefulShutdownTestTrigger.triggerGracefulShutdown()
81-
}
82-
let closureHandler = ClosureHandler { event, context in
83-
//Inject Mock Response
84-
await dbManager.setupMockResponse(response: response, keyedResponse: keyedResponse)
85-
86-
// Execute Handler
87-
return try await sut.handle(event, context: context)
88-
}
89-
90-
var handler = LambdaCodableAdapter(
91-
encoder: encoder,
92-
decoder: decoder,
93-
handler: LambdaHandlerAdapter(handler: closureHandler)
94-
)
95-
let data = try encoder.encode(event)
96-
let event = ByteBuffer(data: data)
97-
let writer = MockLambdaResponseStreamWriter()
98-
let context = LambdaContext.__forTestsOnly(
99-
requestID: UUID().uuidString,
100-
traceID: UUID().uuidString,
101-
invokedFunctionARN: "arn:",
102-
timeout: .milliseconds(6000),
103-
logger: logger
104-
)
105-
106-
try await handler.handle(event, responseWriter: writer, context: context)
107-
108-
let result = await writer.output ?? ByteBuffer()
109-
return TestState.result(try decoder.decode(BreezeLambdaHandler<T>.Output.self, from: result))
110-
}
111-
for try await value in group {
112-
switch value {
113-
case .none, .running:
114-
break
115-
case .result:
116-
return value
117-
}
118-
}
119-
return TestState.none
120-
}
121-
122-
switch testState {
123-
case .none, .running:
124-
return APIGatewayV2Response(with: "", statusCode: .noContent)
125-
case .result(let response):
126-
return response
127-
}
46+
let awsClient = AWSClient()
47+
let db = SotoDynamoDB.DynamoDB(client: awsClient)
48+
let dbManager = BreezeDynamoDBManagerMock(db: db, tableName: config.tableName, keyName: config.keyName)
49+
let sut = handlerType.init(dbManager: dbManager, operation: operation)
50+
51+
let closureHandler = ClosureHandler { event, context in
52+
//Inject Mock Response
53+
await dbManager.setupMockResponse(response: response, keyedResponse: keyedResponse)
54+
// Execute Handler
55+
return try await sut.handle(event, context: context)
12856
}
57+
58+
var handler = LambdaCodableAdapter(
59+
encoder: encoder,
60+
decoder: decoder,
61+
handler: LambdaHandlerAdapter(handler: closureHandler)
62+
)
63+
let data = try encoder.encode(event)
64+
let event = ByteBuffer(data: data)
65+
let writer = MockLambdaResponseStreamWriter()
66+
let context = LambdaContext.__forTestsOnly(
67+
requestID: UUID().uuidString,
68+
traceID: UUID().uuidString,
69+
invokedFunctionARN: "arn:",
70+
timeout: .milliseconds(6000),
71+
logger: logger
72+
)
73+
try await handler.handle(event, responseWriter: writer, context: context)
74+
let result = await writer.output ?? ByteBuffer()
75+
try await awsClient.shutdown()
76+
return try decoder.decode(BreezeLambdaHandler<T>.Output.self, from: result)
12977
}
13078
}

0 commit comments

Comments
 (0)