Skip to content

Commit 77d59da

Browse files
author
Skylar Stark
committed
Unit test for ServerBaseUrlCustomizer
1 parent 2a2f566 commit 77d59da

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

springdoc-openapi-common/src/main/java/org/springdoc/core/OpenAPIService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ public Schema resolveProperties(Schema schema, Locale locale) {
475475
public void setServerBaseUrl(String serverBaseUrl) {
476476
String customServerBaseUrl = serverBaseUrl;
477477

478-
if (serverBaseUrlCustomisers.isPresent()) {
478+
if (serverBaseUrlCustomisers != null && serverBaseUrlCustomisers.isPresent()) {
479479
for (ServerBaseUrlCustomizer customiser : serverBaseUrlCustomisers.get()) {
480480
customServerBaseUrl = customiser.customise(customServerBaseUrl);
481481
}

springdoc-openapi-common/src/test/java/org/springdoc/api/AbstractOpenApiResourceTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
package org.springdoc.api;
2222

23+
import java.util.ArrayList;
2324
import java.util.HashMap;
2425
import java.util.List;
2526
import java.util.Locale;
@@ -49,6 +50,7 @@
4950
import org.springdoc.core.SpringDocProviders;
5051
import org.springdoc.core.customizers.OpenApiCustomiser;
5152
import org.springdoc.core.customizers.OperationCustomizer;
53+
import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
5254
import org.springdoc.core.filters.OpenApiMethodFilter;
5355
import org.springdoc.core.fn.RouterOperation;
5456

@@ -216,6 +218,71 @@ void preLoadingModeShouldNotOverwriteServers() throws InterruptedException {
216218
assertThat(after.getServers().get(0).getUrl(), is(customUrl));
217219
}
218220

221+
@Test
222+
void serverBaseUrlCustomisersTest() throws InterruptedException {
223+
when(openAPIService.updateServers(any())).thenCallRealMethod();
224+
when(openAPIService.getCachedOpenAPI(any())).thenCallRealMethod();
225+
doAnswer(new CallsRealMethods()).when(openAPIService).setServerBaseUrl(any());
226+
doAnswer(new CallsRealMethods()).when(openAPIService).setCachedOpenAPI(any(), any());
227+
228+
SpringDocConfigProperties properties = new SpringDocConfigProperties();
229+
properties.setPreLoadingEnabled(true);
230+
231+
resource = new EmptyPathsOpenApiResource(
232+
GROUP_NAME,
233+
openAPIBuilderObjectFactory,
234+
requestBuilder,
235+
responseBuilder,
236+
operationParser,
237+
Optional.empty(),
238+
Optional.empty(),
239+
Optional.empty(),
240+
properties,
241+
springDocProviders
242+
);
243+
244+
// wait for executor to be done
245+
Thread.sleep(1_000);
246+
247+
Locale locale = Locale.US;
248+
249+
// Test that setting generated URL works fine with no customisers present
250+
String generatedUrl = "https://generated-url.com/context-path";
251+
openAPIService.setServerBaseUrl(generatedUrl);
252+
openAPIService.updateServers(openAPI);
253+
OpenAPI after = resource.getOpenApi(locale);
254+
assertThat(after.getServers().get(0).getUrl(), is(generatedUrl));
255+
256+
// Test that adding a serverBaseUrlCustomiser has the desired effect
257+
ServerBaseUrlCustomizer serverBaseUrlCustomiser = serverBaseUrl -> serverBaseUrl.replace("/context-path", "");
258+
List<ServerBaseUrlCustomizer> serverBaseUrlCustomiserList = new ArrayList<>();
259+
serverBaseUrlCustomiserList.add(serverBaseUrlCustomiser);
260+
261+
ReflectionTestUtils.setField(openAPIService, "serverBaseUrlCustomisers", Optional.of(serverBaseUrlCustomiserList));
262+
openAPIService.setServerBaseUrl(generatedUrl);
263+
openAPIService.updateServers(openAPI);
264+
after = resource.getOpenApi(locale);
265+
assertThat(after.getServers().get(0).getUrl(), is("https://generated-url.com"));
266+
267+
// Test that serverBaseUrlCustomisers are performed in order
268+
generatedUrl = "https://generated-url.com/context-path/second-path";
269+
ServerBaseUrlCustomizer serverBaseUrlCustomiser2 = serverBaseUrl -> serverBaseUrl.replace("/context-path/second-path", "");
270+
serverBaseUrlCustomiserList.add(serverBaseUrlCustomiser2);
271+
272+
openAPIService.setServerBaseUrl(generatedUrl);
273+
openAPIService.updateServers(openAPI);
274+
after = resource.getOpenApi(locale);
275+
assertThat(after.getServers().get(0).getUrl(), is("https://generated-url.com/second-path"));
276+
277+
// Test that all serverBaseUrlCustomisers in the List are performed
278+
ServerBaseUrlCustomizer serverBaseUrlCustomiser3 = serverBaseUrl -> serverBaseUrl.replace("/second-path", "");
279+
serverBaseUrlCustomiserList.add(serverBaseUrlCustomiser3);
280+
281+
openAPIService.setServerBaseUrl(generatedUrl);
282+
openAPIService.updateServers(openAPI);
283+
after = resource.getOpenApi(locale);
284+
assertThat(after.getServers().get(0).getUrl(), is("https://generated-url.com"));
285+
}
219286

220287
private static class EmptyPathsOpenApiResource extends AbstractOpenApiResource {
221288

0 commit comments

Comments
 (0)