Drop support for RxJava 1.

Closes #2469
This commit is contained in:
Mark Paluch
2021-09-27 11:30:30 +02:00
committed by Jens Schauder
parent 5a59e43745
commit 20a1220cd1
12 changed files with 30 additions and 220 deletions

View File

@@ -18,14 +18,14 @@ package org.springframework.data.repository.core.support;
import static java.util.Arrays.*;
import static org.assertj.core.api.Assertions.*;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Single;
import io.vavr.control.Option;
import io.vavr.control.Try;
import lombok.Value;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import rx.Completable;
import rx.Observable;
import rx.Single;
import java.lang.reflect.Method;
import java.math.BigDecimal;
@@ -41,6 +41,7 @@ import java.util.stream.Collectors;
import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Publisher;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.data.repository.Repository;
import org.springframework.data.util.Streamable;
@@ -120,7 +121,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Publisher.class);
Mono<Entity> mono = Mono.from((Publisher<Entity>) result);
assertThat(mono.block()).isEqualTo(entity.toBlocking().value());
assertThat(mono.block()).isEqualTo(entity.blockingGet());
}
@Test // DATACMNS-836
@@ -133,7 +134,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Mono.class);
Mono<Entity> mono = (Mono<Entity>) result;
assertThat(mono.block()).isEqualTo(entity.toBlocking().value());
assertThat(mono.block()).isEqualTo(entity.blockingGet());
}
@Test // DATACMNS-836
@@ -146,7 +147,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Flux.class);
Flux<Entity> flux = (Flux<Entity>) result;
assertThat(flux.next().block()).isEqualTo(entity.toBlocking().value());
assertThat(flux.next().block()).isEqualTo(entity.blockingGet());
}
@Test // DATACMNS-836
@@ -159,7 +160,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Publisher.class);
Mono<Entity> mono = Mono.from((Publisher<Entity>) result);
assertThat(mono.block()).isEqualTo(entity.toBlocking().first());
assertThat(mono.block()).isEqualTo(entity.blockingFirst());
}
@Test // DATACMNS-836
@@ -172,7 +173,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Mono.class);
Mono<Entity> mono = (Mono<Entity>) result;
assertThat(mono.block()).isEqualTo(entity.toBlocking().first());
assertThat(mono.block()).isEqualTo(entity.blockingFirst());
}
@Test // DATACMNS-836
@@ -185,7 +186,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Flux.class);
Flux<Entity> flux = (Flux<Entity>) result;
assertThat(flux.next().block()).isEqualTo(entity.toBlocking().first());
assertThat(flux.next().block()).isEqualTo(entity.blockingFirst());
}
@Test // DATACMNS-836
@@ -198,7 +199,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Single.class);
Single<Entity> single = (Single<Entity>) result;
assertThat(single.toBlocking().value()).isEqualTo(entity.toBlocking().first());
assertThat(single.blockingGet()).isEqualTo(entity.blockingFirst());
}
@Test // DATACMNS-836
@@ -211,7 +212,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Observable.class);
Observable<Entity> observable = (Observable<Entity>) result;
assertThat(observable.toBlocking().first()).isEqualTo(entity.toBlocking().value());
assertThat(observable.blockingFirst()).isEqualTo(entity.blockingGet());
}
@Test // DATACMNS-836
@@ -224,7 +225,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Single.class);
Single<Entity> single = (Single<Entity>) result;
assertThat(single.toBlocking().value()).isEqualTo(entity.block());
assertThat(single.blockingGet()).isEqualTo(entity.block());
}
@Test // DATACMNS-836
@@ -237,7 +238,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Completable.class);
Completable completable = (Completable) result;
assertThat(completable.get()).isNull();
completable.blockingAwait();
}
@Test // DATACMNS-836
@@ -250,7 +251,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Completable.class);
Completable completable = (Completable) result;
assertThat(completable.get()).isInstanceOf(InvalidDataAccessApiUsageException.class);
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(completable::blockingAwait);
}
@Test // DATACMNS-836
@@ -290,7 +291,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Observable.class);
Observable<Entity> observable = (Observable<Entity>) result;
assertThat(observable.toBlocking().first()).isEqualTo(entity.block());
assertThat(observable.blockingFirst()).isEqualTo(entity.block());
}
@Test // DATACMNS-836
@@ -303,7 +304,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Single.class);
Single<Entity> single = (Single<Entity>) result;
assertThat(single.toBlocking().value()).isEqualTo(entity.next().block());
assertThat(single.blockingGet()).isEqualTo(entity.next().block());
}
@Test // DATACMNS-836
@@ -316,7 +317,7 @@ class QueryExecutionResultHandlerUnitTests {
assertThat(result).isInstanceOf(Observable.class);
Observable<Entity> observable = (Observable<Entity>) result;
assertThat(observable.toBlocking().first()).isEqualTo(entity.next().block());
assertThat(observable.blockingFirst()).isEqualTo(entity.next().block());
}
@Test // DATACMNS-836

