Skip to content

DATAMONGO-2247 - Add non-nullable variants to Coroutines extensions #735

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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()

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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")
Expand All @@ -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")
Expand All @@ -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() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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")
Expand All @@ -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")
Expand All @@ -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() {

Expand Down