Skip to content

Commit 6f0a605

Browse files
committed
Merge branch 'mathieu-amblard-main'
2 parents c9cff14 + ff3e00d commit 6f0a605

File tree

2 files changed

+86
-2
lines changed

2 files changed

+86
-2
lines changed

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocHateoasConfiguration.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,11 @@ CollectionModelContentConverter collectionModelContentConverter(HateoasHalProvid
9797
* @param halProvider the hal provider
9898
* @param springDocConfigProperties the spring doc config properties
9999
* @param objectMapperProvider the object mapper provider
100-
* @return the open api customiser
100+
* @return the open api customizer
101101
* @see org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider) org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)org.springframework.hateoas.mediatype.hal.Jackson2HalModule.HalLinkListSerializer#serialize(Links, JsonGenerator, SerializerProvider)
102102
*/
103103
@Bean(Constants.LINKS_SCHEMA_CUSTOMISER)
104-
@ConditionalOnMissingBean
104+
@ConditionalOnMissingBean(name = Constants.LINKS_SCHEMA_CUSTOMISER)
105105
@Lazy(false)
106106
GlobalOpenApiCustomizer linksSchemaCustomizer(HateoasHalProvider halProvider, SpringDocConfigProperties springDocConfigProperties,
107107
ObjectMapperProvider objectMapperProvider) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package org.springdoc.core.configuration;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
5+
import org.springdoc.core.customizers.OpenApiHateoasLinksCustomizer;
6+
import org.springdoc.core.properties.SpringDocConfigProperties;
7+
import org.springframework.boot.autoconfigure.AutoConfigurations;
8+
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
9+
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
10+
import org.springframework.hateoas.config.HateoasConfiguration;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
import static org.mockito.Mockito.mock;
14+
import static org.springdoc.core.utils.Constants.LINKS_SCHEMA_CUSTOMISER;
15+
16+
class SpringDocHateoasConfigurationTest {
17+
18+
@Test
19+
void linksSchemaCustomizerShouldBeRegistered() {
20+
new WebApplicationContextRunner()
21+
.withPropertyValues(
22+
"springdoc.api-docs.enabled=true",
23+
"springdoc.enable-hateoas=true"
24+
)
25+
.withConfiguration(AutoConfigurations.of(
26+
WebMvcAutoConfiguration.class,
27+
HateoasConfiguration.class,
28+
SpringDocConfiguration.class,
29+
SpringDocConfigProperties.class,
30+
SpringDocHateoasConfiguration.class
31+
))
32+
.run(context -> {
33+
assertThat(context).getBeanNames(GlobalOpenApiCustomizer.class)
34+
.hasSize(1)
35+
.containsExactly(LINKS_SCHEMA_CUSTOMISER);
36+
assertThat(context.getBean(LINKS_SCHEMA_CUSTOMISER)).isExactlyInstanceOf(OpenApiHateoasLinksCustomizer.class);
37+
});
38+
}
39+
40+
@Test
41+
void linksSchemaCustomizerShouldBeRegisteredWithMultipleGlobalOpenApiCustomizer() {
42+
new WebApplicationContextRunner()
43+
.withPropertyValues(
44+
"springdoc.api-docs.enabled=true",
45+
"springdoc.enable-hateoas=true"
46+
)
47+
.withConfiguration(AutoConfigurations.of(
48+
WebMvcAutoConfiguration.class,
49+
HateoasConfiguration.class,
50+
SpringDocConfiguration.class,
51+
SpringDocConfigProperties.class,
52+
SpringDocHateoasConfiguration.class
53+
))
54+
.withBean("globalOpenApiCustomizer", GlobalOpenApiCustomizer.class, () -> mock(GlobalOpenApiCustomizer.class))
55+
.run(context -> {
56+
assertThat(context).getBeanNames(GlobalOpenApiCustomizer.class)
57+
.hasSize(2)
58+
.containsExactlyInAnyOrder(LINKS_SCHEMA_CUSTOMISER, "globalOpenApiCustomizer");
59+
});
60+
}
61+
62+
@Test
63+
void linksSchemaCustomizerShouldNotBeRegisteredIfBeanWithSameNameAlreadyExists() {
64+
new WebApplicationContextRunner()
65+
.withPropertyValues(
66+
"springdoc.api-docs.enabled=true",
67+
"springdoc.enable-hateoas=true"
68+
)
69+
.withConfiguration(AutoConfigurations.of(
70+
WebMvcAutoConfiguration.class,
71+
HateoasConfiguration.class,
72+
SpringDocConfiguration.class,
73+
SpringDocConfigProperties.class,
74+
SpringDocHateoasConfiguration.class
75+
))
76+
.withBean(LINKS_SCHEMA_CUSTOMISER, GlobalOpenApiCustomizer.class, () -> mock(GlobalOpenApiCustomizer.class))
77+
.run(context -> {
78+
assertThat(context).getBeanNames(GlobalOpenApiCustomizer.class)
79+
.hasSize(1)
80+
.containsExactly(LINKS_SCHEMA_CUSTOMISER);
81+
assertThat(context.getBean(LINKS_SCHEMA_CUSTOMISER)).isNotExactlyInstanceOf(OpenApiHateoasLinksCustomizer.class);
82+
});
83+
}
84+
}

0 commit comments

Comments
 (0)