From 9e1238e286c402a5faa3b2503f74a47cb8dff3da Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 15 Feb 2017 17:22:52 +0000 Subject: [PATCH] Consider resource loader path when checking Groovy template availability Closes gh-8304 --- .../GroovyTemplateAvailabilityProvider.java | 7 +- ...oovyTemplateAvailabilityProviderTests.java | 75 +++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java index 4eda0d8ffb8..f2ce6b6621f 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * 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. @@ -38,11 +38,14 @@ public class GroovyTemplateAvailabilityProvider implements TemplateAvailabilityP if (ClassUtils.isPresent("groovy.text.TemplateEngine", classLoader)) { PropertyResolver resolver = new RelaxedPropertyResolver(environment, "spring.groovy.template."); + String loaderPath = resolver.getProperty("resource-loader-path", + GroovyTemplateProperties.DEFAULT_RESOURCE_LOADER_PATH); String prefix = resolver.getProperty("prefix", GroovyTemplateProperties.DEFAULT_PREFIX); String suffix = resolver.getProperty("suffix", GroovyTemplateProperties.DEFAULT_SUFFIX); - return resourceLoader.getResource(prefix + view + suffix).exists(); + return resourceLoader.getResource(loaderPath + prefix + view + suffix) + .exists(); } return false; } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java new file mode 100644 index 00000000000..9ab21fa8186 --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAvailabilityProviderTests.java @@ -0,0 +1,75 @@ +/* + * 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.autoconfigure.groovy.template; + +import org.junit.Test; + +import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.ResourceLoader; +import org.springframework.mock.env.MockEnvironment; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link GroovyTemplateAvailabilityProvider}. + * + * @author Andy Wilkinson + */ +public class GroovyTemplateAvailabilityProviderTests { + + private final TemplateAvailabilityProvider provider = new GroovyTemplateAvailabilityProvider(); + + private final ResourceLoader resourceLoader = new DefaultResourceLoader(); + + private final MockEnvironment environment = new MockEnvironment(); + + @Test + public void availabilityOfTemplateInDefaultLocation() { + assertThat(this.provider.isTemplateAvailable("home", this.environment, + getClass().getClassLoader(), this.resourceLoader)).isTrue(); + } + + @Test + public void availabilityOfTemplateThatDoesNotExist() { + assertThat(this.provider.isTemplateAvailable("whatever", this.environment, + getClass().getClassLoader(), this.resourceLoader)).isFalse(); + } + + @Test + public void availabilityOfTemplateWithCustomLoaderPath() { + this.environment.setProperty("spring.groovy.template.resource-loader-path", + "classpath:/custom-templates/"); + assertThat(this.provider.isTemplateAvailable("custom", this.environment, + getClass().getClassLoader(), this.resourceLoader)).isTrue(); + } + + @Test + public void availabilityOfTemplateWithCustomPrefix() { + this.environment.setProperty("spring.groovy.template.prefix", "prefix/"); + assertThat(this.provider.isTemplateAvailable("prefixed", this.environment, + getClass().getClassLoader(), this.resourceLoader)).isTrue(); + } + + @Test + public void availabilityOfTemplateWithCustomSuffix() { + this.environment.setProperty("spring.groovy.template.suffix", ".groovytemplate"); + assertThat(this.provider.isTemplateAvailable("suffixed", this.environment, + getClass().getClassLoader(), this.resourceLoader)).isTrue(); + } + +}