Skip to content

Commit 8bf3d39

Browse files
wonwoomp911de
authored andcommitted
Add missing ReactiveMongoOperations.aggregate Kotlin extension.
See #3508. Original pull request: #893.
1 parent d3c00a9 commit 8bf3d39

File tree

2 files changed

+77
-1
lines changed

2 files changed

+77
-1
lines changed

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

+39
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import com.mongodb.client.result.UpdateResult
2020
import com.mongodb.reactivestreams.client.MongoCollection
2121
import org.bson.Document
2222
import org.springframework.data.geo.GeoResult
23+
import org.springframework.data.mongodb.core.aggregation.Aggregation
24+
import org.springframework.data.mongodb.core.aggregation.TypedAggregation
2325
import org.springframework.data.mongodb.core.index.ReactiveIndexOperations
2426
import org.springframework.data.mongodb.core.query.NearQuery
2527
import org.springframework.data.mongodb.core.query.Query
@@ -210,6 +212,43 @@ inline fun <reified T : Any, reified E : Any> ReactiveMongoOperations.findDistin
210212
if (collectionName != null) findDistinct(query, field, collectionName, E::class.java, T::class.java)
211213
else findDistinct(query, field, E::class.java, T::class.java)
212214

215+
216+
/**
217+
* Extension for [ReactiveMongoOperations.aggregate] leveraging reified type parameters.
218+
*
219+
* @author Wonwoo Lee
220+
* @since 3.1
221+
*/
222+
inline fun <reified T : Any> ReactiveMongoOperations.aggregate(aggregation: TypedAggregation<*>, collectionName: String): Flux<T> =
223+
this.aggregate(aggregation, collectionName, T::class.java)
224+
225+
/**
226+
* Extension for [ReactiveMongoOperations.aggregate] leveraging reified type parameters.
227+
*
228+
* @author Wonwoo Lee
229+
* @since 3.1
230+
*/
231+
inline fun <reified T : Any> ReactiveMongoOperations.aggregate(aggregation: TypedAggregation<*>): Flux<T> =
232+
this.aggregate(aggregation, T::class.java)
233+
234+
/**
235+
* Extension for [ReactiveMongoOperations.aggregate] leveraging reified type parameters.
236+
*
237+
* @author Wonwoo Lee
238+
* @since 3.1
239+
*/
240+
inline fun <reified T : Any> ReactiveMongoOperations.aggregate(aggregation: Aggregation, entityClass: KClass<*>): Flux<T> =
241+
this.aggregate(aggregation, entityClass.java, T::class.java)
242+
243+
/**
244+
* Extension for [ReactiveMongoOperations.aggregate] leveraging reified type parameters.
245+
*
246+
* @author Wonwoo Lee
247+
* @since 3.1
248+
*/
249+
inline fun <reified T : Any> ReactiveMongoOperations.aggregate(aggregation: Aggregation, collectionName: String): Flux<T> =
250+
this.aggregate(aggregation, collectionName, T::class.java)
251+
213252
/**
214253
* Extension for [ReactiveMongoOperations.geoNear] leveraging reified type parameters.
215254
*

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

+38-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import example.first.First
1919
import io.mockk.mockk
2020
import io.mockk.verify
2121
import org.junit.Test
22+
import org.springframework.data.mongodb.core.aggregation.Aggregation
23+
import org.springframework.data.mongodb.core.aggregation.TypedAggregation
2224
import org.springframework.data.mongodb.core.query.NearQuery
2325
import org.springframework.data.mongodb.core.query.Query
2426
import org.springframework.data.mongodb.core.query.Update
@@ -598,7 +600,6 @@ class ReactiveMongoOperationsExtensionsTests {
598600
verify { operations.findDistinct(query, "field", "collection", First::class.java, String::class.java) }
599601
}
600602

601-
602603
@Test // DATAMONGO-1761
603604
@Suppress("DEPRECATION")
604605
fun `findDistinct(Query, String, KClass) should call java counterpart`() {
@@ -608,4 +609,40 @@ class ReactiveMongoOperationsExtensionsTests {
608609
operations.findDistinct<String>(query, "field", First::class)
609610
verify { operations.findDistinct(query, "field", First::class.java, String::class.java) }
610611
}
612+
613+
@Test
614+
fun `aggregate(TypedAggregation, String, KClass) should call java counterpart`() {
615+
616+
val aggregation = mockk<TypedAggregation<String>>()
617+
618+
operations.aggregate<First>(aggregation, "foo")
619+
verify { operations.aggregate(aggregation, "foo", First::class.java) }
620+
}
621+
622+
@Test
623+
fun `aggregate(TypedAggregation, KClass) should call java counterpart`() {
624+
625+
val aggregation = mockk<TypedAggregation<String>>()
626+
627+
operations.aggregate<First>(aggregation)
628+
verify { operations.aggregate(aggregation, First::class.java) }
629+
}
630+
631+
@Test
632+
fun `aggregate(Aggregation, KClass) should call java counterpart`() {
633+
634+
val aggregation = mockk<Aggregation>()
635+
636+
operations.aggregate<First>(aggregation, String::class)
637+
verify { operations.aggregate(aggregation, String::class.java, First::class.java) }
638+
}
639+
640+
@Test
641+
fun `aggregate(Aggregation, String) should call java counterpart`() {
642+
643+
val aggregation = mockk<Aggregation>()
644+
645+
operations.aggregate<First>(aggregation, "foo")
646+
verify { operations.aggregate(aggregation, "foo", First::class.java) }
647+
}
611648
}

0 commit comments

Comments
 (0)