|
24 | 24 | import jakarta.validation.constraints.Min;
|
25 | 25 | import jakarta.validation.constraints.Size;
|
26 | 26 | import org.junit.jupiter.api.Test;
|
| 27 | +import org.mockito.InOrder; |
| 28 | +import org.mockito.Mockito; |
27 | 29 |
|
28 | 30 | import org.springframework.beans.factory.BeanFactoryUtils;
|
29 | 31 | import org.springframework.beans.factory.config.BeanPostProcessor;
|
|
36 | 38 | import org.springframework.context.annotation.Bean;
|
37 | 39 | import org.springframework.context.annotation.Configuration;
|
38 | 40 | import org.springframework.context.annotation.Primary;
|
| 41 | +import org.springframework.core.annotation.Order; |
39 | 42 | import org.springframework.test.util.ReflectionTestUtils;
|
40 | 43 | import org.springframework.validation.annotation.Validated;
|
41 | 44 | import org.springframework.validation.beanvalidation.CustomValidatorBean;
|
|
46 | 49 | import static org.assertj.core.api.Assertions.assertThat;
|
47 | 50 | import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
48 | 51 | import static org.assertj.core.api.Assertions.assertThatNoException;
|
| 52 | +import static org.mockito.ArgumentMatchers.any; |
| 53 | +import static org.mockito.BDDMockito.then; |
49 | 54 | import static org.mockito.Mockito.mock;
|
50 | 55 |
|
51 | 56 | /**
|
@@ -235,6 +240,19 @@ void validationIsEnabledInChildContext() {
|
235 | 240 | }));
|
236 | 241 | }
|
237 | 242 |
|
| 243 | + @Test |
| 244 | + void configurationCustomizerBeansAreCalledInOrder() { |
| 245 | + this.contextRunner.withUserConfiguration(ConfigurationCustomizersConfiguration.class).run((context) -> { |
| 246 | + ValidationConfigurationCustomizer customizerOne = context.getBean("customizerOne", |
| 247 | + ValidationConfigurationCustomizer.class); |
| 248 | + ValidationConfigurationCustomizer customizerTwo = context.getBean("customizerTwo", |
| 249 | + ValidationConfigurationCustomizer.class); |
| 250 | + InOrder inOrder = Mockito.inOrder(customizerOne, customizerTwo); |
| 251 | + then(customizerTwo).should(inOrder).customize(any(jakarta.validation.Configuration.class)); |
| 252 | + then(customizerOne).should(inOrder).customize(any(jakarta.validation.Configuration.class)); |
| 253 | + }); |
| 254 | + } |
| 255 | + |
238 | 256 | private boolean isPrimaryBean(AssertableApplicationContext context, String beanName) {
|
239 | 257 | return ((BeanDefinitionRegistry) context.getSourceApplicationContext()).getBeanDefinition(beanName).isPrimary();
|
240 | 258 | }
|
@@ -421,4 +439,21 @@ public Object postProcessBeforeInitialization(Object bean, String name) {
|
421 | 439 |
|
422 | 440 | }
|
423 | 441 |
|
| 442 | + @Configuration(proxyBeanMethods = false) |
| 443 | + static class ConfigurationCustomizersConfiguration { |
| 444 | + |
| 445 | + @Bean |
| 446 | + @Order(1) |
| 447 | + ValidationConfigurationCustomizer customizerOne() { |
| 448 | + return mock(ValidationConfigurationCustomizer.class); |
| 449 | + } |
| 450 | + |
| 451 | + @Bean |
| 452 | + @Order(0) |
| 453 | + ValidationConfigurationCustomizer customizerTwo() { |
| 454 | + return mock(ValidationConfigurationCustomizer.class); |
| 455 | + } |
| 456 | + |
| 457 | + } |
| 458 | + |
424 | 459 | }
|
0 commit comments