26
26
import java .util .Enumeration ;
27
27
import java .util .HashMap ;
28
28
import java .util .HashSet ;
29
+ import java .util .LinkedHashSet ;
29
30
import java .util .List ;
30
31
import java .util .Map ;
31
32
import java .util .Properties ;
@@ -71,7 +72,8 @@ class DatabaseInitializationDependencyConfigurerTests {
71
72
72
73
@ BeforeEach
73
74
void resetMocks () {
74
- reset (MockDatabaseInitializerDetector .instance , OrderedMockDatabaseInitializerDetector .instance ,
75
+ reset (MockDatabaseInitializerDetector .instance , OrderedNearLowestMockDatabaseInitializerDetector .instance ,
76
+ OrderedLowestMockDatabaseInitializerDetector .instance ,
75
77
MockedDependsOnDatabaseInitializationDetector .instance );
76
78
}
77
79
@@ -94,8 +96,7 @@ void beanFactoryPostProcessorHasOrderAllowingSubsequentPostProcessorsToFineTuneD
94
96
context .refresh ();
95
97
assertThat (DependsOnCaptor .dependsOn ).hasEntrySatisfying ("bravo" ,
96
98
(dependencies ) -> assertThat (dependencies ).containsExactly ("alpha" ));
97
- assertThat (DependsOnCaptor .dependsOn ).hasEntrySatisfying ("alpha" ,
98
- (dependencies ) -> assertThat (dependencies ).isEmpty ());
99
+ assertThat (DependsOnCaptor .dependsOn ).doesNotContainKey ("alpha" );
99
100
});
100
101
}
101
102
@@ -140,24 +141,34 @@ void whenDependenciesAreConfiguredThenBeansThatDependUponDatabaseInitializationD
140
141
@ Test
141
142
void whenDependenciesAreConfiguredDetectedDatabaseInitializersAreInitializedInCorrectOrder () {
142
143
BeanDefinition alpha = BeanDefinitionBuilder .genericBeanDefinition (String .class ).getBeanDefinition ();
143
- BeanDefinition bravo = BeanDefinitionBuilder .genericBeanDefinition (String .class ).getBeanDefinition ();
144
+ BeanDefinition bravo1 = BeanDefinitionBuilder .genericBeanDefinition (String .class ).getBeanDefinition ();
145
+ BeanDefinition bravo2 = BeanDefinitionBuilder .genericBeanDefinition (String .class ).getBeanDefinition ();
144
146
BeanDefinition charlie = BeanDefinitionBuilder .genericBeanDefinition (String .class ).getBeanDefinition ();
145
- performDetection (Arrays .asList (MockDatabaseInitializerDetector .class ,
146
- OrderedMockDatabaseInitializerDetector .class , MockedDependsOnDatabaseInitializationDetector .class ),
147
+ BeanDefinition delta = BeanDefinitionBuilder .genericBeanDefinition (String .class ).getBeanDefinition ();
148
+ performDetection (
149
+ Arrays .asList (MockDatabaseInitializerDetector .class , OrderedLowestMockDatabaseInitializerDetector .class ,
150
+ OrderedNearLowestMockDatabaseInitializerDetector .class ,
151
+ MockedDependsOnDatabaseInitializationDetector .class ),
147
152
(context ) -> {
148
153
given (MockDatabaseInitializerDetector .instance .detect (context .getBeanFactory ()))
149
154
.willReturn (Collections .singleton ("alpha" ));
150
- given (OrderedMockDatabaseInitializerDetector .instance .detect (context .getBeanFactory ()))
151
- .willReturn (Collections .singleton ("bravo" ));
155
+ given (OrderedNearLowestMockDatabaseInitializerDetector .instance .detect (context .getBeanFactory ()))
156
+ .willReturn (new LinkedHashSet <>(Arrays .asList ("bravo1" , "bravo2" )));
157
+ given (OrderedLowestMockDatabaseInitializerDetector .instance .detect (context .getBeanFactory ()))
158
+ .willReturn (new LinkedHashSet <>(Arrays .asList ("charlie" )));
152
159
given (MockedDependsOnDatabaseInitializationDetector .instance .detect (context .getBeanFactory ()))
153
- .willReturn (Collections .singleton ("charlie " ));
160
+ .willReturn (Collections .singleton ("delta " ));
154
161
context .registerBeanDefinition ("alpha" , alpha );
155
- context .registerBeanDefinition ("bravo" , bravo );
162
+ context .registerBeanDefinition ("bravo1" , bravo1 );
163
+ context .registerBeanDefinition ("bravo2" , bravo2 );
156
164
context .registerBeanDefinition ("charlie" , charlie );
165
+ context .registerBeanDefinition ("delta" , delta );
157
166
context .register (DependencyConfigurerConfiguration .class );
158
167
context .refresh ();
159
- assertThat (charlie .getDependsOn ()).containsExactly ("alpha" , "bravo" );
160
- assertThat (bravo .getDependsOn ()).containsExactly ("alpha" );
168
+ assertThat (delta .getDependsOn ()).containsExactlyInAnyOrder ("alpha" , "bravo1" , "bravo2" , "charlie" );
169
+ assertThat (charlie .getDependsOn ()).containsExactly ("bravo1" , "bravo2" );
170
+ assertThat (bravo1 .getDependsOn ()).containsExactly ("alpha" );
171
+ assertThat (bravo2 .getDependsOn ()).containsExactly ("alpha" );
161
172
assertThat (alpha .getDependsOn ()).isNullOrEmpty ();
162
173
});
163
174
}
@@ -227,7 +238,7 @@ public void detectionComplete(ConfigurableListableBeanFactory beanFactory,
227
238
228
239
}
229
240
230
- static class OrderedMockDatabaseInitializerDetector implements DatabaseInitializerDetector {
241
+ static class OrderedLowestMockDatabaseInitializerDetector implements DatabaseInitializerDetector {
231
242
232
243
private static DatabaseInitializerDetector instance = mock (DatabaseInitializerDetector .class );
233
244
@@ -243,6 +254,22 @@ public int getOrder() {
243
254
244
255
}
245
256
257
+ static class OrderedNearLowestMockDatabaseInitializerDetector implements DatabaseInitializerDetector {
258
+
259
+ private static DatabaseInitializerDetector instance = mock (DatabaseInitializerDetector .class );
260
+
261
+ @ Override
262
+ public Set <String > detect (ConfigurableListableBeanFactory beanFactory ) {
263
+ return instance .detect (beanFactory );
264
+ }
265
+
266
+ @ Override
267
+ public int getOrder () {
268
+ return Ordered .LOWEST_PRECEDENCE - 100 ;
269
+ }
270
+
271
+ }
272
+
246
273
static class MockedDependsOnDatabaseInitializationDetector implements DependsOnDatabaseInitializationDetector {
247
274
248
275
private static DependsOnDatabaseInitializationDetector instance = mock (
0 commit comments