Skip to content

Commit b1acda4

Browse files
mp911dechristophstrobl
authored andcommittedApr 3, 2017
DATAMONGO-1610 - Support RxJava 2 repositories.
Add RxJava 2 dependency. Add test to verify RxJava 2 interoperability. Original Pull Request: spring-projects#440
1 parent 2ab466e commit b1acda4

File tree

2 files changed

+113
-12
lines changed

2 files changed

+113
-12
lines changed
 

‎spring-data-mongodb/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,13 @@
132132
<optional>true</optional>
133133
</dependency>
134134

135+
<dependency>
136+
<groupId>io.reactivex.rxjava2</groupId>
137+
<artifactId>rxjava</artifactId>
138+
<version>${rxjava2}</version>
139+
<optional>true</optional>
140+
</dependency>
141+
135142
<!-- CDI -->
136143
<dependency>
137144
<groupId>javax.enterprise</groupId>

‎spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ConvertingReactiveMongoRepositoryTests.java

Lines changed: 106 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
import static org.hamcrest.Matchers.*;
1919
import static org.junit.Assert.*;
2020

21+
import io.reactivex.Flowable;
22+
import io.reactivex.Maybe;
23+
import io.reactivex.observers.TestObserver;
2124
import lombok.Data;
2225
import lombok.NoArgsConstructor;
2326
import reactor.core.publisher.Flux;
@@ -42,6 +45,7 @@
4245
import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
4346
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
4447
import org.springframework.data.repository.reactive.RxJava1SortingRepository;
48+
import org.springframework.data.repository.reactive.RxJava2SortingRepository;
4549
import org.springframework.stereotype.Repository;
4650
import org.springframework.test.context.ContextConfiguration;
4751
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -62,7 +66,8 @@ static class Config {}
6266

6367
@Autowired MixedReactivePersonRepostitory reactiveRepository;
6468
@Autowired ReactivePersonRepostitory reactivePersonRepostitory;
65-
@Autowired RxJavaPersonRepostitory rxJavaPersonRepostitory;
69+
@Autowired RxJava1PersonRepostitory rxJava1PersonRepostitory;
70+
@Autowired RxJava2PersonRepostitory rxJava2PersonRepostitory;
6671

6772
ReactivePerson dave, oliver, carter, boyd, stefan, leroi, alicia;
6873

@@ -95,9 +100,9 @@ public void reactiveStreamsQueryMethodsShouldWork() {
95100
}
96101

