DATACMNS-836 - Cleanups.

- Rename RxJava...Repository to RxJava1...Repository
- Use Completable and Observable instead of Single for results without values/optional values
- Remove reactive paging for now as it does not really fit reactive data streaming
- Expose ReactiveWrappers.isAvailable(ReactiveLibrary) method to query library availability
This commit is contained in:
Mark Paluch
2016-11-07 10:09:51 +01:00
committed by Oliver Gierke
parent 474c9981da
commit dd2fe0a34d
9 changed files with 119 additions and 65 deletions

View File

@@ -30,12 +30,12 @@ import org.reactivestreams.Publisher;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.data.repository.reactive.ReactivePagingAndSortingRepository;
import org.springframework.data.repository.reactive.RxJavaCrudRepository;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
import org.springframework.data.repository.reactive.RxJava1CrudRepository;
import org.springframework.data.repository.util.QueryExecutionConverters;
/**
* Unit tests for {@link ConvertingMethodParameterRepositoryInformation}.
* Unit tests for {@link ReactiveRepositoryInformation}.
*
* @author Mark Paluch
*/
@@ -47,8 +47,8 @@ public class ReactiveRepositoryInformationUnitTests {
@Test
public void discoversMethodWithoutComparingReturnType() throws Exception {
Method method = RxJavaInterfaceWithGenerics.class.getMethod("deleteAll");
RepositoryMetadata metadata = new DefaultRepositoryMetadata(RxJavaInterfaceWithGenerics.class);
Method method = RxJava1InterfaceWithGenerics.class.getMethod("deleteAll");
RepositoryMetadata metadata = new DefaultRepositoryMetadata(RxJava1InterfaceWithGenerics.class);
DefaultRepositoryInformation information = new DefaultRepositoryInformation(metadata, REPOSITORY, null);
Method reference = information.getTargetClassMethod(method);
@@ -62,8 +62,8 @@ public class ReactiveRepositoryInformationUnitTests {
DefaultConversionService conversionService = new DefaultConversionService();
QueryExecutionConverters.registerConvertersIn(conversionService);
Method method = RxJavaInterfaceWithGenerics.class.getMethod("save", Observable.class);
RepositoryMetadata metadata = new DefaultRepositoryMetadata(RxJavaInterfaceWithGenerics.class);
Method method = RxJava1InterfaceWithGenerics.class.getMethod("save", Observable.class);
RepositoryMetadata metadata = new DefaultRepositoryMetadata(RxJava1InterfaceWithGenerics.class);
DefaultRepositoryInformation information = new ReactiveRepositoryInformation(metadata, REPOSITORY, null,
conversionService);
@@ -79,7 +79,7 @@ public class ReactiveRepositoryInformationUnitTests {
DefaultConversionService conversionService = new DefaultConversionService();
QueryExecutionConverters.registerConvertersIn(conversionService);
Method method = ReactivePagingAndSortingRepository.class.getMethod("save", Publisher.class);
Method method = ReactiveSortingRepository.class.getMethod("save", Publisher.class);
RepositoryMetadata metadata = new DefaultRepositoryMetadata(ReactiveJavaInterfaceWithGenerics.class);
DefaultRepositoryInformation information = new ReactiveRepositoryInformation(metadata, REPOSITORY, null,
conversionService);
@@ -124,7 +124,8 @@ public class ReactiveRepositoryInformationUnitTests {
assertThat(reference.getParameterTypes()[0], is(equalTo(Object.class)));
}
interface RxJavaInterfaceWithGenerics extends RxJavaCrudRepository<User, String> {}
interface RxJava1InterfaceWithGenerics extends RxJava1CrudRepository<User, String>
{}
interface ReactiveJavaInterfaceWithGenerics extends ReactiveCrudRepository<User, String> {}

View File

@@ -15,7 +15,10 @@
*/
package org.springframework.data.repository.core.support;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
import java.io.Serializable;
@@ -28,7 +31,7 @@ import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.reactive.ReactivePagingAndSortingRepository;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
import org.springframework.data.repository.util.QueryExecutionConverters;
import reactor.core.publisher.Mono;
@@ -46,7 +49,7 @@ public class ReactiveWrapperRepositoryFactorySupportUnitTests {
DummyRepositoryFactory factory;
@Mock ReactivePagingAndSortingRepository<Object, Serializable> backingRepo;
@Mock ReactiveSortingRepository<Object, Serializable> backingRepo;
@Mock ObjectRepositoryCustom customImplementation;
@Before

View File

@@ -15,13 +15,12 @@
*/
package org.springframework.data.repository.util;
import static org.assertj.core.api.AssertionsForClassTypes.*;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import org.junit.Test;
import org.reactivestreams.Publisher;
import io.reactivex.Flowable;
import org.springframework.data.repository.util.ReactiveWrapperConverters;
import io.reactivex.Maybe;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import rx.Completable;
@@ -202,6 +201,27 @@ public class ReactiveWrapperConvertersUnitTests {
assertThat(ReactiveWrapperConverters.toWrapper(foo, Flux.class)).isInstanceOf(Flux.class);
}
/**
* @see DATACMNS-836
*/
@Test
public void toWrapperShouldConvertRxJava2ObservableToSingle() {
io.reactivex.Observable<String> foo = io.reactivex.Observable.just("foo");
assertThat(ReactiveWrapperConverters.toWrapper(foo, io.reactivex.Single.class))
.isInstanceOf(io.reactivex.Single.class);
}
/**
* @see DATACMNS-836
*/
@Test
public void toWrapperShouldConvertRxJava2ObservableToMaybe() {
io.reactivex.Observable<String> foo = io.reactivex.Observable.empty();
assertThat(ReactiveWrapperConverters.toWrapper(foo, Maybe.class)).isInstanceOf(Maybe.class);
}
/**
* @see DATACMNS-836
*/