Merge "b/162010180 Implement Traversal for ExternalDocs on main OpenApi3 object"
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/InfoTraversal.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/InfoTraversal.java
index 046b274..18d3974 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/InfoTraversal.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/InfoTraversal.java
@@ -1,6 +1,7 @@
package com.apigee.security.oas.extendedvalidator;
import com.google.inject.assistedinject.Assisted;
+import java.util.Optional;
import javax.inject.Inject;
import org.openapi4j.parser.model.v3.Info;
@@ -24,10 +25,23 @@
public void traverse() {
// TODO(b/161441872): Process extensions.
- // TODO(b/161811574): Add checks for field unpacking.
- traversalCoordinator.handleTraversalCommand(
- traversalCommandFactory.create(openApiSchemaObj.getContact()));
- traversalCoordinator.handleTraversalCommand(
- traversalCommandFactory.create(openApiSchemaObj.getLicense()));
+ traverseContact();
+ traverseLicense();
+ }
+
+ private void traverseContact() {
+ Optional.ofNullable(openApiSchemaObj.getContact())
+ .ifPresent(
+ contact ->
+ traversalCoordinator.handleTraversalCommand(
+ traversalCommandFactory.create(contact)));
+ }
+
+ private void traverseLicense() {
+ Optional.ofNullable(openApiSchemaObj.getLicense())
+ .ifPresent(
+ license ->
+ traversalCoordinator.handleTraversalCommand(
+ traversalCommandFactory.create(license)));
}
}
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 10a4990..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
@@ -41,10 +41,10 @@
}
private void traverseInfo() {
- // TODO(b/161811574): Safely unpack Info.
-
- traversalCoordinator.handleTraversalCommand(
- traversalCommandFactory.create(openApiSchemaObj.getInfo()));
+ Optional.ofNullable(openApiSchemaObj.getInfo())
+ .ifPresent(
+ info ->
+ traversalCoordinator.handleTraversalCommand(traversalCommandFactory.create(info)));
}
private void traverseServers() {
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/InfoTraversalTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/InfoTraversalTest.java
index bafcd85..ffc56cd 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/InfoTraversalTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/InfoTraversalTest.java
@@ -52,12 +52,23 @@
}
@Test
+ public void traverse_nullContactChild_doesNotThrowException() {
+ when(info.getContact()).thenReturn(null);
+
+ infoTraversal.traverse();
+ }
+
+ @Test
public void traverse_sendsTraversalCoordinatorLicenseTraversalCommand() {
infoTraversal.traverse();
verify(traversalCoordinator).handleTraversalCommand(any(LicenseTraversal.class));
}
- // TODO(b/161811574): Add tests for additional nullable children.
+ @Test
+ public void traverse_nullLicenseChild_doesNotThrowException() {
+ when(info.getLicense()).thenReturn(null);
+ infoTraversal.traverse();
+ }
}
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 4564ee2..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
@@ -67,7 +67,12 @@
verify(traversalCoordinator).handleTraversalCommand(any(InfoTraversal.class));
}
- // TODO(b/161811574): Add tests to check other nullable children.
+ @Test
+ public void traverse_nullInfoChild_doesNotThrowException() {
+ when(openApiSpec.getInfo()).thenReturn(null);
+
+ openApiSpecificationTraversal.traverse();
+ }
@Test
public void traverse_sendsExternalDocsChildTraversalToTraversalCoordinator() {