|
20 | 20 |
|
21 | 21 | package org.springdoc.api;
|
22 | 22 |
|
| 23 | +import java.util.ArrayList; |
23 | 24 | import java.util.HashMap;
|
24 | 25 | import java.util.List;
|
25 | 26 | import java.util.Locale;
|
|
49 | 50 | import org.springdoc.core.SpringDocProviders;
|
50 | 51 | import org.springdoc.core.customizers.OpenApiCustomiser;
|
51 | 52 | import org.springdoc.core.customizers.OperationCustomizer;
|
| 53 | +import org.springdoc.core.customizers.ServerBaseUrlCustomizer; |
52 | 54 | import org.springdoc.core.filters.OpenApiMethodFilter;
|
53 | 55 | import org.springdoc.core.fn.RouterOperation;
|
54 | 56 |
|
@@ -216,6 +218,71 @@ void preLoadingModeShouldNotOverwriteServers() throws InterruptedException {
|
216 | 218 | assertThat(after.getServers().get(0).getUrl(), is(customUrl));
|
217 | 219 | }
|
218 | 220 |
|
| 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 | + } |
219 | 286 |
|
220 | 287 | private static class EmptyPathsOpenApiResource extends AbstractOpenApiResource {
|
221 | 288 |
|
|
0 commit comments