Skip to content

Commit c26eaa1

Browse files
committed
Add testing utility class SpringAiTestAutoConfigurations
Signed-off-by: Issam El-atif <[email protected]>
1 parent 0fdb911 commit c26eaa1

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.springframework.ai.utils;
2+
3+
import org.springframework.boot.autoconfigure.AutoConfiguration;
4+
import org.springframework.boot.autoconfigure.AutoConfigurations;
5+
import org.springframework.core.annotation.AnnotationUtils;
6+
7+
import java.util.Arrays;
8+
import java.util.Objects;
9+
import java.util.stream.Stream;
10+
11+
/**
12+
* Utility class that creates {@link AutoConfigurations} for testing purpose.
13+
* <p>
14+
* This class processes the provided configuration classes, checks for the presence of
15+
* {@link AutoConfiguration} annotations, and builds an {@link AutoConfigurations}
16+
* instance that includes both the original classes and those declared in the
17+
* {@link AutoConfiguration#after()} attribute.
18+
* </p>
19+
*
20+
* @author Issam El-atif
21+
* @see AutoConfigurations
22+
*/
23+
public class SpringAiTestAutoConfigurations {
24+
25+
private SpringAiTestAutoConfigurations() {
26+
}
27+
28+
/**
29+
* Creates an {@link AutoConfigurations} instance that includes the provided
30+
* configuration classes and any autoconfiguration classes referenced in
31+
* {@link AutoConfiguration#after()} attribute.
32+
* @param configurations one or more configuration classes that may be annotated with
33+
* {@link AutoConfiguration}
34+
* @return a composed {@link AutoConfigurations} instance including all discovered
35+
* classes
36+
* @see AutoConfigurations#of(Class[])
37+
*/
38+
public static AutoConfigurations of(Class<?>... configurations) {
39+
return AutoConfigurations.of(Arrays.stream(configurations)
40+
.map(c -> AnnotationUtils.findAnnotation(c, AutoConfiguration.class))
41+
.filter(Objects::nonNull)
42+
.map(AutoConfiguration::after)
43+
.flatMap(ac -> Stream.concat(Stream.of(ac), Stream.of(configurations)))
44+
.toArray(Class<?>[]::new));
45+
}
46+
47+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.springframework.ai.utils;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.boot.autoconfigure.AutoConfiguration;
5+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
/**
10+
* @author Issam El-atif
11+
*/
12+
class SpringAiTestAutoConfigurationsTests {
13+
14+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner();
15+
16+
@Test
17+
void shouldLoadProvidedConfiguration() {
18+
this.contextRunner.withConfiguration(SpringAiTestAutoConfigurations.of(SimpleConfiguration.class))
19+
.run(context -> assertThat(context).hasSingleBean(SimpleConfiguration.class));
20+
}
21+
22+
@Test
23+
void shouldIncludeConfigurationsDeclaredInAfterAttribute() {
24+
this.contextRunner.withConfiguration(SpringAiTestAutoConfigurations.of(AfterConfiguration.class))
25+
.run(context -> {
26+
assertThat(context).hasSingleBean(SimpleConfiguration.class);
27+
assertThat(context).hasSingleBean(AfterConfiguration.class);
28+
});
29+
}
30+
31+
@AutoConfiguration
32+
static class SimpleConfiguration {
33+
34+
}
35+
36+
@AutoConfiguration(after = { SimpleConfiguration.class })
37+
static class AfterConfiguration {
38+
39+
}
40+
41+
}

0 commit comments

Comments
 (0)