Merge "b/162010180 Implement Traversal for ExternalDocs on main OpenApi3 object"
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 0c64fd7..793c773 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 9791f58..4eab574 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
@@ -72,6 +75,20 @@
}
@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();