Skip to content

Commit 2b75ea5

Browse files
committed
Improve testing of spring.mustache.* properties
Closes gh-30274
1 parent 9824d40 commit 2b75ea5

File tree

1 file changed

+135
-2
lines changed

1 file changed

+135
-2
lines changed

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mustache/MustacheAutoConfigurationTests.java

Lines changed: 135 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,13 @@
1616

1717
package org.springframework.boot.autoconfigure.mustache;
1818

19+
import java.util.function.Supplier;
20+
1921
import com.samskivert.mustache.Mustache;
22+
import org.assertj.core.api.InstanceOfAssertFactories;
2023
import org.junit.jupiter.api.Test;
24+
import org.junit.jupiter.params.ParameterizedTest;
25+
import org.junit.jupiter.params.provider.EnumSource;
2126

2227
import org.springframework.boot.autoconfigure.AutoConfigurations;
2328
import org.springframework.boot.test.context.runner.AbstractApplicationContextRunner;
@@ -102,9 +107,105 @@ void registerCompilerForReactiveApp() {
102107
});
103108
}
104109

110+
@Test
111+
void defaultServletViewResolverConfiguration() {
112+
configure(new WebApplicationContextRunner()).run((context) -> {
113+
MustacheViewResolver viewResolver = context.getBean(MustacheViewResolver.class);
114+
assertThat(viewResolver).extracting("allowRequestOverride", InstanceOfAssertFactories.BOOLEAN).isFalse();
115+
assertThat(viewResolver).extracting("allowSessionOverride", InstanceOfAssertFactories.BOOLEAN).isFalse();
116+
assertThat(viewResolver).extracting("cache", InstanceOfAssertFactories.BOOLEAN).isFalse();
117+
assertThat(viewResolver).extracting("charset").isEqualTo("UTF-8");
118+
assertThat(viewResolver).extracting("exposeRequestAttributes", InstanceOfAssertFactories.BOOLEAN).isFalse();
119+
assertThat(viewResolver).extracting("exposeSessionAttributes", InstanceOfAssertFactories.BOOLEAN).isFalse();
120+
assertThat(viewResolver).extracting("exposeSpringMacroHelpers", InstanceOfAssertFactories.BOOLEAN).isTrue();
121+
assertThat(viewResolver).extracting("prefix").isEqualTo("classpath:/templates/");
122+
assertThat(viewResolver).extracting("requestContextAttribute").isNull();
123+
assertThat(viewResolver).extracting("suffix").isEqualTo(".mustache");
124+
});
125+
}
126+
127+
@Test
128+
void defaultReactiveViewResolverConfiguration() {
129+
configure(new ReactiveWebApplicationContextRunner()).run((context) -> {
130+
org.springframework.boot.web.reactive.result.view.MustacheViewResolver viewResolver = context
131+
.getBean(org.springframework.boot.web.reactive.result.view.MustacheViewResolver.class);
132+
assertThat(viewResolver).extracting("charset").isEqualTo("UTF-8");
133+
assertThat(viewResolver).extracting("prefix").isEqualTo("classpath:/templates/");
134+
assertThat(viewResolver).extracting("requestContextAttribute").isNull();
135+
assertThat(viewResolver).extracting("suffix").isEqualTo(".mustache");
136+
});
137+
}
138+
139+
@Test
140+
void allowRequestOverrideCanBeCustomizedOnServletViewResolver() {
141+
assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.allow-request-override=true",
142+
"allowRequestOverride", true);
143+
}
144+
145+
@Test
146+
void allowSessionOverrideCanBeCustomizedOnServletViewResolver() {
147+
assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.allow-session-override=true",
148+
"allowSessionOverride", true);
149+
}
150+
151+
@Test
152+
void cacheCanBeCustomizedOnServletViewResolver() {
153+
assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.cache=true", "cache", true);
154+
}
155+
156+
@ParameterizedTest
157+
@EnumSource(ViewResolverKind.class)
158+
void charsetCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
159+
assertViewResolverProperty(kind, "spring.mustache.charset=UTF-16", "charset", "UTF-16");
160+
}
161+
162+
@Test
163+
void exposeRequestAttributesCanBeCustomizedOnServletViewResolver() {
164+
assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.expose-request-attributes=true",
165+
"exposeRequestAttributes", true);
166+
}
167+
168+
@Test
169+
void exposeSessionAttributesCanBeCustomizedOnServletViewResolver() {
170+
assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.expose-session-attributes=true",
171+
"exposeSessionAttributes", true);
172+
}
173+
174+
@Test
175+
void exposeSpringMacroHelpersCanBeCustomizedOnServletViewResolver() {
176+
assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.expose-spring-macro-helpers=true",
177+
"exposeSpringMacroHelpers", true);
178+
}
179+
180+
@ParameterizedTest
181+
@EnumSource(ViewResolverKind.class)
182+
void prefixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
183+
assertViewResolverProperty(kind, "spring.mustache.prefix=classpath:/mustache-templates/", "prefix",
184+
"classpath:/mustache-templates/");
185+
}
186+
187+
@ParameterizedTest
188+
@EnumSource(ViewResolverKind.class)
189+
void requestContextAttributeCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
190+
assertViewResolverProperty(kind, "spring.mustache.request-context-attribute=test", "requestContextAttribute",
191+
"test");
192+
}
193+
194+
@ParameterizedTest
195+
@EnumSource(ViewResolverKind.class)
196+
void suffixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
197+
assertViewResolverProperty(kind, "spring.mustache.suffix=.tache", "suffix", ".tache");
198+
}
199+
200+
private void assertViewResolverProperty(ViewResolverKind kind, String property, String field,
201+
Object expectedValue) {
202+
kind.runner().withConfiguration(AutoConfigurations.of(MustacheAutoConfiguration.class))
203+
.withPropertyValues(property).run((context) -> assertThat(context.getBean(kind.viewResolverClass()))
204+
.extracting(field).isEqualTo(expectedValue));
205+
}
206+
105207
private <T extends AbstractApplicationContextRunner<T, ?, ?>> T configure(T runner) {
106-
return runner.withPropertyValues("spring.mustache.prefix=classpath:/mustache-templates/")
107-
.withConfiguration(AutoConfigurations.of(MustacheAutoConfiguration.class));
208+
return runner.withConfiguration(AutoConfigurations.of(MustacheAutoConfiguration.class));
108209
}
109210

