diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 0e7d7aa0c..3ef8989f8 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -132,6 +132,13 @@
true
+
+ io.reactivex.rxjava2
+ rxjava
+ ${rxjava2}
+ true
+
+
javax.enterprise
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java
index af13cf100..949063aac 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java
@@ -18,6 +18,9 @@ package org.springframework.data.mongodb.repository;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
+import io.reactivex.Flowable;
+import io.reactivex.Maybe;
+import io.reactivex.observers.TestObserver;
import lombok.Data;
import lombok.NoArgsConstructor;
import reactor.core.publisher.Flux;
@@ -42,6 +45,7 @@ import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
import org.springframework.data.repository.reactive.RxJava1SortingRepository;
+import org.springframework.data.repository.reactive.RxJava2SortingRepository;
import org.springframework.stereotype.Repository;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -62,7 +66,8 @@ public class ConvertingReactiveMongoRepositoryTests {
@Autowired MixedReactivePersonRepostitory reactiveRepository;
@Autowired ReactivePersonRepostitory reactivePersonRepostitory;
- @Autowired RxJavaPersonRepostitory rxJavaPersonRepostitory;
+ @Autowired RxJava1PersonRepostitory rxJava1PersonRepostitory;
+ @Autowired RxJava2PersonRepostitory rxJava2PersonRepostitory;
ReactivePerson dave, oliver, carter, boyd, stefan, leroi, alicia;
@@ -95,9 +100,9 @@ public class ConvertingReactiveMongoRepositoryTests {
}
@Test // DATAMONGO-1444
- public void simpleRxJavaMethodsShouldWork() {
+ public void simpleRxJava1MethodsShouldWork() throws Exception {
- rxJavaPersonRepostitory.exists(dave.getId()) //
+ rxJava1PersonRepostitory.exists(dave.getId()) //
.test() //
.awaitTerminalEvent() //
.assertValue(true) //
@@ -106,9 +111,9 @@ public class ConvertingReactiveMongoRepositoryTests {
}
@Test // DATAMONGO-1444
- public void existsWithSingleRxJavaIdMethodsShouldWork() {
+ public void existsWithSingleRxJava1IdMethodsShouldWork() throws Exception {
- rxJavaPersonRepostitory.exists(Single.just(dave.getId())) //
+ rxJava1PersonRepostitory.exists(Single.just(dave.getId())) //
.test() //
.awaitTerminalEvent() //
.assertValue(true) //
@@ -117,9 +122,9 @@ public class ConvertingReactiveMongoRepositoryTests {
}
@Test // DATAMONGO-1444
- public void singleRxJavaQueryMethodShouldWork() {
+ public void singleRxJava1QueryMethodShouldWork() throws Exception {
- rxJavaPersonRepostitory.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()) //
+ rxJava1PersonRepostitory.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()) //
.test() //
.awaitTerminalEvent() //
.assertValue(dave) //
@@ -128,9 +133,9 @@ public class ConvertingReactiveMongoRepositoryTests {
}
@Test // DATAMONGO-1444
- public void singleProjectedRxJavaQueryMethodShouldWork() {
+ public void singleProjectedRxJava1QueryMethodShouldWork() throws Exception {
- List people = rxJavaPersonRepostitory.findProjectedByLastname(carter.getLastname()) //
+ List people = rxJava1PersonRepostitory.findProjectedByLastname(carter.getLastname()) //
.test() //
.awaitTerminalEvent() //
.assertValueCount(1) //
@@ -143,9 +148,9 @@ public class ConvertingReactiveMongoRepositoryTests {
}
@Test // DATAMONGO-1444
- public void observableRxJavaQueryMethodShouldWork() {
+ public void observableRxJava1QueryMethodShouldWork() throws Exception {
- rxJavaPersonRepostitory.findByLastname(boyd.getLastname()) //
+ rxJava1PersonRepostitory.findByLastname(boyd.getLastname()) //
.test() //
.awaitTerminalEvent() //
.assertValue(boyd) //
@@ -154,6 +159,83 @@ public class ConvertingReactiveMongoRepositoryTests {
.getOnNextEvents();
}
+ @Test // DATAMONGO-1610
+ public void simpleRxJava2MethodsShouldWork() throws Exception {
+
+ TestObserver testObserver = rxJava2PersonRepostitory.exists(dave.getId()).test();
+
+ testObserver.awaitTerminalEvent();
+ testObserver.assertComplete();
+ testObserver.assertNoErrors();
+ testObserver.assertValue(true);
+ }
+
+ @Test // DATAMONGO-1610
+ public void existsWithSingleRxJava2IdMethodsShouldWork() throws Exception {
+
+ TestObserver testObserver = rxJava2PersonRepostitory.exists(io.reactivex.Single.just(dave.getId())).test();
+
+ testObserver.awaitTerminalEvent();
+ testObserver.assertComplete();
+ testObserver.assertNoErrors();
+ testObserver.assertValue(true);
+ }
+
+ @Test // DATAMONGO-1610
+ public void flowableRxJava2QueryMethodShouldWork() throws Exception {
+
+ io.reactivex.subscribers.TestSubscriber testSubscriber = rxJava2PersonRepostitory
+ .findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()).test();
+
+ testSubscriber.awaitTerminalEvent();
+ testSubscriber.assertComplete();
+ testSubscriber.assertNoErrors();
+ testSubscriber.assertValue(dave);
+ }
+
+ @Test // DATAMONGO-1610
+ public void singleProjectedRxJava2QueryMethodShouldWork() throws Exception {
+
+ TestObserver testObserver = rxJava2PersonRepostitory
+ .findProjectedByLastname(Maybe.just(carter.getLastname())).test();
+
+ testObserver.awaitTerminalEvent();
+ testObserver.assertComplete();
+ testObserver.assertNoErrors();
+
+ testObserver.assertValue(actual -> {
+ assertThat(actual.getFirstname(), is(equalTo(carter.getFirstname())));
+ return true;
+ });
+ }
+
+ @Test // DATAMONGO-1610
+ public void observableProjectedRxJava2QueryMethodShouldWork() throws Exception {
+
+ TestObserver testObserver = rxJava2PersonRepostitory
+ .findProjectedByLastname(Single.just(carter.getLastname())).test();
+
+ testObserver.awaitTerminalEvent();
+ testObserver.assertComplete();
+ testObserver.assertNoErrors();
+
+ testObserver.assertValue(actual -> {
+ assertThat(actual.getFirstname(), is(equalTo(carter.getFirstname())));
+ return true;
+ });
+ }
+
+ @Test // DATAMONGO-1610
+ public void maybeRxJava2QueryMethodShouldWork() throws Exception {
+
+ TestObserver testObserver = rxJava2PersonRepostitory.findByLastname(boyd.getLastname()).test();
+
+ testObserver.awaitTerminalEvent();
+ testObserver.assertComplete();
+ testObserver.assertNoErrors();
+ testObserver.assertValue(boyd);
+ }
+
@Test // DATAMONGO-1444
public void mixedRepositoryShouldWork() {
@@ -203,7 +285,7 @@ public class ConvertingReactiveMongoRepositoryTests {
}
@Repository
- interface RxJavaPersonRepostitory extends RxJava1SortingRepository {
+ interface RxJava1PersonRepostitory extends RxJava1SortingRepository {
Observable findByFirstnameAndLastname(String firstname, String lastname);
@@ -212,6 +294,18 @@ public class ConvertingReactiveMongoRepositoryTests {
Single findProjectedByLastname(String lastname);
}
+ @Repository
+ interface RxJava2PersonRepostitory extends RxJava2SortingRepository {
+
+ Flowable findByFirstnameAndLastname(String firstname, String lastname);
+
+ Maybe findByLastname(String lastname);
+
+ io.reactivex.Single findProjectedByLastname(Maybe lastname);
+
+ io.reactivex.Observable findProjectedByLastname(Single lastname);
+ }
+
@Repository
interface MixedReactivePersonRepostitory extends ReactiveMongoRepository {