DATAMONGO-2247 - Add non-nullable variants to Coroutines extensions.

Original pull request: #735.
This commit is contained in:
Sebastien Deleuze
2019-04-03 12:26:30 +02:00
committed by Mark Paluch
parent 10128d4d38
commit 84ead72680
4 changed files with 231 additions and 15 deletions

View File

@@ -77,21 +77,39 @@ inline fun <reified T : Any> ReactiveFindOperation.DistinctWithProjection.asType
`as`(T::class.java)
/**
* Coroutines variant of [ReactiveFindOperation.TerminatingFind.one].
* Non-nullable Coroutines variant of [ReactiveFindOperation.TerminatingFind.one].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveFindOperation.TerminatingFind<T>.awaitOne(): T? =
suspend inline fun <reified T : Any> ReactiveFindOperation.TerminatingFind<T>.awaitOne(): T =
one().awaitSingle()
/**
* Nullable Coroutines variant of [ReactiveFindOperation.TerminatingFind.one].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveFindOperation.TerminatingFind<T>.awaitOneOrNull(): T? =
one().awaitFirstOrNull()
/**
* Coroutines variant of [ReactiveFindOperation.TerminatingFind.first].
* Non-nullable Coroutines variant of [ReactiveFindOperation.TerminatingFind.first].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveFindOperation.TerminatingFind<T>.awaitFirst(): T? =
suspend inline fun <reified T : Any> ReactiveFindOperation.TerminatingFind<T>.awaitFirst(): T =
first().awaitSingle()
/**
* Nullable Coroutines variant of [ReactiveFindOperation.TerminatingFind.first].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend inline fun <reified T : Any> ReactiveFindOperation.TerminatingFind<T>.awaitFirstOrNull(): T? =
first().awaitFirstOrNull()
/**

View File

@@ -40,22 +40,39 @@ inline fun <reified T : Any> ReactiveUpdateOperation.update(): ReactiveUpdateOpe
update(T::class.java)
/**
* Coroutines variant of [ReactiveUpdateOperation.TerminatingFindAndModify.findModifyAndAwait].
* Non-nullable Coroutines variant of [ReactiveUpdateOperation.TerminatingFindAndModify.findModifyAndAwait].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend fun <T : Any> ReactiveUpdateOperation.TerminatingFindAndModify<T>.findModifyAndAwait(): T? =
findAndModify().awaitFirstOrNull()
suspend fun <T : Any> ReactiveUpdateOperation.TerminatingFindAndModify<T>.findModifyAndAwait(): T =
findAndModify().awaitSingle()
/**
* Coroutines variant of [ReactiveUpdateOperation.TerminatingFindAndReplace.findAndReplace].
* Nullable Coroutines variant of [ReactiveUpdateOperation.TerminatingFindAndModify.findModifyAndAwait].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend fun <T : Any> ReactiveUpdateOperation.TerminatingFindAndReplace<T>.findReplaceAndAwait(): T? =
suspend fun <T : Any> ReactiveUpdateOperation.TerminatingFindAndModify<T>.findModifyAndAwaitOrNull(): T? =
findAndModify().awaitFirstOrNull()
/**
* Non-nullable Coroutines variant of [ReactiveUpdateOperation.TerminatingFindAndReplace.findAndReplace].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend fun <T : Any> ReactiveUpdateOperation.TerminatingFindAndReplace<T>.findReplaceAndAwait(): T =
findAndReplace().awaitSingle()
/**
* Nullable Coroutines variant of [ReactiveUpdateOperation.TerminatingFindAndReplace.findAndReplace].
*
* @author Sebastien Deleuze
* @since 2.2
*/
suspend fun <T : Any> ReactiveUpdateOperation.TerminatingFindAndReplace<T>.findReplaceAndAwaitOrNull(): T? =
findAndReplace().awaitFirstOrNull()
/**

View File

@@ -21,7 +21,7 @@ import io.mockk.mockk
import io.mockk.verify
import kotlinx.coroutines.runBlocking
import org.assertj.core.api.Assertions.assertThat
import org.junit.Assert.assertEquals
import org.assertj.core.api.Assertions.assertThatExceptionOfType
import org.junit.Test
import reactor.core.publisher.Mono
@@ -80,7 +80,7 @@ class ReactiveFindOperationExtensionsTests {
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitOne() {
fun terminatingFindAwaitOneWithValue() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.one() } returns Mono.just("foo")
@@ -95,7 +95,52 @@ class ReactiveFindOperationExtensionsTests {
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitFirst() {
fun terminatingFindAwaitOneWithNull() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.one() } returns Mono.empty()
assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
runBlocking { find.awaitOne() }
}
verify {
find.one()
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitOneOrNullWithValue() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.one() } returns Mono.just("foo")
runBlocking {
assertThat(find.awaitOneOrNull()).isEqualTo("foo")
}
verify {
find.one()
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitOneOrNullWithNull() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.one() } returns Mono.empty()
runBlocking {
assertThat(find.awaitOneOrNull()).isNull()
}
verify {
find.one()
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitFirstWithValue() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.first() } returns Mono.just("foo")
@@ -109,6 +154,51 @@ class ReactiveFindOperationExtensionsTests {
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitFirstWithNull() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.first() } returns Mono.empty()
assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
runBlocking { find.awaitFirst() }
}
verify {
find.first()
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitFirstOrNullWithValue() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.first() } returns Mono.just("foo")
runBlocking {
assertThat(find.awaitFirstOrNull()).isEqualTo("foo")
}
verify {
find.first()
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitFirstOrNullWithNull() {
val find = mockk<ReactiveFindOperation.TerminatingFind<String>>()
every { find.first() } returns Mono.empty()
runBlocking {
assertThat(find.awaitFirstOrNull()).isNull()
}
verify {
find.first()
}
}
@Test // DATAMONGO-2209
fun terminatingFindAwaitCount() {

View File

@@ -22,6 +22,7 @@ import io.mockk.mockk
import io.mockk.verify
import kotlinx.coroutines.runBlocking
import org.assertj.core.api.Assertions.assertThat
import org.assertj.core.api.Assertions.assertThatExceptionOfType
import org.junit.Test
import reactor.core.publisher.Mono
@@ -50,7 +51,7 @@ class ReactiveUpdateOperationExtensionsTests {
}
@Test // DATAMONGO-2209
fun findModifyAndAwait() {
fun findModifyAndAwaitWithValue() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndModify<String>>()
every { find.findAndModify() } returns Mono.just("foo")
@@ -65,7 +66,52 @@ class ReactiveUpdateOperationExtensionsTests {
}
@Test // DATAMONGO-2209
fun findReplaceAndAwait() {
fun findModifyAndAwaitWithNull() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndModify<String>>()
every { find.findAndModify() } returns Mono.empty()
assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
runBlocking { find.findModifyAndAwait() }
}
verify {
find.findAndModify()
}
}
@Test // DATAMONGO-2209
fun findModifyAndAwaitOrNullWithValue() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndModify<String>>()
every { find.findAndModify() } returns Mono.just("foo")
runBlocking {
assertThat(find.findModifyAndAwaitOrNull()).isEqualTo("foo")
}
verify {
find.findAndModify()
}
}
@Test // DATAMONGO-2209
fun findModifyAndAwaitOrNullWithNull() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndModify<String>>()
every { find.findAndModify() } returns Mono.empty()
runBlocking {
assertThat(find.findModifyAndAwaitOrNull()).isNull()
}
verify {
find.findAndModify()
}
}
@Test // DATAMONGO-2209
fun findReplaceAndAwaitWithValue() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndReplace<String>>()
every { find.findAndReplace() } returns Mono.just("foo")
@@ -79,6 +125,51 @@ class ReactiveUpdateOperationExtensionsTests {
}
}
@Test // DATAMONGO-2209
fun findReplaceAndAwaitWithNull() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndReplace<String>>()
every { find.findAndReplace() } returns Mono.empty()
assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
runBlocking { find.findReplaceAndAwait() }
}
verify {
find.findAndReplace()
}
}
@Test // DATAMONGO-2209
fun findReplaceAndAwaitOrNullWithValue() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndReplace<String>>()
every { find.findAndReplace() } returns Mono.just("foo")
runBlocking {
assertThat(find.findReplaceAndAwaitOrNull()).isEqualTo("foo")
}
verify {
find.findAndReplace()
}
}
@Test // DATAMONGO-2209
fun findReplaceAndAwaitOrNullWithNull() {
val find = mockk<ReactiveUpdateOperation.TerminatingFindAndReplace<String>>()
every { find.findAndReplace() } returns Mono.empty()
runBlocking {
assertThat(find.findReplaceAndAwaitOrNull()).isNull()
}
verify {
find.findAndReplace()
}
}
@Test // DATAMONGO-2209
fun allAndAwait() {