Browse Source

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

Original pull request: #735.
pull/736/head
Sebastien Deleuze 7 years ago committed by Mark Paluch
parent
commit
84ead72680
  1. 26
      spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt
  2. 25
      spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveUpdateOperationExtensions.kt
  3. 96
      spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt
  4. 95
      spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveUpdateOperationExtensionsTests.kt

26
spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt

@ -77,21 +77,39 @@ inline fun <reified T : Any> ReactiveFindOperation.DistinctWithProjection.asType @@ -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 =
first().awaitSingle()
/**
* 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>.awaitFirstOrNull(): T? =
first().awaitFirstOrNull()
/**

25
spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveUpdateOperationExtensions.kt

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

96
spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt

@ -21,7 +21,7 @@ import io.mockk.mockk @@ -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 { @@ -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 { @@ -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 { @@ -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() {

95
spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveUpdateOperationExtensionsTests.kt

@ -22,6 +22,7 @@ import io.mockk.mockk @@ -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 { @@ -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 { @@ -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 { @@ -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() {

Loading…
Cancel
Save