16
16
17
17
package org .springframework .boot .autoconfigure .mustache ;
18
18
19
+ import java .util .function .Supplier ;
20
+
19
21
import com .samskivert .mustache .Mustache ;
22
+ import org .assertj .core .api .InstanceOfAssertFactories ;
20
23
import org .junit .jupiter .api .Test ;
24
+ import org .junit .jupiter .params .ParameterizedTest ;
25
+ import org .junit .jupiter .params .provider .EnumSource ;
21
26
22
27
import org .springframework .boot .autoconfigure .AutoConfigurations ;
23
28
import org .springframework .boot .test .context .runner .AbstractApplicationContextRunner ;
@@ -102,9 +107,105 @@ void registerCompilerForReactiveApp() {
102
107
});
103
108
}
104
109
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
+
105
207
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 ));
108
209
}
109
210
110
211
@ Configuration (proxyBeanMethods = false )
@@ -117,4 +218,36 @@ Mustache.Compiler compiler(Mustache.TemplateLoader mustacheTemplateLoader) {
117
218
118
219
}
119
220
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
+
120
253
}
0 commit comments