View File

@@ -17,10 +17,8 @@ package org.springframework.data.repository.core.support;
import static org.assertj.core.api.Assertions.*;
import io.reactivex.Completable;
import io.reactivex.Flowable;
import reactor.core.publisher.Flux;
import rx.Observable;
import java.lang.reflect.Method;
@@ -29,7 +27,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.reactivestreams.Publisher;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.core.RepositoryMetadata;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
@@ -47,26 +44,6 @@ class ReactiveRepositoryInformationUnitTests {
static final Class<ReactiveJavaInterfaceWithGenerics> BASE_CLASS = ReactiveJavaInterfaceWithGenerics.class;
@Test // DATACMNS-836
void discoversRxJava1MethodWithoutComparingReturnType() throws Exception {
Method reference = extractTargetMethodFromRepository(RxJava1InterfaceWithGenerics.class, "deleteAll");
assertThat(reference.getDeclaringClass()).isEqualTo(ReactiveCrudRepository.class);
assertThat(reference.getName()).isEqualTo("deleteAll");
}
@Test // DATACMNS-836
void discoversRxJava1MethodWithConvertibleArguments() throws Exception {
Method reference = extractTargetMethodFromRepository(RxJava1InterfaceWithGenerics.class, "saveAll",
Observable.class);
assertThat(reference.getDeclaringClass()).isEqualTo(ReactiveCrudRepository.class);
assertThat(reference.getName()).isEqualTo("saveAll");
assertThat(reference.getParameterTypes()[0]).isEqualTo(Publisher.class);
}
@Test // DATACMNS-988
void discoversRxJava2MethodWithoutComparingReturnType() throws Exception {
@@ -136,13 +113,6 @@ class ReactiveRepositoryInformationUnitTests {
return composition.findMethod(repositoryType.getMethod(methodName, args)).get();
}
interface RxJava1InterfaceWithGenerics extends Repository<User, String> {
Observable<User> saveAll(Observable<User> entities);
Completable deleteAll();
}
interface RxJava2InterfaceWithGenerics extends RxJava2CrudRepository<User, String> {}
interface ReactiveJavaInterfaceWithGenerics extends ReactiveCrudRepository<User, String> {}

View File

@@ -15,13 +15,12 @@
*/
package org.springframework.data.repository.core.support;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import io.reactivex.Completable;
import io.reactivex.Maybe;
import io.reactivex.rxjava3.core.Single;
import reactor.core.publisher.Mono;
import rx.Single;
import java.io.Serializable;
@@ -32,7 +31,6 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.reactivestreams.Publisher;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.reactive.ReactiveSortingRepository;
@@ -67,32 +65,6 @@ class ReactiveWrapperRepositoryFactorySupportUnitTests {
verify(backingRepo, times(0)).findById(1);
}
@Test // DATACMNS-836, DATACMNS-1154
void callsRxJava1MethodOnBaseImplementationWithExactArguments() {
Serializable id = 1L;
when(backingRepo.existsById(id)).thenReturn(Mono.just(true));
RxJava1ConvertingRepository repository = factory.getRepository(RxJava1ConvertingRepository.class);
repository.existsById(id);
repository.existsById((Long) id);
verify(backingRepo, times(2)).existsById(id);
}
@Test // DATACMNS-836, DATACMNS-1063, DATACMNS-1154
@SuppressWarnings("unchecked")
void callsRxJava1MethodOnBaseImplementationWithTypeConversion() {
when(backingRepo.existsById(any(Publisher.class))).thenReturn(Mono.just(true));
Single<Long> ids = Single.just(1L);
RxJava1ConvertingRepository repository = factory.getRepository(RxJava1ConvertingRepository.class);
repository.existsById(ids);
verify(backingRepo, times(1)).existsById(any(Publisher.class));
}
@Test // DATACMNS-988, DATACMNS-1154
void callsRxJava2MethodOnBaseImplementationWithExactArguments() {
@@ -118,14 +90,6 @@ class ReactiveWrapperRepositoryFactorySupportUnitTests {
verify(backingRepo, times(1)).deleteById(id);
}
interface RxJava1ConvertingRepository extends Repository<Object, Long> {
Single<Boolean> existsById(Single<Long> id);
Single<Boolean> existsById(Serializable id);
Single<Boolean> existsById(Long id);
}
interface RxJava2ConvertingRepository extends Repository<Object, Long> {

View File

@@ -17,7 +17,7 @@ package org.springframework.data.repository.query;
import static org.assertj.core.api.Assertions.*;
import rx.Single;
import io.reactivex.rxjava3.core.Single;
import java.lang.reflect.Method;
import java.util.Optional;

View File

@@ -19,12 +19,12 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import io.reactivex.Flowable;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Single;
import lombok.Getter;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import rx.Observable;
import rx.Single;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -241,7 +241,7 @@ class ResultProcessorUnitTests {
assertThat(result).isInstanceOf(Single.class);
Object content = ((Single<Object>) result).toBlocking().value();
Object content = ((Single<Object>) result).blockingGet();
assertThat(content).isInstanceOf(Sample.class);
}
@@ -288,7 +288,7 @@ class ResultProcessorUnitTests {
assertThat(result).isInstanceOf(Observable.class);
List<Object> content = ((Observable<Object>) result).toList().toBlocking().single();
List<Object> content = ((Observable<Object>) result).toList().blockingGet();
assertThat(content).isNotEmpty();
assertThat(content.get(0)).isInstanceOf(SampleProjection.class);

View File

@@ -18,15 +18,15 @@ package org.springframework.data.repository.util;
import static org.assertj.core.api.Assertions.*;
import static org.springframework.data.repository.util.QueryExecutionConverters.*;
import io.reactivex.rxjava3.core.Completable;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.Single;
import io.vavr.collection.Seq;
import io.vavr.control.Try;
import io.vavr.control.Try.Failure;
import lombok.Value;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import rx.Completable;
import rx.Observable;
import rx.Single;
import scala.Option;
import java.io.IOException;

View File

@@ -26,9 +26,6 @@ import kotlinx.coroutines.reactive.ReactiveFlowKt;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import rx.Completable;
import rx.Observable;
import rx.Single;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Publisher;
@@ -50,14 +47,6 @@ class ReactiveWrapperConvertersUnitTests {
assertThat(ReactiveWrapperConverters.supports(Object.class)).isFalse();
}
@Test // DATACMNS-836
void shouldSupportRxJava1Types() {
assertThat(ReactiveWrapperConverters.supports(Single.class)).isTrue();
assertThat(ReactiveWrapperConverters.supports(Observable.class)).isTrue();
assertThat(ReactiveWrapperConverters.supports(Completable.class)).isTrue();
}
@Test // DATACMNS-836
void shouldSupportRxJava2Types() {
@@ -99,13 +88,6 @@ class ReactiveWrapperConvertersUnitTests {
assertThat(ReactiveWrapperConverters.toWrapper(foo, Mono.class)).isSameAs(foo);
}
@Test // DATACMNS-836
void toWrapperShouldConvertMonoToRxJava1Single() {
Mono<String> foo = Mono.just("foo");
assertThat(ReactiveWrapperConverters.toWrapper(foo, Single.class)).isInstanceOf(Single.class);
}
@Test // DATACMNS-836
void toWrapperShouldConvertMonoToRxJava2Single() {
@@ -245,22 +227,6 @@ class ReactiveWrapperConvertersUnitTests {
assertThat(map.next().block()).isEqualTo(1L);
}
@Test // DATACMNS-836
void shouldMapRxJava1Single() {
Single<String> foo = Single.just("foo");
Single<Long> map = ReactiveWrapperConverters.map(foo, source -> 1L);
assertThat(map.toBlocking().value()).isEqualTo(1L);
}
@Test // DATACMNS-836
void shouldMapRxJava1Observable() {
Observable<String> foo = Observable.just("foo");
Observable<Long> map = ReactiveWrapperConverters.map(foo, source -> 1L);
assertThat(map.toBlocking().first()).isEqualTo(1L);
}
@Test // DATACMNS-836
void shouldMapRxJava2Single() {

View File

@@ -21,8 +21,6 @@ import io.reactivex.Completable;
import io.reactivex.Flowable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import rx.Observable;
import rx.Single;
import java.util.concurrent.CompletableFuture;
@@ -43,10 +41,8 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isNoValueType(Mono.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Flux.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Single.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Completable.class)).isTrue();
assertThat(ReactiveWrappers.isNoValueType(CompletableFuture.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Observable.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(Publisher.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.Single.class)).isFalse();
assertThat(ReactiveWrappers.isNoValueType(io.reactivex.Maybe.class)).isFalse();
@@ -65,10 +61,8 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isSingleValueType(Mono.class)).isTrue();
assertThat(ReactiveWrappers.isSingleValueType(Flux.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Single.class)).isTrue();
assertThat(ReactiveWrappers.isSingleValueType(Completable.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(CompletableFuture.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Observable.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Publisher.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.Single.class)).isTrue();
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.Completable.class)).isFalse();
@@ -89,10 +83,8 @@ class ReactiveWrappersUnitTests {
assertThat(ReactiveWrappers.isMultiValueType(Mono.class)).isFalse();
assertThat(ReactiveWrappers.isMultiValueType(Flux.class)).isTrue();
assertThat(ReactiveWrappers.isMultiValueType(Single.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(Completable.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(CompletableFuture.class)).isFalse();
assertThat(ReactiveWrappers.isMultiValueType(Observable.class)).isTrue();
assertThat(ReactiveWrappers.isMultiValueType(Publisher.class)).isTrue();
assertThat(ReactiveWrappers.isMultiValueType(io.reactivex.Single.class)).isFalse();
assertThat(ReactiveWrappers.isSingleValueType(io.reactivex.Completable.class)).isFalse();