97102
@Test // DATAMONGO-1444
98-
public void simpleRxJavaMethodsShouldWork() {
103+
public void simpleRxJava1MethodsShouldWork() throws Exception {
99104

100-
rxJavaPersonRepostitory.exists(dave.getId()) //
105+
rxJava1PersonRepostitory.exists(dave.getId()) //
101106
.test() //
102107
.awaitTerminalEvent() //
103108
.assertValue(true) //
@@ -106,9 +111,9 @@ public void simpleRxJavaMethodsShouldWork() {
106111
}
107112

108113
@Test // DATAMONGO-1444
109-
public void existsWithSingleRxJavaIdMethodsShouldWork() {
114+
public void existsWithSingleRxJava1IdMethodsShouldWork() throws Exception {
110115

111-
rxJavaPersonRepostitory.exists(Single.just(dave.getId())) //
116+
rxJava1PersonRepostitory.exists(Single.just(dave.getId())) //
112117
.test() //
113118
.awaitTerminalEvent() //
114119
.assertValue(true) //
@@ -117,9 +122,9 @@ public void existsWithSingleRxJavaIdMethodsShouldWork() {
117122
}
118123

119124
@Test // DATAMONGO-1444
120-
public void singleRxJavaQueryMethodShouldWork() {
125+
public void singleRxJava1QueryMethodShouldWork() throws Exception {
121126

122-
rxJavaPersonRepostitory.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()) //
127+
rxJava1PersonRepostitory.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()) //
123128
.test() //
124129
.awaitTerminalEvent() //
125130
.assertValue(dave) //
@@ -128,9 +133,9 @@ public void singleRxJavaQueryMethodShouldWork() {
128133
}
129134

130135
@Test // DATAMONGO-1444
131-
public void singleProjectedRxJavaQueryMethodShouldWork() {
136+
public void singleProjectedRxJava1QueryMethodShouldWork() throws Exception {
132137

133-
List<ProjectedPerson> people = rxJavaPersonRepostitory.findProjectedByLastname(carter.getLastname()) //
138+
List<ProjectedPerson> people = rxJava1PersonRepostitory.findProjectedByLastname(carter.getLastname()) //
134139
.test() //
135140
.awaitTerminalEvent() //
136141
.assertValueCount(1) //
@@ -143,9 +148,9 @@ public void singleProjectedRxJavaQueryMethodShouldWork() {
143148
}
144149

145150
@Test // DATAMONGO-1444
146-
public void observableRxJavaQueryMethodShouldWork() {
151+
public void observableRxJava1QueryMethodShouldWork() throws Exception {
147152

148-
rxJavaPersonRepostitory.findByLastname(boyd.getLastname()) //
153+
rxJava1PersonRepostitory.findByLastname(boyd.getLastname()) //
149154
.test() //
150155
.awaitTerminalEvent() //
151156
.assertValue(boyd) //
@@ -154,6 +159,83 @@ public void observableRxJavaQueryMethodShouldWork() {
154159
.getOnNextEvents();
155160
}
156161

162+
@Test // DATAMONGO-1610
163+
public void simpleRxJava2MethodsShouldWork() throws Exception {
164+
165+
TestObserver<Boolean> testObserver = rxJava2PersonRepostitory.exists(dave.getId()).test();
166+
167+
testObserver.awaitTerminalEvent();
168+
testObserver.assertComplete();
169+
testObserver.assertNoErrors();
170+
testObserver.assertValue(true);
171+
}
172+
173+
@Test // DATAMONGO-1610
174+
public void existsWithSingleRxJava2IdMethodsShouldWork() throws Exception {
175+
176+
TestObserver<Boolean> testObserver = rxJava2PersonRepostitory.exists(io.reactivex.Single.just(dave.getId())).test();
177+
178+
testObserver.awaitTerminalEvent();
179+
testObserver.assertComplete();
180+
testObserver.assertNoErrors();
181+
testObserver.assertValue(true);
182+
}
183+
184+
@Test // DATAMONGO-1610
185+
public void flowableRxJava2QueryMethodShouldWork() throws Exception {
186+
187+
io.reactivex.subscribers.TestSubscriber<ReactivePerson> testSubscriber = rxJava2PersonRepostitory
188+
.findByFirstnameAndLastname(dave.getFirstname(), dave.getLastname()).test();
189+
190+
testSubscriber.awaitTerminalEvent();
191+
testSubscriber.assertComplete();
192+
testSubscriber.assertNoErrors();
193+
testSubscriber.assertValue(dave);
194+
}
195+
196+
@Test // DATAMONGO-1610
197+
public void singleProjectedRxJava2QueryMethodShouldWork() throws Exception {
198+
199+
TestObserver<ProjectedPerson> testObserver = rxJava2PersonRepostitory
200+
.findProjectedByLastname(Maybe.just(carter.getLastname())).test();
201+
202+
testObserver.awaitTerminalEvent();
203+
testObserver.assertComplete();
204+
testObserver.assertNoErrors();
205+
206+
testObserver.assertValue(actual -> {
207+
assertThat(actual.getFirstname(), is(equalTo(carter.getFirstname())));
208+
return true;
209+
});
210+
}
211+
212+
@Test // DATAMONGO-1610
213+
public void observableProjectedRxJava2QueryMethodShouldWork() throws Exception {
214+
215+
TestObserver<ProjectedPerson> testObserver = rxJava2PersonRepostitory
216+
.findProjectedByLastname(Single.just(carter.getLastname())).test();
217+
218+
testObserver.awaitTerminalEvent();
219+
testObserver.assertComplete();
220+
testObserver.assertNoErrors();
221+
222+
testObserver.assertValue(actual -> {
223+
assertThat(actual.getFirstname(), is(equalTo(carter.getFirstname())));
224+
return true;
225+
});
226+
}
227+
228+
@Test // DATAMONGO-1610
229+
public void maybeRxJava2QueryMethodShouldWork() throws Exception {
230+
231+
TestObserver<ReactivePerson> testObserver = rxJava2PersonRepostitory.findByLastname(boyd.getLastname()).test();
232+
233+
testObserver.awaitTerminalEvent();
234+
testObserver.assertComplete();
235+
testObserver.assertNoErrors();
236+
testObserver.assertValue(boyd);
237+
}
238+
157239
@Test // DATAMONGO-1444
158240
public void mixedRepositoryShouldWork() {
159241

@@ -203,7 +285,7 @@ interface ReactivePersonRepostitory extends ReactiveSortingRepository<ReactivePe
203285
}
204286

205287
@Repository
206-
interface RxJavaPersonRepostitory extends RxJava1SortingRepository<ReactivePerson, String> {
288+
interface RxJava1PersonRepostitory extends RxJava1SortingRepository<ReactivePerson, String> {
207289

208290
Observable<ReactivePerson> findByFirstnameAndLastname(String firstname, String lastname);
209291

@@ -212,6 +294,18 @@ interface RxJavaPersonRepostitory extends RxJava1SortingRepository<ReactivePerso
212294
Single<ProjectedPerson> findProjectedByLastname(String lastname);
213295
}
214296

297+
@Repository
298+
interface RxJava2PersonRepostitory extends RxJava2SortingRepository<ReactivePerson, String> {
299+
300+
Flowable<ReactivePerson> findByFirstnameAndLastname(String firstname, String lastname);
301+
302+
Maybe<ReactivePerson> findByLastname(String lastname);
303+
304+
io.reactivex.Single<ProjectedPerson> findProjectedByLastname(Maybe<String> lastname);
305+
306+
io.reactivex.Observable<ProjectedPerson> findProjectedByLastname(Single<String> lastname);
307+
}
308+
215309
@Repository
216310
interface MixedReactivePersonRepostitory extends ReactiveMongoRepository<ReactivePerson, String> {
217311

0 commit comments

Comments
 (0)