Skip to content

Commit 93345de

Browse files
committed
Consistent Locale exposure for Bean Validation message assertions
See gh-29825 See gh-30198
1 parent bbf3c6e commit 93345de

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

Diff for: spring-web/src/test/java/org/springframework/web/bind/MethodArgumentNotValidExceptionTests.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import jakarta.validation.constraints.Size;
2525
import org.junit.jupiter.api.Test;
2626

27+
import org.springframework.context.i18n.LocaleContextHolder;
2728
import org.springframework.context.support.StaticMessageSource;
2829
import org.springframework.core.MethodParameter;
2930
import org.springframework.validation.BeanPropertyBindingResult;
@@ -36,6 +37,7 @@
3637

3738
/**
3839
* Unit tests for {@link MethodArgumentNotValidException}.
40+
*
3941
* @author Rossen Stoyanchev
4042
*/
4143
public class MethodArgumentNotValidExceptionTests {
@@ -68,17 +70,23 @@ void errorsToStringListWithMessageSource() throws Exception {
6870
}
6971

7072
private static MethodArgumentNotValidException createException(Person person) throws Exception {
71-
LocalValidatorFactoryBean validatorBean = new LocalValidatorFactoryBean();
72-
validatorBean.afterPropertiesSet();
73-
SpringValidatorAdapter validator = new SpringValidatorAdapter(validatorBean);
73+
LocaleContextHolder.setLocale(Locale.UK);
74+
try {
75+
LocalValidatorFactoryBean validatorBean = new LocalValidatorFactoryBean();
76+
validatorBean.afterPropertiesSet();
77+
SpringValidatorAdapter validator = new SpringValidatorAdapter(validatorBean);
7478

75-
BindingResult result = new BeanPropertyBindingResult(person, "person");
76-
validator.validate(person, result);
79+
BindingResult result = new BeanPropertyBindingResult(person, "person");
80+
validator.validate(person, result);
7781

78-
Method method = Handler.class.getDeclaredMethod("handle", Person.class);
79-
MethodParameter parameter = new MethodParameter(method, 0);
82+
Method method = Handler.class.getDeclaredMethod("handle", Person.class);
83+
MethodParameter parameter = new MethodParameter(method, 0);
8084

81-
return new MethodArgumentNotValidException(parameter, result);
85+
return new MethodArgumentNotValidException(parameter, result);
86+
}
87+
finally {
88+
LocaleContextHolder.resetLocaleContext();
89+
}
8290
}
8391

8492

Diff for: spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MethodValidationTests.java

+12
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.lang.reflect.Method;
2020
import java.util.Collections;
2121
import java.util.List;
22+
import java.util.Locale;
2223
import java.util.Set;
2324
import java.util.function.Consumer;
2425

@@ -27,12 +28,14 @@
2728
import jakarta.validation.constraints.Size;
2829
import jakarta.validation.executable.ExecutableValidator;
2930
import jakarta.validation.metadata.BeanDescriptor;
31+
import org.junit.jupiter.api.AfterEach;
3032
import org.junit.jupiter.api.BeforeEach;
3133
import org.junit.jupiter.api.Test;
3234
import reactor.core.publisher.Mono;
3335
import reactor.test.StepVerifier;
3436

3537
import org.springframework.context.MessageSourceResolvable;
38+
import org.springframework.context.i18n.LocaleContextHolder;
3639
import org.springframework.http.MediaType;
3740
import org.springframework.util.Assert;
3841
import org.springframework.validation.Errors;
@@ -63,12 +66,14 @@
6366

6467
/**
6568
* Method validation tests for Spring MVC controller methods.
69+
*
6670
* <p>When adding tests, consider the following others:
6771
* <ul>
6872
* <li>{@code HandlerMethodTests} -- detection if methods need validation
6973
* <li>{@code MethodValidationAdapterTests} -- method validation independent of Spring MVC
7074
* <li>{@code MethodValidationProxyTests} -- method validation with proxy scenarios
7175
* </ul>
76+
*
7277
* @author Rossen Stoyanchev
7378
*/
7479
public class MethodValidationTests {
@@ -85,6 +90,8 @@ public class MethodValidationTests {
8590

8691
@BeforeEach
8792
void setup() throws Exception {
93+
LocaleContextHolder.setDefaultLocale(Locale.UK);
94+
8895
LocalValidatorFactoryBean validatorBean = new LocalValidatorFactoryBean();
8996
validatorBean.afterPropertiesSet();
9097
this.jakartaValidator = new InvocationCountingValidator(validatorBean);
@@ -105,6 +112,11 @@ private static RequestMappingHandlerAdapter initHandlerAdapter(Validator validat
105112
return handlerAdapter;
106113
}
107114

115+
@AfterEach
116+
void reset() {
117+
LocaleContextHolder.setDefaultLocale(null);
118+
}
119+
108120

109121
@Test
110122
void modelAttribute() {

0 commit comments

Comments
 (0)