DATACASS-647 - Add non-nullable variant to ReactiveSelectOperation extensions.

Original pull request: #158.
This commit is contained in:
Sebastien Deleuze
2019-04-03 13:20:31 +02:00
committed by Mark Paluch
parent 021503677d
commit 9726b379e1
2 changed files with 114 additions and 6 deletions

View File

@@ -53,21 +53,39 @@ inline fun <reified T : Any> ReactiveSelectOperation.SelectWithProjection<*>.asT
`as`(T::class.java)
/**
* Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.one].
* Non-nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.one].
*
* @author Mark Paluch
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitOne(): T? =
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitOne(): T =
one().awaitSingle()
/**
* Nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.one].
*
* @author Mark Paluch
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitOneOrNull(): T? =
one().awaitFirstOrNull()
/**
* Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.first].
* Non-nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.first].
*
* @author Mark Paluch
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitFirst(): T? =
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitFirst(): T =
first().awaitSingle()
/**
* Nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.first].
*
* @author Mark Paluch
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitFirstOrNull(): T? =
first().awaitFirstOrNull()
/**

View File

@@ -65,7 +65,7 @@ class ReactiveSelectOperationExtensionsUnitTests {
}
@Test // DATACASS-632
fun terminatingFindAwaitOne() {
fun terminatingFindAwaitOneWithValue() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.one() } returns Mono.just("foo")
@@ -80,7 +80,52 @@ class ReactiveSelectOperationExtensionsUnitTests {
}
@Test // DATACASS-632
fun terminatingFindAwaitFirst() {
fun terminatingFindAwaitOneWithNull() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.one() } returns Mono.empty()
Assertions.assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
runBlocking { find.awaitOne() }
}
verify {
find.one()
}
}
@Test // DATACASS-632
fun terminatingFindAwaitOneOrNullWithValue() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.one() } returns Mono.just("foo")
runBlocking {
Assertions.assertThat(find.awaitOneOrNull()).isEqualTo("foo")
}
verify {
find.one()
}
}
@Test // DATACASS-632
fun terminatingFindAwaitOneOrNullWithNull() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.one() } returns Mono.empty()
runBlocking {
Assertions.assertThat(find.awaitOneOrNull()).isNull()
}
verify {
find.one()
}
}
@Test // DATACASS-632
fun terminatingFindAwaitFirstWithValue() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.first() } returns Mono.just("foo")
@@ -94,6 +139,51 @@ class ReactiveSelectOperationExtensionsUnitTests {
}
}
@Test // DATACASS-632
fun terminatingFindAwaitFirstWithNull() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.first() } returns Mono.empty()
Assertions.assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
runBlocking { find.awaitFirst() }
}
verify {
find.first()
}
}
@Test // DATACASS-632
fun terminatingFindAwaitFirstOrNullWithValue() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.first() } returns Mono.just("foo")
runBlocking {
Assertions.assertThat(find.awaitFirstOrNull()).isEqualTo("foo")
}
verify {
find.first()
}
}
@Test // DATACASS-632
fun terminatingFindAwaitFirstOrNullWithNull() {
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
every { find.first() } returns Mono.empty()
runBlocking {
Assertions.assertThat(find.awaitFirstOrNull()).isNull()
}
verify {
find.first()
}
}
@Test // DATACASS-632
fun terminatingFindAwaitCount() {