Skip to content

Commit

Permalink
Add tests for running consumeWIthInboundHandler after editing
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-fowler committed Dec 13, 2024
1 parent d515fc7 commit d4d2b76
Showing 1 changed file with 66 additions and 0 deletions.
66 changes: 66 additions & 0 deletions Tests/HummingbirdTests/ApplicationTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -893,6 +893,72 @@ final class ApplicationTests: XCTestCase {
}
}
}

/// Test consumeWithInboundHandler
@available(macOS 15, iOS 18, tvOS 18, *)
func testConsumeWithInboundHandlerAfterCollect() async throws {
let router = Router()
router.post("streaming") { request, context -> Response in
var request = request
_ = try await request.collectBody(upTo: .max)
let request2 = request
return Response(
status: .ok,
body: .init { writer in
try await request2.body.consumeWithInboundCloseHandler { body in
try await writer.write(body)
} onInboundClosed: {
}
try await writer.finish(nil)
}
)
}
let app = Application(responder: router.buildResponder())

try await app.test(.live) { client in
let buffer = Self.randomBuffer(size: 640_001)
try await client.execute(uri: "/streaming", method: .post, body: buffer) { response in
XCTAssertEqual(response.status, .ok)
XCTAssertEqual(response.body, buffer)
}
}
}

/// Test consumeWithInboundHandler
@available(macOS 15, iOS 18, tvOS 18, *)
func testConsumeWithInboundHandlerAfterReplacingBody() async throws {
let router = Router()
router.post("streaming") { request, context -> Response in
var request = request
request.body = .init(
asyncSequence: request.body.map {
var view = $0.readableBytesView.map { $0 ^ 255 }
return ByteBuffer(bytes: view)
}
)
let request2 = request
return Response(
status: .ok,
body: .init { writer in
try await request2.body.consumeWithInboundCloseHandler { body in
try await writer.write(body)
} onInboundClosed: {
}
try await writer.finish(nil)
}
)
}
let app = Application(responder: router.buildResponder())

try await app.test(.live) { client in
let buffer = Self.randomBuffer(size: 640_001)
let xorBuffer = ByteBuffer(bytes: buffer.readableBytesView.map { $0 ^ 255 })
try await client.execute(uri: "/streaming", method: .post, body: buffer) { response in
XCTAssertEqual(response.status, .ok)
XCTAssertEqual(response.body, xorBuffer)
}
}
}
#endif
}

Expand Down

0 comments on commit d4d2b76

Please sign in to comment.