|
18 | 18 | import static org.assertj.core.api.Assertions.*;
|
19 | 19 | import static org.mockito.Mockito.*;
|
20 | 20 |
|
| 21 | +import io.r2dbc.spi.test.MockColumnMetadata; |
| 22 | +import io.r2dbc.spi.test.MockResult; |
| 23 | +import io.r2dbc.spi.test.MockRow; |
| 24 | +import io.r2dbc.spi.test.MockRowMetadata; |
| 25 | +import reactor.core.publisher.Flux; |
| 26 | +import reactor.test.StepVerifier; |
| 27 | + |
21 | 28 | import java.lang.reflect.Method;
|
| 29 | +import java.time.LocalDate; |
22 | 30 |
|
23 | 31 | import org.junit.jupiter.api.BeforeEach;
|
24 | 32 | import org.junit.jupiter.api.Test;
|
|
38 | 46 | import org.springframework.data.r2dbc.dialect.PostgresDialect;
|
39 | 47 | import org.springframework.data.r2dbc.mapping.R2dbcMappingContext;
|
40 | 48 | import org.springframework.data.r2dbc.repository.Query;
|
| 49 | +import org.springframework.data.r2dbc.testing.StatementRecorder; |
41 | 50 | import org.springframework.data.relational.core.mapping.RelationalMappingContext;
|
42 | 51 | import org.springframework.data.repository.Repository;
|
43 | 52 | import org.springframework.data.repository.core.RepositoryMetadata;
|
@@ -275,6 +284,29 @@ void usesDtoTypeForDtoResultMapping() {
|
275 | 284 | assertThat(query.resolveResultType(query.getQueryMethod().getResultProcessor())).isEqualTo(PersonDto.class);
|
276 | 285 | }
|
277 | 286 |
|
| 287 | + @Test // gh-475 |
| 288 | + void selectsSimpleType() { |
| 289 | + |
| 290 | + MockRowMetadata metadata = MockRowMetadata.builder() |
| 291 | + .columnMetadata(MockColumnMetadata.builder().name("date").build()).build(); |
| 292 | + LocalDate value = LocalDate.now(); |
| 293 | + MockResult result = MockResult.builder().rowMetadata(metadata) |
| 294 | + .row(MockRow.builder().identified(0, LocalDate.class, value).build()).build(); |
| 295 | + |
| 296 | + StatementRecorder recorder = StatementRecorder.newInstance(); |
| 297 | + recorder.addStubbing(s -> s.equals("SELECT MAX(DATE)"), result); |
| 298 | + |
| 299 | + databaseClient = DatabaseClient.builder() // |
| 300 | + .connectionFactory(recorder) // |
| 301 | + .bindMarkers(PostgresDialect.INSTANCE.getBindMarkersFactory()).build(); |
| 302 | + |
| 303 | + StringBasedR2dbcQuery query = getQueryMethod("findAllLocalDates"); |
| 304 | + |
| 305 | + Flux<Object> flux = (Flux) query.execute(new Object[0]); |
| 306 | + |
| 307 | + flux.as(StepVerifier::create).expectNext(value).verifyComplete(); |
| 308 | + } |
| 309 | + |
278 | 310 | private StringBasedR2dbcQuery getQueryMethod(String name, Class<?>... args) {
|
279 | 311 |
|
280 | 312 | Method method = ReflectionUtils.findMethod(SampleRepository.class, name, args);
|
@@ -329,6 +361,9 @@ private interface SampleRepository extends Repository<Person, String> {
|
329 | 361 |
|
330 | 362 | @Query("SELECT * FROM person")
|
331 | 363 | PersonProjection findAsInterfaceProjection();
|
| 364 | + |
| 365 | + @Query("SELECT MAX(DATE)") |
| 366 | + Flux<LocalDate> findAllLocalDates(); |
332 | 367 | }
|
333 | 368 |
|
334 | 369 | static class PersonDto {
|
|
0 commit comments