110211
@Configuration(proxyBeanMethods = false)
@@ -117,4 +218,36 @@ Mustache.Compiler compiler(Mustache.TemplateLoader mustacheTemplateLoader) {
117218

118219
}
119220

221+
private enum ViewResolverKind {
222+
223+
/**
224+
* Servlet MustacheViewResolver
225+
*/
226+
SERVLET(WebApplicationContextRunner::new, MustacheViewResolver.class),
227+
228+
/**
229+
* Reactive MustacheViewResolver
230+
*/
231+
REACTIVE(ReactiveWebApplicationContextRunner::new,
232+
org.springframework.boot.web.reactive.result.view.MustacheViewResolver.class);
233+
234+
private final Supplier<AbstractApplicationContextRunner<?, ?, ?>> runner;
235+
236+
private final Class<?> viewResolverClass;
237+
238+
ViewResolverKind(Supplier<AbstractApplicationContextRunner<?, ?, ?>> runner, Class<?> viewResolverClass) {
239+
this.runner = runner;
240+
this.viewResolverClass = viewResolverClass;
241+
}
242+
243+
private AbstractApplicationContextRunner<?, ?, ?> runner() {
244+
return this.runner.get();
245+
}
246+
247+
private Class<?> viewResolverClass() {
248+
return this.viewResolverClass;
249+
}
250+
251+
}
252+
120253
}

0 commit comments

Comments
 (0)