Skip to content

Commit bc662da

Browse files
committed
Introduce CoClientResponseExtensions
1 parent 456c094 commit bc662da

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.springframework.web.function.client
2+
3+
import kotlinx.coroutines.reactive.awaitSingle
4+
import kotlinx.coroutines.reactive.awaitFirstOrNull
5+
import org.springframework.http.ResponseEntity
6+
import org.springframework.web.reactive.function.client.ClientResponse
7+
import org.springframework.web.reactive.function.client.bodyToMono
8+
import org.springframework.web.reactive.function.client.toEntity
9+
import org.springframework.web.reactive.function.client.toEntityList
10+
11+
/**
12+
* Coroutines variant of [ClientResponse.bodyToMono].
13+
*
14+
* @author Sebastien Deleuze
15+
* @since 5.2
16+
*/
17+
suspend inline fun <reified T : Any> ClientResponse.awaitBody(): T? = bodyToMono<T>().awaitFirstOrNull()
18+
19+
/**
20+
* Coroutines variant of [ClientResponse.toEntity].
21+
*
22+
* @author Sebastien Deleuze
23+
* @since 5.2
24+
*/
25+
suspend inline fun <reified T : Any> ClientResponse.awaitEntity(): ResponseEntity<T> = toEntity<T>().awaitSingle()
26+
27+
/**
28+
* Coroutines variant of [ClientResponse.toEntityList].
29+
*
30+
* @author Sebastien Deleuze
31+
* @since 5.2
32+
*/
33+
suspend inline fun <reified T : Any> ClientResponse.awaitEntityList(): ResponseEntity<List<T>> = toEntityList<T>().awaitSingle()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package org.springframework.web.function.client
2+
3+
import io.mockk.every
4+
import io.mockk.mockk
5+
import kotlinx.coroutines.runBlocking
6+
import org.junit.jupiter.api.Assertions
7+
import org.junit.jupiter.api.Test
8+
import org.springframework.http.HttpStatus
9+
import org.springframework.http.ResponseEntity
10+
import org.springframework.web.reactive.function.client.ClientResponse
11+
import org.springframework.web.reactive.function.client.bodyToMono
12+
import org.springframework.web.reactive.function.client.toEntity
13+
import org.springframework.web.reactive.function.client.toEntityList
14+
import reactor.core.publisher.Mono
15+
16+
class CoClientResponseExtensionsTests {
17+
18+
@Test
19+
fun awaitBody() {
20+
val response = mockk<ClientResponse>()
21+
every { response.bodyToMono<String>() } returns Mono.just("foo")
22+
runBlocking {
23+
Assertions.assertEquals("foo", response.awaitBody<String>())
24+
}
25+
}
26+
27+
@Test
28+
fun awaitEntity() {
29+
val response = mockk<ClientResponse>()
30+
val entity = ResponseEntity("foo", HttpStatus.OK)
31+
every { response.toEntity<String>() } returns Mono.just(entity)
32+
runBlocking {
33+
Assertions.assertEquals(entity, response.awaitEntity<String>())
34+
}
35+
}
36+
37+
@Test
38+
fun awaitEntityList() {
39+
val response = mockk<ClientResponse>()
40+
val entity = ResponseEntity(listOf("foo"), HttpStatus.OK)
41+
every { response.toEntityList<String>() } returns Mono.just(entity)
42+
runBlocking {
43+
Assertions.assertEquals(entity, response.awaitEntityList<String>())
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)