From ce6372c46fab8f6c8ccc903770fda3894225ae68 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 14 Feb 2017 11:21:51 +0100 Subject: [PATCH] Add support of reactive repositories with `@DataMongoTest` Closes gh-8280 --- ...iveMongoRepositoriesAutoConfiguration.java | 4 +- spring-boot-test-autoconfigure/pom.xml | 15 +++++ .../main/resources/META-INF/spring.factories | 3 + ...DataMongoTestReactiveIntegrationTests.java | 58 +++++++++++++++++++ .../data/mongo/ExampleReactiveRepository.java | 29 ++++++++++ 5 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/DataMongoTestReactiveIntegrationTests.java create mode 100644 spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/ExampleReactiveRepository.java diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/ReactiveMongoRepositoriesAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/ReactiveMongoRepositoriesAutoConfiguration.java index 5b97327c85..7f90663fcb 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/ReactiveMongoRepositoriesAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/mongo/ReactiveMongoRepositoriesAutoConfiguration.java @@ -28,7 +28,7 @@ import org.springframework.context.annotation.Import; import org.springframework.data.mongodb.repository.ReactiveMongoRepository; import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories; import org.springframework.data.mongodb.repository.config.ReactiveMongoRepositoryConfigurationExtension; -import org.springframework.data.mongodb.repository.support.MongoRepositoryFactoryBean; +import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactoryBean; /** * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Mongo Reactive @@ -49,7 +49,7 @@ import org.springframework.data.mongodb.repository.support.MongoRepositoryFactor */ @Configuration @ConditionalOnClass({ MongoClient.class, ReactiveMongoRepository.class }) -@ConditionalOnMissingBean({ MongoRepositoryFactoryBean.class, +@ConditionalOnMissingBean({ ReactiveMongoRepositoryFactoryBean.class, ReactiveMongoRepositoryConfigurationExtension.class }) @ConditionalOnProperty(prefix = "spring.data.mongodb.reactive-repositories", name = "enabled", havingValue = "true", matchIfMissing = true) @Import(ReactiveMongoRepositoriesAutoConfigureRegistrar.class) diff --git a/spring-boot-test-autoconfigure/pom.xml b/spring-boot-test-autoconfigure/pom.xml index 7a49c5b7d5..8e1704a5cf 100644 --- a/spring-boot-test-autoconfigure/pom.xml +++ b/spring-boot-test-autoconfigure/pom.xml @@ -142,6 +142,11 @@ h2 test + + io.projectreactor + reactor-core + test + org.aspectj aspectjrt @@ -157,6 +162,16 @@ hsqldb test + + org.mongodb + mongodb-driver-async + true + + + org.mongodb + mongodb-driver-reactivestreams + true + org.skyscreamer jsonassert diff --git a/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories index 6fe2e8ed01..8580a29555 100644 --- a/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories @@ -17,7 +17,10 @@ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo=\ org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\ +org.springframework.boot.autoconfigure.data.mongo.ReactiveMongoDataAutoConfiguration,\ +org.springframework.boot.autoconfigure.data.mongo.ReactiveMongoRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ +org.springframework.boot.autoconfigure.mongo.ReactiveMongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration # AutoConfigureJdbc auto-configuration imports diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/DataMongoTestReactiveIntegrationTests.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/DataMongoTestReactiveIntegrationTests.java new file mode 100644 index 0000000000..29b9076b71 --- /dev/null +++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/DataMongoTestReactiveIntegrationTests.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.test.autoconfigure.data.mongo; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.ReactiveMongoTemplate; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Sample tests for {@link DataMongoTest} using reactive repositories. + * + * @author Stephane Nicoll + */ +@RunWith(SpringRunner.class) +@DataMongoTest +public class DataMongoTestReactiveIntegrationTests { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Autowired + private ReactiveMongoTemplate mongoTemplate; + + @Autowired + private ExampleReactiveRepository exampleRepository; + + @Test + public void testRepository() { + ExampleDocument exampleDocument = new ExampleDocument(); + exampleDocument.setText("Look, new @DataMongoTest!"); + exampleDocument = this.exampleRepository.save(exampleDocument).block(); + assertThat(exampleDocument.getId()).isNotNull(); + assertThat(this.mongoTemplate.collectionExists("exampleDocuments").block()) + .isTrue(); + } + +} diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/ExampleReactiveRepository.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/ExampleReactiveRepository.java new file mode 100644 index 0000000000..edd2698c98 --- /dev/null +++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/data/mongo/ExampleReactiveRepository.java @@ -0,0 +1,29 @@ +/* + * Copyright 2012-2017 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.test.autoconfigure.data.mongo; + +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; + +/** + * Example reactive repository used with {@link DataMongoTest} tests. + * + * @author Stephane Nicoll + */ +public interface ExampleReactiveRepository + extends ReactiveMongoRepository { + +}