Skip to content

Commit

Permalink
Fix RSocketRequester Coroutines extensions
Browse files Browse the repository at this point in the history
After spring-projectsgh-24073, some Coroutines extensions should be applied on
RetrieveSpec instead of RequestSpec.

Closes spring-projectsgh-24166
  • Loading branch information
sdeleuze committed Dec 9, 2019
1 parent b1e5996 commit 0f41536
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 30 deletions.
Expand Up @@ -94,61 +94,61 @@ inline fun <reified T : Any> RSocketRequester.RequestSpec.dataWithType(flow: Flo


/**
* Coroutines variant of [RSocketRequester.RequestSpec.send].
* Coroutines variant of [RSocketRequester.RetrieveSpec.send].
*
* @author Sebastien Deleuze
* @since 5.2
*/
suspend fun RSocketRequester.RequestSpec.sendAndAwait() {
suspend fun RSocketRequester.RetrieveSpec.sendAndAwait() {
send().awaitFirstOrNull()
}

/**
* Coroutines variant of [RSocketRequester.RequestSpec.retrieveMono].
* Coroutines variant of [RSocketRequester.RetrieveSpec.retrieveMono].
*
* @author Sebastien Deleuze
* @since 5.2
*/
suspend inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveAndAwait(): T =
suspend inline fun <reified T : Any> RSocketRequester.RetrieveSpec.retrieveAndAwait(): T =
retrieveMono(object : ParameterizedTypeReference<T>() {}).awaitSingle()

/**
* Nullable coroutines variant of [RSocketRequester.RequestSpec.retrieveMono].
* Nullable coroutines variant of [RSocketRequester.RetrieveSpec.retrieveMono].
*
* @author Sebastien Deleuze
* @since 5.2.1
*/
suspend inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveAndAwaitOrNull(): T? =
suspend inline fun <reified T : Any> RSocketRequester.RetrieveSpec.retrieveAndAwaitOrNull(): T? =
retrieveMono(object : ParameterizedTypeReference<T>() {}).awaitFirstOrNull()

/**
* Coroutines variant of [RSocketRequester.RequestSpec.retrieveFlux].
* Coroutines variant of [RSocketRequester.RetrieveSpec.retrieveFlux].
*
* @author Sebastien Deleuze
* @since 5.2
*/
inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveFlow(): Flow<T> =
inline fun <reified T : Any> RSocketRequester.RetrieveSpec.retrieveFlow(): Flow<T> =
retrieveFlux(object : ParameterizedTypeReference<T>() {}).asFlow()

/**
* Extension for [RSocketRequester.RequestSpec.retrieveMono] providing a `retrieveMono<Foo>()`
* Extension for [RSocketRequester.RetrieveSpec.retrieveMono] providing a `retrieveMono<Foo>()`
* variant leveraging Kotlin reified type parameters. This extension is not subject to type
* erasure and retains actual generic type arguments.
*
* @author Sebastien Deleuze
* @since 5.2
*/
inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveMono(): Mono<T> =
inline fun <reified T : Any> RSocketRequester.RetrieveSpec.retrieveMono(): Mono<T> =
retrieveMono(object : ParameterizedTypeReference<T>() {})


/**
* Extension for [RSocketRequester.RequestSpec.retrieveFlux] providing a `retrieveFlux<Foo>()`
* Extension for [RSocketRequester.RetrieveSpec.retrieveFlux] providing a `retrieveFlux<Foo>()`
* variant leveraging Kotlin reified type parameters. This extension is not subject to type
* erasure and retains actual generic type arguments.
*
* @author Sebastien Deleuze
* @since 5.2
*/
inline fun <reified T : Any> RSocketRequester.RequestSpec.retrieveFlux(): Flux<T> =
inline fun <reified T : Any> RSocketRequester.RetrieveSpec.retrieveFlux(): Flux<T> =
retrieveFlux(object : ParameterizedTypeReference<T>() {})
Expand Up @@ -103,56 +103,56 @@ class RSocketRequesterExtensionsTests {

@Test
fun sendAndAwait() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.send() } returns Mono.empty()
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
every { retrieveSpec.send() } returns Mono.empty()
runBlocking {
requestSpec.sendAndAwait()
retrieveSpec.sendAndAwait()
}
}

@Test
fun retrieveAndAwait() {
val response = "foo"
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
runBlocking {
assertThat(requestSpec.retrieveAndAwait<String>()).isEqualTo(response)
assertThat(retrieveSpec.retrieveAndAwait<String>()).isEqualTo(response)
}
}

@Test
fun retrieveAndAwaitOrNull() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.empty()
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.empty()
runBlocking {
assertThat(requestSpec.retrieveAndAwaitOrNull<String>()).isNull()
assertThat(retrieveSpec.retrieveAndAwaitOrNull<String>()).isNull()
}
}

@Test
fun retrieveFlow() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
every { retrieveSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
runBlocking {
assertThat(requestSpec.retrieveFlow<String>().toList()).contains("foo", "bar")
assertThat(retrieveSpec.retrieveFlow<String>().toList()).contains("foo", "bar")
}
}

@Test
fun retrieveMono() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
every { retrieveSpec.retrieveMono(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Mono.just("foo")
runBlocking {
assertThat(requestSpec.retrieveMono<String>().block()).isEqualTo("foo")
assertThat(retrieveSpec.retrieveMono<String>().block()).isEqualTo("foo")
}
}

@Test
fun retrieveFlux() {
val requestSpec = mockk<RSocketRequester.RequestSpec>()
every { requestSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
val retrieveSpec = mockk<RSocketRequester.RetrieveSpec>()
every { retrieveSpec.retrieveFlux(match<ParameterizedTypeReference<*>>(stringTypeRefMatcher)) } returns Flux.just("foo", "bar")
runBlocking {
assertThat(requestSpec.retrieveFlux<String>().collectList().block()).contains("foo", "bar")
assertThat(retrieveSpec.retrieveFlux<String>().collectList().block()).contains("foo", "bar")
}
}
}

0 comments on commit 0f41536

Please sign in to comment.