Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ inline fun <reified T : Any> WebClient.ResponseSpec.toEntityFlux(): Mono<Respons
suspend inline fun <reified T : Any> WebClient.ResponseSpec.awaitEntity(): ResponseEntity<T> {
val context = currentCoroutineContext().minusKey(Job.Key)
return withContext(context.toReactorContext()) {
toEntity(T::class.java).awaitSingle()
toEntity<T>().awaitSingle()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,14 @@ class WebClientExtensionsTests {
verify { responseSpec.toEntityFlux(object : ParameterizedTypeReference<List<Foo>>() {}) }
}

@Test
suspend fun `awaitEntity preserves generic type information`() {
val spec = mockk<WebClient.ResponseSpec>()
val entity = mockk<ResponseEntity<List<Foo>>>()
every { spec.toEntity(any<ParameterizedTypeReference<List<Foo>>>()) } returns Mono.just(entity)
assertThat(spec.awaitEntity<List<Foo>>()).isEqualTo(entity)
}

@Test
fun `ResponseSpec#awaitEntity with coroutine context propagation`() {
val exchangeFunction = mockk<ExchangeFunction>()
Expand All @@ -230,7 +238,7 @@ class WebClientExtensionsTests {
every { mockResponse.statusCode() } returns HttpStatus.OK
every { mockResponse.headers() } returns mockClientHeaders
every { mockClientHeaders.asHttpHeaders() } returns HttpHeaders()
every { mockResponse.bodyToMono(Foo::class.java) } returns Mono.just(foo)
every { mockResponse.bodyToMono(any<ParameterizedTypeReference<Foo>>()) } returns Mono.just(foo)
runBlocking(FooContextElement(foo)) {
val responseEntity = WebClient.builder()
.exchangeFunction(exchangeFunction)
Expand Down Expand Up @@ -258,7 +266,7 @@ class WebClientExtensionsTests {
every { mockResponse.statusCode() } returns HttpStatus.OK
every { mockResponse.headers() } returns mockClientHeaders
every { mockClientHeaders.asHttpHeaders() } returns HttpHeaders()
every { mockResponse.bodyToMono(Foo::class.java) } returns Mono.just(foo)
every { mockResponse.bodyToMono(any<ParameterizedTypeReference<Foo>>()) } returns Mono.just(foo)
runBlocking {
val responseEntity = WebClient.builder()
.exchangeFunction(exchangeFunction)
Expand Down