From 7619d7f19e38f3aa17939a2265ce4d3dfd9db62d Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Tue, 2 Apr 2019 16:36:03 +0200 Subject: [PATCH 1/3] Convert idents to tabs --- .../r2dbc/function/DatabaseClientExtensions.kt | 14 +++++++------- .../data/r2dbc/function/RowsFetchSpecExtensions.kt | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt index 163805b8..ab1ae095 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.reactive.awaitFirstOrNull * @author Sebastien Deleuze */ suspend fun DatabaseClient.GenericExecuteSpec.await() { - then().awaitFirstOrNull() + then().awaitFirstOrNull() } /** @@ -33,7 +33,7 @@ suspend fun DatabaseClient.GenericExecuteSpec.await() { * @author Sebastien Deleuze */ inline fun DatabaseClient.GenericExecuteSpec.asType(): DatabaseClient.TypedExecuteSpec - = `as`(T::class.java) + = `as`(T::class.java) /** * Extension for [DatabaseClient.GenericSelectSpec.as] providing a @@ -42,7 +42,7 @@ inline fun DatabaseClient.GenericExecuteSpec.asType(): Databas * @author Sebastien Deleuze */ inline fun DatabaseClient.GenericSelectSpec.asType(): DatabaseClient.TypedSelectSpec - = `as`(T::class.java) + = `as`(T::class.java) /** * Coroutines variant of [DatabaseClient.TypedExecuteSpec.then]. @@ -50,7 +50,7 @@ inline fun DatabaseClient.GenericSelectSpec.asType(): Database * @author Sebastien Deleuze */ suspend fun DatabaseClient.TypedExecuteSpec.await() { - then().awaitFirstOrNull() + then().awaitFirstOrNull() } /** @@ -60,7 +60,7 @@ suspend fun DatabaseClient.TypedExecuteSpec.await() { * @author Sebastien Deleuze */ inline fun DatabaseClient.TypedExecuteSpec.asType(): DatabaseClient.TypedExecuteSpec - = `as`(T::class.java) + = `as`(T::class.java) /** * Coroutines variant of [DatabaseClient.InsertSpec.then]. @@ -68,7 +68,7 @@ inline fun DatabaseClient.TypedExecuteSpec.asType(): Databa * @author Sebastien Deleuze */ suspend fun DatabaseClient.InsertSpec.await() { - then().awaitFirstOrNull() + then().awaitFirstOrNull() } /** @@ -78,5 +78,5 @@ suspend fun DatabaseClient.InsertSpec.await() { * @author Sebastien Deleuze */ inline fun DatabaseClient.InsertIntoSpec.into(): DatabaseClient.TypedInsertSpec - = into(T::class.java) + = into(T::class.java) diff --git a/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt index 88934c96..2a5ca5b5 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.reactive.awaitFirstOrNull * @author Sebastien Deleuze */ suspend fun RowsFetchSpec.awaitOne(): T? - = one().awaitFirstOrNull() + = one().awaitFirstOrNull() /** * Coroutines variant of [RowsFetchSpec.first]. @@ -31,7 +31,7 @@ suspend fun RowsFetchSpec.awaitOne(): T? * @author Sebastien Deleuze */ suspend fun RowsFetchSpec.awaitFirst(): T? - = first().awaitFirstOrNull() + = first().awaitFirstOrNull() // TODO Coroutines variant of [RowsFetchSpec.all], depends on [kotlinx.coroutines#254](https://github.com/Kotlin/kotlinx.coroutines/issues/254). // suspend fun RowsFetchSpec.awaitAll() = all()... From 641e4705759f31eed38dac95505fa5e860c4aac6 Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Wed, 3 Apr 2019 08:58:29 +0200 Subject: [PATCH 2/3] Add non-nullable variant to RowsFetchSpec extensions This commit is a follow-up of gh-63. --- .../r2dbc/function/RowsFetchSpecExtensions.kt | 25 ++++- .../function/RowsFetchSpecExtensionsTests.kt | 96 ++++++++++++++++++- 2 files changed, 115 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt index 2a5ca5b5..38970df0 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt @@ -16,21 +16,38 @@ package org.springframework.data.r2dbc.function import kotlinx.coroutines.reactive.awaitFirstOrNull +import kotlinx.coroutines.reactive.awaitSingle /** - * Coroutines variant of [RowsFetchSpec.one]. + * Non-nullable Coroutines variant of [RowsFetchSpec.one]. * * @author Sebastien Deleuze */ -suspend fun RowsFetchSpec.awaitOne(): T? +suspend fun RowsFetchSpec.awaitOne(): T + = one().awaitSingle() + +/** + * Nullable Coroutines variant of [RowsFetchSpec.one]. + * + * @author Sebastien Deleuze + */ +suspend fun RowsFetchSpec.awaitOneOrNull(): T? = one().awaitFirstOrNull() /** - * Coroutines variant of [RowsFetchSpec.first]. + * Non-nullable Coroutines variant of [RowsFetchSpec.first]. + * + * @author Sebastien Deleuze + */ +suspend fun RowsFetchSpec.awaitFirst(): T + = first().awaitSingle() + +/** + * Nullable Coroutines variant of [RowsFetchSpec.first]. * * @author Sebastien Deleuze */ -suspend fun RowsFetchSpec.awaitFirst(): T? +suspend fun RowsFetchSpec.awaitFirstOrNull(): T? = first().awaitFirstOrNull() // TODO Coroutines variant of [RowsFetchSpec.all], depends on [kotlinx.coroutines#254](https://github.com/Kotlin/kotlinx.coroutines/issues/254). diff --git a/src/test/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensionsTests.kt b/src/test/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensionsTests.kt index 6278572d..78596d4d 100644 --- a/src/test/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensionsTests.kt +++ b/src/test/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensionsTests.kt @@ -20,8 +20,10 @@ 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 +import java.lang.NullPointerException /** * Unit tests for [RowsFetchSpec] extensions. @@ -31,7 +33,7 @@ import reactor.core.publisher.Mono class RowsFetchSpecExtensionsTests { @Test // gh-63 - fun awaitOne() { + fun awaitOneWithValue() { val spec = mockk>() every { spec.one() } returns Mono.just("foo") @@ -46,7 +48,52 @@ class RowsFetchSpecExtensionsTests { } @Test // gh-63 - fun awaitFirst() { + fun awaitOneWithNull() { + + val spec = mockk>() + every { spec.one() } returns Mono.empty() + + assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy { + runBlocking { spec.awaitOne() } + } + + verify { + spec.one() + } + } + + @Test // gh-63 + fun awaitOneOrNullWithValue() { + + val spec = mockk>() + every { spec.one() } returns Mono.just("foo") + + runBlocking { + assertThat(spec.awaitOneOrNull()).isEqualTo("foo") + } + + verify { + spec.one() + } + } + + @Test // gh-63 + fun awaitOneOrNullWithNull() { + + val spec = mockk>() + every { spec.one() } returns Mono.empty() + + runBlocking { + assertThat(spec.awaitOneOrNull()).isNull() + } + + verify { + spec.one() + } + } + + @Test // gh-63 + fun awaitFirstWithValue() { val spec = mockk>() every { spec.first() } returns Mono.just("foo") @@ -59,4 +106,49 @@ class RowsFetchSpecExtensionsTests { spec.first() } } + + @Test // gh-63 + fun awaitFirstWithNull() { + + val spec = mockk>() + every { spec.first() } returns Mono.empty() + + assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy { + runBlocking { spec.awaitFirst() } + } + + verify { + spec.first() + } + } + + @Test // gh-63 + fun awaitFirstOrNullWithValue() { + + val spec = mockk>() + every { spec.first() } returns Mono.just("foo") + + runBlocking { + assertThat(spec.awaitFirstOrNull()).isEqualTo("foo") + } + + verify { + spec.first() + } + } + + @Test // gh-63 + fun awaitFirstOrNullWithNull() { + + val spec = mockk>() + every { spec.first() } returns Mono.empty() + + runBlocking { + assertThat(spec.awaitFirstOrNull()).isNull() + } + + verify { + spec.first() + } + } } From 28dd79bad4529daca18d15dc5892c77b50a2e304 Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Wed, 3 Apr 2019 09:02:30 +0200 Subject: [PATCH 3/3] Fix Kotlin extensions formatting --- .../r2dbc/function/DatabaseClientExtensions.kt | 16 ++++++++-------- .../r2dbc/function/RowsFetchSpecExtensions.kt | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt index ab1ae095..e1348935 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/function/DatabaseClientExtensions.kt @@ -32,8 +32,8 @@ suspend fun DatabaseClient.GenericExecuteSpec.await() { * * @author Sebastien Deleuze */ -inline fun DatabaseClient.GenericExecuteSpec.asType(): DatabaseClient.TypedExecuteSpec - = `as`(T::class.java) +inline fun DatabaseClient.GenericExecuteSpec.asType(): DatabaseClient.TypedExecuteSpec = + `as`(T::class.java) /** * Extension for [DatabaseClient.GenericSelectSpec.as] providing a @@ -41,8 +41,8 @@ inline fun DatabaseClient.GenericExecuteSpec.asType(): Databas * * @author Sebastien Deleuze */ -inline fun DatabaseClient.GenericSelectSpec.asType(): DatabaseClient.TypedSelectSpec - = `as`(T::class.java) +inline fun DatabaseClient.GenericSelectSpec.asType(): DatabaseClient.TypedSelectSpec = + `as`(T::class.java) /** * Coroutines variant of [DatabaseClient.TypedExecuteSpec.then]. @@ -59,8 +59,8 @@ suspend fun DatabaseClient.TypedExecuteSpec.await() { * * @author Sebastien Deleuze */ -inline fun DatabaseClient.TypedExecuteSpec.asType(): DatabaseClient.TypedExecuteSpec - = `as`(T::class.java) +inline fun DatabaseClient.TypedExecuteSpec.asType(): DatabaseClient.TypedExecuteSpec = + `as`(T::class.java) /** * Coroutines variant of [DatabaseClient.InsertSpec.then]. @@ -77,6 +77,6 @@ suspend fun DatabaseClient.InsertSpec.await() { * * @author Sebastien Deleuze */ -inline fun DatabaseClient.InsertIntoSpec.into(): DatabaseClient.TypedInsertSpec - = into(T::class.java) +inline fun DatabaseClient.InsertIntoSpec.into(): DatabaseClient.TypedInsertSpec = + into(T::class.java) diff --git a/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt b/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt index 38970df0..34a09aef 100644 --- a/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt +++ b/src/main/kotlin/org/springframework/data/r2dbc/function/RowsFetchSpecExtensions.kt @@ -23,32 +23,32 @@ import kotlinx.coroutines.reactive.awaitSingle * * @author Sebastien Deleuze */ -suspend fun RowsFetchSpec.awaitOne(): T - = one().awaitSingle() +suspend fun RowsFetchSpec.awaitOne(): T = + one().awaitSingle() /** * Nullable Coroutines variant of [RowsFetchSpec.one]. * * @author Sebastien Deleuze */ -suspend fun RowsFetchSpec.awaitOneOrNull(): T? - = one().awaitFirstOrNull() +suspend fun RowsFetchSpec.awaitOneOrNull(): T? = + one().awaitFirstOrNull() /** * Non-nullable Coroutines variant of [RowsFetchSpec.first]. * * @author Sebastien Deleuze */ -suspend fun RowsFetchSpec.awaitFirst(): T - = first().awaitSingle() +suspend fun RowsFetchSpec.awaitFirst(): T = + first().awaitSingle() /** * Nullable Coroutines variant of [RowsFetchSpec.first]. * * @author Sebastien Deleuze */ -suspend fun RowsFetchSpec.awaitFirstOrNull(): T? - = first().awaitFirstOrNull() +suspend fun RowsFetchSpec.awaitFirstOrNull(): T? = + first().awaitFirstOrNull() // TODO Coroutines variant of [RowsFetchSpec.all], depends on [kotlinx.coroutines#254](https://github.com/Kotlin/kotlinx.coroutines/issues/254). // suspend fun RowsFetchSpec.awaitAll() = all()...