Skip to content

Commit 9726b37

Browse files
sdeleuzemp911de
authored andcommitted
DATACASS-647 - Add non-nullable variant to ReactiveSelectOperation extensions.
Original pull request: #158.
1 parent 0215036 commit 9726b37

File tree

2 files changed

+114
-6
lines changed

2 files changed

+114
-6
lines changed

spring-data-cassandra/src/main/kotlin/org/springframework/data/cassandra/core/ReactiveSelectOperationExtensions.kt

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,39 @@ inline fun <reified T : Any> ReactiveSelectOperation.SelectWithProjection<*>.asT
5353
`as`(T::class.java)
5454

5555
/**
56-
* Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.one].
56+
* Non-nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.one].
5757
*
5858
* @author Mark Paluch
5959
* @since 2.2
6060
*/
61-
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitOne(): T? =
61+
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitOne(): T =
62+
one().awaitSingle()
63+
64+
/**
65+
* Nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.one].
66+
*
67+
* @author Mark Paluch
68+
* @since 2.2
69+
*/
70+
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitOneOrNull(): T? =
6271
one().awaitFirstOrNull()
6372

6473
/**
65-
* Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.first].
74+
* Non-nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.first].
75+
*
76+
* @author Mark Paluch
77+
* @since 2.2
78+
*/
79+
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitFirst(): T =
80+
first().awaitSingle()
81+
82+
/**
83+
* Nullable Coroutines variant of [ReactiveSelectOperation.TerminatingSelect.first].
6684
*
6785
* @author Mark Paluch
6886
* @since 2.2
6987
*/
70-
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitFirst(): T? =
88+
suspend inline fun <reified T : Any> ReactiveSelectOperation.TerminatingSelect<T>.awaitFirstOrNull(): T? =
7189
first().awaitFirstOrNull()
7290

7391
/**

spring-data-cassandra/src/test/kotlin/org/springframework/data/cassandra/core/ReactiveSelectOperationExtensionsUnitTests.kt

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ReactiveSelectOperationExtensionsUnitTests {
6565
}
6666

6767
@Test // DATACASS-632
68-
fun terminatingFindAwaitOne() {
68+
fun terminatingFindAwaitOneWithValue() {
6969

7070
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
7171
every { find.one() } returns Mono.just("foo")
@@ -80,7 +80,52 @@ class ReactiveSelectOperationExtensionsUnitTests {
8080
}
8181

8282
@Test // DATACASS-632
83-
fun terminatingFindAwaitFirst() {
83+
fun terminatingFindAwaitOneWithNull() {
84+
85+
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
86+
every { find.one() } returns Mono.empty()
87+
88+
Assertions.assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
89+
runBlocking { find.awaitOne() }
90+
}
91+
92+
verify {
93+
find.one()
94+
}
95+
}
96+
97+
@Test // DATACASS-632
98+
fun terminatingFindAwaitOneOrNullWithValue() {
99+
100+
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
101+
every { find.one() } returns Mono.just("foo")
102+
103+
runBlocking {
104+
Assertions.assertThat(find.awaitOneOrNull()).isEqualTo("foo")
105+
}
106+
107+
verify {
108+
find.one()
109+
}
110+
}
111+
112+
@Test // DATACASS-632
113+
fun terminatingFindAwaitOneOrNullWithNull() {
114+
115+
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
116+
every { find.one() } returns Mono.empty()
117+
118+
runBlocking {
119+
Assertions.assertThat(find.awaitOneOrNull()).isNull()
120+
}
121+
122+
verify {
123+
find.one()
124+
}
125+
}
126+
127+
@Test // DATACASS-632
128+
fun terminatingFindAwaitFirstWithValue() {
84129

85130
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
86131
every { find.first() } returns Mono.just("foo")
@@ -94,6 +139,51 @@ class ReactiveSelectOperationExtensionsUnitTests {
94139
}
95140
}
96141

142+
@Test // DATACASS-632
143+
fun terminatingFindAwaitFirstWithNull() {
144+
145+
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
146+
every { find.first() } returns Mono.empty()
147+
148+
Assertions.assertThatExceptionOfType(NoSuchElementException::class.java).isThrownBy {
149+
runBlocking { find.awaitFirst() }
150+
}
151+
152+
verify {
153+
find.first()
154+
}
155+
}
156+
157+
@Test // DATACASS-632
158+
fun terminatingFindAwaitFirstOrNullWithValue() {
159+
160+
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
161+
every { find.first() } returns Mono.just("foo")
162+
163+
runBlocking {
164+
Assertions.assertThat(find.awaitFirstOrNull()).isEqualTo("foo")
165+
}
166+
167+
verify {
168+
find.first()
169+
}
170+
}
171+
172+
@Test // DATACASS-632
173+
fun terminatingFindAwaitFirstOrNullWithNull() {
174+
175+
val find = mockk<ReactiveSelectOperation.TerminatingSelect<String>>()
176+
every { find.first() } returns Mono.empty()
177+
178+
runBlocking {
179+
Assertions.assertThat(find.awaitFirstOrNull()).isNull()
180+
}
181+
182+
verify {
183+
find.first()
184+
}
185+
}
186+
97187
@Test // DATACASS-632
98188
fun terminatingFindAwaitCount() {
99189

0 commit comments

Comments
 (0)