DATACMNS-1762 - Reintroduce calls to ReactiveWrapperConverters.supports(…) after decoupling from QueryExecutionConverters.

We now consider reactive wrapper types in all areas that previously relied on QueryExecutionConverters to handle reactive type information correctly. Specifically, we call supports(…) and perform type unwrapping to ensure to detect the correct return type.
This commit is contained in:
Mark Paluch
2020-09-25 16:25:35 +02:00
parent af9dd6110d
commit d10560f238
7 changed files with 31 additions and 11 deletions

View File

@@ -28,6 +28,7 @@ import java.util.concurrent.Future;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import reactor.core.publisher.Mono;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@@ -45,6 +46,7 @@ import org.springframework.data.repository.core.support.DefaultRepositoryMetadat
* @author Oliver Gierke
* @author Thomas Darimont
* @author Maciek Opała
* @author Mark Paluch
*/
class QueryMethodUnitTests {
@@ -208,7 +210,7 @@ class QueryMethodUnitTests {
* @see DATACMNS-940
*/
@Test
void detectsSinglValueWrapperWithinWrapper() throws Exception {
void detectsSingleValueWrapperWithinWrapper() throws Exception {
RepositoryMetadata repositoryMetadata = new DefaultRepositoryMetadata(SampleRepository.class);
Method method = SampleRepository.class.getMethod("returnsFutureOfOption");
@@ -234,6 +236,19 @@ class QueryMethodUnitTests {
assertThat(new QueryMethod(method, metadata, factory).isCollectionQuery()).isFalse();
}
@Test // DATACMNS-1762
void detectsReactiveSliceQuery() throws Exception {
RepositoryMetadata repositoryMetadata = new DefaultRepositoryMetadata(SampleRepository.class);
Method method = SampleRepository.class.getMethod("reactiveSlice");
QueryMethod queryMethod = new QueryMethod(method, repositoryMetadata, factory);
ReturnedType returnedType = queryMethod.getResultProcessor().getReturnedType();
assertThat(queryMethod.isSliceQuery()).isTrue();
assertThat(returnedType.getTypeToRead()).isEqualTo(User.class);
assertThat(returnedType.getDomainType()).isEqualTo(User.class);
}
interface SampleRepository extends Repository<User, Serializable> {
String pagingMethodWithInvalidReturnType(Pageable pageable);
@@ -278,6 +293,8 @@ class QueryMethodUnitTests {
Future<Seq<User>> returnsFutureOfSeq();
Future<Option<User>> returnsFutureOfOption();
Mono<Slice<User>> reactiveSlice();
}
class User {