Skip to content

Commit 4f34a3c

Browse files
committed
refs #3303 - add test
1 parent 4d56dc4 commit 4f34a3c

4 files changed

Lines changed: 428 additions & 9 deletions

File tree

modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,16 @@
2323
import org.apache.commons.lang3.StringUtils;
2424

2525
import java.io.IOException;
26-
import java.util.*;
26+
import java.util.ArrayList;
27+
import java.util.Collections;
28+
import java.util.HashSet;
29+
import java.util.Iterator;
30+
import java.util.LinkedHashMap;
31+
import java.util.List;
32+
import java.util.Map;
33+
import java.util.Optional;
34+
import java.util.Set;
35+
import java.util.TreeSet;
2736
import java.util.stream.Collectors;
2837

2938
public class SpecFilter {
@@ -384,7 +393,7 @@ protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) {
384393
}
385394
}
386395

387-
referencedDefinitions.addAll(resolveAllNestededRefs(referencedDefinitions, referencedDefinitions, openApi));
396+
referencedDefinitions.addAll(resolveAllNestedRefs(referencedDefinitions, referencedDefinitions, openApi));
388397
openApi.getComponents()
389398
.getSchemas()
390399
.keySet()
@@ -394,7 +403,7 @@ protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) {
394403
return openApi;
395404
}
396405

397-
private Set<String> resolveAllNestededRefs(Set<String> refs, Set<String> accumulatedRefs, OpenAPI openApi) {
406+
protected Set<String> resolveAllNestedRefs(Set<String> refs, Set<String> accumulatedRefs, OpenAPI openApi) {
398407
Set<String> justDiscoveredReferencedDefinitions = new TreeSet<>();
399408
for (String ref : refs) {
400409
locateReferencedDefinitions(ref, justDiscoveredReferencedDefinitions, openApi);
@@ -406,7 +415,7 @@ private Set<String> resolveAllNestededRefs(Set<String> refs, Set<String> accumul
406415
// Remove all refs that have already been discovered.
407416
justDiscoveredReferencedDefinitions.removeAll(accumulatedRefs);
408417
accumulatedRefs.addAll(justDiscoveredReferencedDefinitions);
409-
return resolveAllNestededRefs(justDiscoveredReferencedDefinitions, accumulatedRefs, openApi);
418+
return resolveAllNestedRefs(justDiscoveredReferencedDefinitions, accumulatedRefs, openApi);
410419
}
411420
}
412421

modules/swagger-core/src/test/java/io/swagger/v3/core/filter/SpecFilterTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public class SpecFilterTest {
4343

4444
private static final String RESOURCE_RECURSIVE_MODELS = "specFiles/recursivemodels.json";
4545
private static final String RESOURCE_PATH = "specFiles/petstore-3.0-v2.json";
46+
private static final String RESOURCE_PATH_3303 = "specFiles/petstore-3.0-v2-ticket-3303.json";
4647
private static final String RESOURCE_REFERRED_SCHEMAS = "specFiles/petstore-3.0-referred-schemas.json";
4748
private static final String RESOURCE_PATH_WITHOUT_MODELS = "specFiles/petstore-3.0-v2_withoutModels.json";
4849
private static final String RESOURCE_DEPRECATED_OPERATIONS = "specFiles/deprecatedoperationmodel.json";
@@ -241,6 +242,21 @@ public void shouldRemoveBrokenRefs() throws IOException {
241242
assertNotNull(filtered.getComponents().getSchemas().get("Pet"));
242243
}
243244

245+
@Test
246+
public void shouldRemoveBrokenNestedRefs() throws IOException {
247+
final OpenAPI openAPI = getOpenAPI(RESOURCE_PATH_3303);
248+
openAPI.getPaths().get("/pet/{petId}").getGet().getResponses().getDefault().getHeaders().remove("X-Rate-Limit-Limit");
249+
assertNotNull(openAPI.getComponents().getSchemas().get("PetHeader"));
250+
final RemoveUnreferencedDefinitionsFilter remover = new RemoveUnreferencedDefinitionsFilter();
251+
final OpenAPI filtered = new SpecFilter().filter(openAPI, remover, null, null, null);
252+
253+
assertNull(filtered.getComponents().getSchemas().get("PetHeader"));
254+
assertNull(filtered.getComponents().getSchemas().get("Bar"));
255+
assertNotNull(filtered.getComponents().getSchemas().get("Category"));
256+
assertNotNull(filtered.getComponents().getSchemas().get("Pet"));
257+
assertNotNull(filtered.getComponents().getSchemas().get("Foo"));
258+
}
259+
244260
@Test
245261
public void shouldNotRemoveGoodRefs() throws IOException {
246262
final OpenAPI openAPI = getOpenAPI(RESOURCE_PATH);

0 commit comments

Comments
 (0)