b/161811574 Refactor OpenApi3 and Info Traversal to check state of getters Change-Id: I984666c5902217e4c1f0028cb17d8753ae03c91b
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 109132d..0c64fd7 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
@@ -32,10 +32,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 0887e9d..9791f58 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
@@ -64,7 +64,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_sendsServerChildrenTraversalsToTraversalCommander() {