b/162010180 Implement Traversal for ExternalDocs on main OpenApi3 object Change-Id: I13b795f7de0be98271ea8fc0b2f482793cf2585f
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversal.java index 109132d..10a4990 100644 --- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversal.java +++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversal.java
@@ -29,6 +29,15 @@ traverseInfo(); traverseServers(); traverseTags(); + traverseExternalDocs(); + } + + private void traverseExternalDocs() { + Optional.ofNullable(openApiSchemaObj.getExternalDocs()) + .ifPresent( + externalDocs -> + traversalCoordinator.handleTraversalCommand( + traversalCommandFactory.create(externalDocs))); } private void traverseInfo() {
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversalTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversalTest.java index 0887e9d..4564ee2 100644 --- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversalTest.java +++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/OpenApiSpecificationTraversalTest.java
@@ -16,6 +16,7 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.quality.Strictness; +import org.openapi4j.parser.model.v3.ExternalDocs; import org.openapi4j.parser.model.v3.Info; import org.openapi4j.parser.model.v3.OpenApi3; import org.openapi4j.parser.model.v3.Server; @@ -55,6 +56,8 @@ when(openApiSpec.getTags()).thenReturn(tags); when(openApiSpec.getInfo()).thenReturn(new Info()); + + when(openApiSpec.getExternalDocs()).thenReturn(new ExternalDocs()); } @Test @@ -67,6 +70,20 @@ // TODO(b/161811574): Add tests to check other nullable children. @Test + public void traverse_sendsExternalDocsChildTraversalToTraversalCoordinator() { + openApiSpecificationTraversal.traverse(); + + verify(traversalCoordinator).handleTraversalCommand(any(ExternalDocsTraversalCommand.class)); + } + + @Test + public void traverse_nullExternalDocsChild_doesNotThrowException() { + when(openApiSpec.getExternalDocs()).thenReturn(null); + + openApiSpecificationTraversal.traverse(); + } + + @Test public void traverse_sendsServerChildrenTraversalsToTraversalCommander() { openApiSpecificationTraversal.traverse();