diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java index a821dc580a..c36d8bb3af 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java @@ -24,9 +24,9 @@ import org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfigurati import org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration; import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration; import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration; +import org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration; -import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.util.ApplicationContextTestUtils; import org.springframework.context.ConfigurableApplicationContext; @@ -64,7 +64,7 @@ public class SpringApplicationHierarchyTests { @EnableAutoConfiguration(exclude = { ElasticsearchDataAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class, CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class, - Neo4jAutoConfiguration.class, RedisAutoConfiguration.class, + Neo4jDataAutoConfiguration.class, RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class }, excludeName = { "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration" }) public static class Child { @@ -76,7 +76,7 @@ public class SpringApplicationHierarchyTests { ElasticsearchDataAutoConfiguration.class, ElasticsearchRepositoriesAutoConfiguration.class, CassandraAutoConfiguration.class, CassandraDataAutoConfiguration.class, - Neo4jAutoConfiguration.class, RedisAutoConfiguration.class, + Neo4jDataAutoConfiguration.class, RedisAutoConfiguration.class, RedisRepositoriesAutoConfiguration.class }, excludeName = { "org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration" }) public static class Parent { diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java similarity index 97% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java index e22a30c366..dd99a552d6 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.neo4j; +package org.springframework.boot.autoconfigure.data.neo4j; import java.util.List; @@ -57,7 +57,7 @@ import org.springframework.data.neo4j.template.Neo4jTemplate; @ConditionalOnClass({ Neo4jSession.class, Neo4jOperations.class }) @ConditionalOnMissingBean(Neo4jOperations.class) @EnableConfigurationProperties(Neo4jProperties.class) -public class Neo4jAutoConfiguration { +public class Neo4jDataAutoConfiguration { @Configuration @Import(SessionFactoryProviderConfiguration.class) diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jProperties.java similarity index 98% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jProperties.java index aa23c6c394..f85b56b83a 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/neo4j/Neo4jProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jProperties.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.neo4j; +package org.springframework.boot.autoconfigure.data.neo4j; import java.net.URI; import java.net.URISyntaxException; diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfiguration.java index d9131d5059..263db1d51c 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfiguration.java @@ -23,7 +23,6 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.neo4j.repository.GraphRepository; @@ -59,7 +58,7 @@ import org.springframework.data.neo4j.repository.support.GraphRepositoryFactoryB Neo4jRepositoryConfigurationExtension.class }) @ConditionalOnProperty(prefix = "spring.data.neo4j.repositories", name = "enabled", havingValue = "true", matchIfMissing = true) @Import(Neo4jRepositoriesAutoConfigureRegistrar.class) -@AutoConfigureAfter(Neo4jAutoConfiguration.class) +@AutoConfigureAfter(Neo4jDataAutoConfiguration.class) public class Neo4jRepositoriesAutoConfiguration { } diff --git a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories index 715992b162..5bf76dac0f 100644 --- a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -31,6 +31,7 @@ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositor org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\ +org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\ @@ -70,7 +71,6 @@ org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\ -org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\ org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\ diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/MixedNeo4jRepositoriesAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/MixedNeo4jRepositoriesAutoConfigurationTests.java index f3cd0c4712..c5f0b32435 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/MixedNeo4jRepositoriesAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/MixedNeo4jRepositoriesAutoConfigurationTests.java @@ -29,9 +29,8 @@ import org.springframework.boot.autoconfigure.data.jpa.city.City; import org.springframework.boot.autoconfigure.data.jpa.city.CityRepository; import org.springframework.boot.autoconfigure.data.neo4j.country.Country; import org.springframework.boot.autoconfigure.data.neo4j.country.CountryRepository; +import org.springframework.boot.autoconfigure.data.neo4j.empty.EmptyMarker; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; -import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfigurationTests; import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; import org.springframework.boot.orm.jpa.EntityScan; import org.springframework.boot.test.util.EnvironmentTestUtils; @@ -113,7 +112,7 @@ public class MixedNeo4jRepositoriesAutoConfigurationTests { } @Configuration - @TestAutoConfigurationPackage(Neo4jAutoConfigurationTests.class) + @TestAutoConfigurationPackage(EmptyMarker.class) // Not this package or its parent @EnableNeo4jRepositories(basePackageClasses = Country.class) protected static class TestConfiguration { @@ -121,7 +120,7 @@ public class MixedNeo4jRepositoriesAutoConfigurationTests { } @Configuration - @TestAutoConfigurationPackage(Neo4jAutoConfigurationTests.class) + @TestAutoConfigurationPackage(EmptyMarker.class) @EnableNeo4jRepositories(basePackageClasses = Country.class) @EntityScan(basePackageClasses = City.class) @EnableJpaRepositories(basePackageClasses = CityRepository.class) @@ -130,7 +129,7 @@ public class MixedNeo4jRepositoriesAutoConfigurationTests { } @Configuration - @TestAutoConfigurationPackage(Neo4jAutoConfigurationTests.class) + @TestAutoConfigurationPackage(EmptyMarker.class) @EntityScan(basePackageClasses = City.class) @EnableJpaRepositories(basePackageClasses = CityRepository.class) protected static class JpaConfiguration { @@ -159,7 +158,8 @@ public class MixedNeo4jRepositoriesAutoConfigurationTests { List names = new ArrayList(); for (Class type : new Class[] { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, - JpaRepositoriesAutoConfiguration.class, Neo4jAutoConfiguration.class, + JpaRepositoriesAutoConfiguration.class, + Neo4jDataAutoConfiguration.class, Neo4jRepositoriesAutoConfiguration.class }) { names.add(type.getName()); } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java index 9aa3e52075..50fce64ee2 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jDataAutoConfigurationTests.java @@ -18,45 +18,107 @@ package org.springframework.boot.autoconfigure.data.neo4j; import org.assertj.core.api.Assertions; import org.junit.After; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExpectedException; +import org.neo4j.ogm.drivers.http.driver.HttpDriver; +import org.neo4j.ogm.session.Session; +import org.neo4j.ogm.session.SessionFactory; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.autoconfigure.data.neo4j.city.City; -import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; +import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import org.springframework.data.neo4j.mapping.Neo4jMappingContext; +import org.springframework.data.neo4j.template.Neo4jOperations; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; /** - * Tests for {@link Neo4jAutoConfiguration}. + * Tests for {@link Neo4jDataAutoConfiguration}. Tests can't use the embedded driver as we + * use lucene 4 and Neo4j still requires 3. * - * @author Josh Long - * @author Oliver Gierke + * @author Stephane Nicoll + * @author Michael Hunger * @author Vince Bickers */ public class Neo4jDataAutoConfigurationTests { - @Rule - public final ExpectedException thrown = ExpectedException.none(); - - private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + private AnnotationConfigApplicationContext context; @After public void close() { - this.context.close(); + if (this.context != null) { + this.context.close(); + } + } + + @Test + public void defaultConfiguration() { + load(null, "spring.data.neo4j.uri=http://localhost:8989"); + assertThat(this.context.getBeansOfType(Neo4jOperations.class)).hasSize(1); + assertThat(this.context.getBeansOfType(org.neo4j.ogm.config.Configuration.class)) + .hasSize(1); + assertThat(this.context.getBeansOfType(SessionFactory.class)).hasSize(1); + assertThat(this.context.getBeanDefinition("scopedTarget.getSession").getScope()) + .isEqualTo("singleton"); + } + + @Test + public void customScope() { + load(null, "spring.data.neo4j.uri=http://localhost:8989", + "spring.data.neo4j.session.scope=prototype"); + assertThat(this.context.getBeanDefinition("scopedTarget.getSession").getScope()) + .isEqualTo("prototype"); + } + + @Test + public void customNeo4jOperations() { + load(CustomNeo4jOperations.class); + assertThat(this.context.getBean(Neo4jOperations.class)) + .isSameAs(this.context.getBean("myNeo4jOperations")); + assertThat(this.context.getBeansOfType(org.neo4j.ogm.config.Configuration.class)) + .hasSize(0); + assertThat(this.context.getBeansOfType(SessionFactory.class)).hasSize(0); + assertThat(this.context.getBeansOfType(Session.class)).hasSize(0); + } + + @Test + public void customConfiguration() { + load(CustomConfiguration.class); + assertThat(this.context.getBean(org.neo4j.ogm.config.Configuration.class)) + .isSameAs(this.context.getBean("myConfiguration")); + assertThat(this.context.getBeansOfType(Neo4jOperations.class)).hasSize(1); + assertThat(this.context.getBeansOfType(org.neo4j.ogm.config.Configuration.class)) + .hasSize(1); + assertThat(this.context.getBeansOfType(SessionFactory.class)).hasSize(1); } @Test public void usesAutoConfigurationPackageToPickUpDomainTypes() { + this.context = new AnnotationConfigApplicationContext(); String cityPackage = City.class.getPackage().getName(); AutoConfigurationPackages.register(this.context, cityPackage); - this.context.register(Neo4jAutoConfiguration.class); + this.context.register(Neo4jDataAutoConfiguration.class); this.context.refresh(); assertDomainTypesDiscovered(this.context.getBean(Neo4jMappingContext.class), City.class); } + public void load(Class config, String... environment) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + EnvironmentTestUtils.addEnvironment(ctx, environment); + if (config != null) { + ctx.register(config); + } + ctx.register(PropertyPlaceholderAutoConfiguration.class, + Neo4jDataAutoConfiguration.class); + ctx.refresh(); + this.context = ctx; + } + private static void assertDomainTypesDiscovered(Neo4jMappingContext mappingContext, Class... types) { for (Class type : types) { @@ -64,4 +126,27 @@ public class Neo4jDataAutoConfigurationTests { } } + @Configuration + static class CustomNeo4jOperations { + + @Bean + public Neo4jOperations myNeo4jOperations() { + return mock(Neo4jOperations.class); + } + + } + + @Configuration + static class CustomConfiguration { + + @Bean + public org.neo4j.ogm.config.Configuration myConfiguration() { + org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration(); + configuration.driverConfiguration() + .setDriverClassName(HttpDriver.class.getName()); + return configuration; + } + + } + } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jPropertiesTests.java similarity index 99% rename from spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java rename to spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jPropertiesTests.java index d4e5edc65d..5e87643512 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jPropertiesTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jPropertiesTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.autoconfigure.neo4j; +package org.springframework.boot.autoconfigure.data.neo4j; import java.net.URL; import java.net.URLClassLoader; diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigurationTests.java index 80e46f0f64..878eb48373 100644 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigurationTests.java +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/Neo4jRepositoriesAutoConfigurationTests.java @@ -27,7 +27,6 @@ import org.springframework.boot.autoconfigure.data.alt.neo4j.CityNeo4jRepository import org.springframework.boot.autoconfigure.data.empty.EmptyDataPackage; import org.springframework.boot.autoconfigure.data.neo4j.city.City; import org.springframework.boot.autoconfigure.data.neo4j.city.CityRepository; -import org.springframework.boot.autoconfigure.neo4j.Neo4jAutoConfiguration; import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Configuration; @@ -57,32 +56,27 @@ public class Neo4jRepositoriesAutoConfigurationTests { @Test public void testDefaultRepositoryConfiguration() throws Exception { prepareApplicationContext(TestConfiguration.class); - assertThat(this.context.getBean(CityRepository.class)).isNotNull(); Neo4jMappingContext mappingContext = this.context .getBean(Neo4jMappingContext.class); assertThat(mappingContext.getPersistentEntity(City.class)).isNotNull(); - } @Test public void testNoRepositoryConfiguration() throws Exception { prepareApplicationContext(EmptyConfiguration.class); - assertThat(this.context.getBean(SessionFactory.class)).isNotNull(); } @Test public void doesNotTriggerDefaultRepositoryDetectionIfCustomized() { prepareApplicationContext(CustomizedConfiguration.class); - assertThat(this.context.getBean(CityNeo4jRepository.class)).isNotNull(); } @Test(expected = NoSuchBeanDefinitionException.class) public void autoConfigurationShouldNotKickInEvenIfManualConfigDidNotCreateAnyRepositories() { prepareApplicationContext(SortOfInvalidCustomConfiguration.class); - this.context.getBean(CityRepository.class); } @@ -91,7 +85,7 @@ public class Neo4jRepositoriesAutoConfigurationTests { EnvironmentTestUtils.addEnvironment(this.context, "spring.data.neo4j.uri=http://localhost:9797"); this.context.register(configurationClasses); - this.context.register(Neo4jAutoConfiguration.class, + this.context.register(Neo4jDataAutoConfiguration.class, Neo4jRepositoriesAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class); this.context.refresh(); diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/empty/EmptyMarker.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/empty/EmptyMarker.java new file mode 100644 index 0000000000..9e576fb51f --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/neo4j/empty/EmptyMarker.java @@ -0,0 +1,21 @@ +/* + * Copyright 2012-2016 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.autoconfigure.data.neo4j.empty; + +public class EmptyMarker { + +} diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfigurationTests.java deleted file mode 100644 index 990fe6f64a..0000000000 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/neo4j/Neo4jAutoConfigurationTests.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2012-2016 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.autoconfigure.neo4j; - -import org.junit.After; -import org.junit.Test; -import org.neo4j.ogm.drivers.http.driver.HttpDriver; -import org.neo4j.ogm.session.Session; -import org.neo4j.ogm.session.SessionFactory; - -import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.test.util.EnvironmentTestUtils; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.neo4j.template.Neo4jOperations; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; - -/** - * Tests for {@link Neo4jAutoConfiguration}. Tests can't use the embedded driver as we use - * lucene 4 and Neo4j still requires 3. - * - * @author Stephane Nicoll - * @author Michael Hunger - * @author Vince Bickers - */ -public class Neo4jAutoConfigurationTests { - - private AnnotationConfigApplicationContext context; - - @After - public void close() { - if (this.context != null) { - this.context.close(); - } - } - - @Test - public void defaultConfiguration() { - load(null, "spring.data.neo4j.uri=http://localhost:8989"); - assertThat(this.context.getBeansOfType(Neo4jOperations.class)).hasSize(1); - assertThat(this.context.getBeansOfType(org.neo4j.ogm.config.Configuration.class)) - .hasSize(1); - assertThat(this.context.getBeansOfType(SessionFactory.class)).hasSize(1); - assertThat(this.context.getBeanDefinition("scopedTarget.getSession").getScope()) - .isEqualTo("singleton"); - } - - @Test - public void customScope() { - load(null, "spring.data.neo4j.uri=http://localhost:8989", - "spring.data.neo4j.session.scope=prototype"); - assertThat(this.context.getBeanDefinition("scopedTarget.getSession").getScope()) - .isEqualTo("prototype"); - } - - @Test - public void customNeo4jOperations() { - load(CustomNeo4jOperations.class); - assertThat(this.context.getBean(Neo4jOperations.class)) - .isSameAs(this.context.getBean("myNeo4jOperations")); - assertThat(this.context.getBeansOfType(org.neo4j.ogm.config.Configuration.class)) - .hasSize(0); - assertThat(this.context.getBeansOfType(SessionFactory.class)).hasSize(0); - assertThat(this.context.getBeansOfType(Session.class)).hasSize(0); - } - - @Test - public void customConfiguration() { - load(CustomConfiguration.class); - assertThat(this.context.getBean(org.neo4j.ogm.config.Configuration.class)) - .isSameAs(this.context.getBean("myConfiguration")); - assertThat(this.context.getBeansOfType(Neo4jOperations.class)).hasSize(1); - assertThat(this.context.getBeansOfType(org.neo4j.ogm.config.Configuration.class)) - .hasSize(1); - assertThat(this.context.getBeansOfType(SessionFactory.class)).hasSize(1); - } - - public void load(Class config, String... environment) { - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); - EnvironmentTestUtils.addEnvironment(ctx, environment); - if (config != null) { - ctx.register(config); - } - ctx.register(PropertyPlaceholderAutoConfiguration.class, - Neo4jAutoConfiguration.class); - ctx.refresh(); - this.context = ctx; - } - - @Configuration - static class CustomNeo4jOperations { - - @Bean - public Neo4jOperations myNeo4jOperations() { - return mock(Neo4jOperations.class); - } - - } - - @Configuration - static class CustomConfiguration { - - @Bean - public org.neo4j.ogm.config.Configuration myConfiguration() { - org.neo4j.ogm.config.Configuration configuration = new org.neo4j.ogm.config.Configuration(); - configuration.driverConfiguration() - .setDriverClassName(HttpDriver.class.getName()); - return configuration; - } - - } - -}