commit
						3c117ca2d4
					
				| 
						 | 
					@ -16,8 +16,13 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package org.springframework.boot.autoconfigure.mustache;
 | 
					package org.springframework.boot.autoconfigure.mustache;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.function.Supplier;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.samskivert.mustache.Mustache;
 | 
					import com.samskivert.mustache.Mustache;
 | 
				
			||||||
 | 
					import org.assertj.core.api.InstanceOfAssertFactories;
 | 
				
			||||||
import org.junit.jupiter.api.Test;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
 | 
					import org.junit.jupiter.params.ParameterizedTest;
 | 
				
			||||||
 | 
					import org.junit.jupiter.params.provider.EnumSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
					import org.springframework.boot.autoconfigure.AutoConfigurations;
 | 
				
			||||||
import org.springframework.boot.test.context.runner.AbstractApplicationContextRunner;
 | 
					import org.springframework.boot.test.context.runner.AbstractApplicationContextRunner;
 | 
				
			||||||
| 
						 | 
					@ -102,9 +107,105 @@ class MustacheAutoConfigurationTests {
 | 
				
			||||||
				});
 | 
									});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void defaultServletViewResolverConfiguration() {
 | 
				
			||||||
 | 
							configure(new WebApplicationContextRunner()).run((context) -> {
 | 
				
			||||||
 | 
								MustacheViewResolver viewResolver = context.getBean(MustacheViewResolver.class);
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("allowRequestOverride", InstanceOfAssertFactories.BOOLEAN).isFalse();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("allowSessionOverride", InstanceOfAssertFactories.BOOLEAN).isFalse();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("cache", InstanceOfAssertFactories.BOOLEAN).isFalse();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("charset").isEqualTo("UTF-8");
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("exposeRequestAttributes", InstanceOfAssertFactories.BOOLEAN).isFalse();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("exposeSessionAttributes", InstanceOfAssertFactories.BOOLEAN).isFalse();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("exposeSpringMacroHelpers", InstanceOfAssertFactories.BOOLEAN).isTrue();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("prefix").isEqualTo("classpath:/templates/");
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("requestContextAttribute").isNull();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("suffix").isEqualTo(".mustache");
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void defaultReactiveViewResolverConfiguration() {
 | 
				
			||||||
 | 
							configure(new ReactiveWebApplicationContextRunner()).run((context) -> {
 | 
				
			||||||
 | 
								org.springframework.boot.web.reactive.result.view.MustacheViewResolver viewResolver = context
 | 
				
			||||||
 | 
										.getBean(org.springframework.boot.web.reactive.result.view.MustacheViewResolver.class);
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("charset").isEqualTo("UTF-8");
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("prefix").isEqualTo("classpath:/templates/");
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("requestContextAttribute").isNull();
 | 
				
			||||||
 | 
								assertThat(viewResolver).extracting("suffix").isEqualTo(".mustache");
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void allowRequestOverrideCanBeCustomizedOnServletViewResolver() {
 | 
				
			||||||
 | 
							assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.allow-request-override=true",
 | 
				
			||||||
 | 
									"allowRequestOverride", true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void allowSessionOverrideCanBeCustomizedOnServletViewResolver() {
 | 
				
			||||||
 | 
							assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.allow-session-override=true",
 | 
				
			||||||
 | 
									"allowSessionOverride", true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void cacheCanBeCustomizedOnServletViewResolver() {
 | 
				
			||||||
 | 
							assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.cache=true", "cache", true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@ParameterizedTest
 | 
				
			||||||
 | 
						@EnumSource(ViewResolverKind.class)
 | 
				
			||||||
 | 
						void charsetCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
 | 
				
			||||||
 | 
							assertViewResolverProperty(kind, "spring.mustache.charset=UTF-16", "charset", "UTF-16");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void exposeRequestAttributesCanBeCustomizedOnServletViewResolver() {
 | 
				
			||||||
 | 
							assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.expose-request-attributes=true",
 | 
				
			||||||
 | 
									"exposeRequestAttributes", true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void exposeSessionAttributesCanBeCustomizedOnServletViewResolver() {
 | 
				
			||||||
 | 
							assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.expose-session-attributes=true",
 | 
				
			||||||
 | 
									"exposeSessionAttributes", true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Test
 | 
				
			||||||
 | 
						void exposeSpringMacroHelpersCanBeCustomizedOnServletViewResolver() {
 | 
				
			||||||
 | 
							assertViewResolverProperty(ViewResolverKind.SERVLET, "spring.mustache.expose-spring-macro-helpers=true",
 | 
				
			||||||
 | 
									"exposeSpringMacroHelpers", true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@ParameterizedTest
 | 
				
			||||||
 | 
						@EnumSource(ViewResolverKind.class)
 | 
				
			||||||
 | 
						void prefixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
 | 
				
			||||||
 | 
							assertViewResolverProperty(kind, "spring.mustache.prefix=classpath:/mustache-templates/", "prefix",
 | 
				
			||||||
 | 
									"classpath:/mustache-templates/");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@ParameterizedTest
 | 
				
			||||||
 | 
						@EnumSource(ViewResolverKind.class)
 | 
				
			||||||
 | 
						void requestContextAttributeCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
 | 
				
			||||||
 | 
							assertViewResolverProperty(kind, "spring.mustache.request-context-attribute=test", "requestContextAttribute",
 | 
				
			||||||
 | 
									"test");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@ParameterizedTest
 | 
				
			||||||
 | 
						@EnumSource(ViewResolverKind.class)
 | 
				
			||||||
 | 
						void suffixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
 | 
				
			||||||
 | 
							assertViewResolverProperty(kind, "spring.mustache.suffix=.tache", "suffix", ".tache");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private void assertViewResolverProperty(ViewResolverKind kind, String property, String field,
 | 
				
			||||||
 | 
								Object expectedValue) {
 | 
				
			||||||
 | 
							kind.runner().withConfiguration(AutoConfigurations.of(MustacheAutoConfiguration.class))
 | 
				
			||||||
 | 
									.withPropertyValues(property).run((context) -> assertThat(context.getBean(kind.viewResolverClass()))
 | 
				
			||||||
 | 
											.extracting(field).isEqualTo(expectedValue));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private <T extends AbstractApplicationContextRunner<T, ?, ?>> T configure(T runner) {
 | 
						private <T extends AbstractApplicationContextRunner<T, ?, ?>> T configure(T runner) {
 | 
				
			||||||
		return runner.withPropertyValues("spring.mustache.prefix=classpath:/mustache-templates/")
 | 
							return runner.withConfiguration(AutoConfigurations.of(MustacheAutoConfiguration.class));
 | 
				
			||||||
				.withConfiguration(AutoConfigurations.of(MustacheAutoConfiguration.class));
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Configuration(proxyBeanMethods = false)
 | 
						@Configuration(proxyBeanMethods = false)
 | 
				
			||||||
| 
						 | 
					@ -117,4 +218,36 @@ class MustacheAutoConfigurationTests {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private enum ViewResolverKind {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Servlet MustacheViewResolver
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							SERVLET(WebApplicationContextRunner::new, MustacheViewResolver.class),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/**
 | 
				
			||||||
 | 
							 * Reactive MustacheViewResolver
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							REACTIVE(ReactiveWebApplicationContextRunner::new,
 | 
				
			||||||
 | 
									org.springframework.boot.web.reactive.result.view.MustacheViewResolver.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private final Supplier<AbstractApplicationContextRunner<?, ?, ?>> runner;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private final Class<?> viewResolverClass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ViewResolverKind(Supplier<AbstractApplicationContextRunner<?, ?, ?>> runner, Class<?> viewResolverClass) {
 | 
				
			||||||
 | 
								this.runner = runner;
 | 
				
			||||||
 | 
								this.viewResolverClass = viewResolverClass;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private AbstractApplicationContextRunner<?, ?, ?> runner() {
 | 
				
			||||||
 | 
								return this.runner.get();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							private Class<?> viewResolverClass() {
 | 
				
			||||||
 | 
								return this.viewResolverClass;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue