b/161441872 Integrate scope validation in extended validator

Change-Id: I82c8c93d7f736c9f87510f1e03d3ce8fac8ffcbc
diff --git a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java
index 2679e54..f7b7551 100644
--- a/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java
+++ b/oas-core/src/main/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidator.java
@@ -13,13 +13,16 @@
   private static final FluentLogger logger = FluentLogger.forEnclosingClass();
   private final TraversalHelperFactory traversalHelperFactory;
   private final ExtensionSchemaValidator schemaValidator;
+  private final ExtensionScopeValidator scopeValidator;
 
-  // TODO(b/161441872) : Inject ExtensionScopeValidator
   @Inject
   BaseExtendedValidator(
-      TraversalHelperFactory traversalHelperFactory, ExtensionSchemaValidator schemaValidator) {
+      TraversalHelperFactory traversalHelperFactory,
+      ExtensionSchemaValidator schemaValidator,
+      ExtensionScopeValidator scopeValidator) {
     this.traversalHelperFactory = traversalHelperFactory;
     this.schemaValidator = schemaValidator;
+    this.scopeValidator = scopeValidator;
   }
 
   @Override
@@ -40,15 +43,13 @@
   private ImmutableSet<ExtensionValidationMessage> validateSchemaAndScope(
       ImmutableSet<Extension> extensions) {
 
-    return
-        extensions.stream()
-            .filter(extension -> valueOfExtensionName(extension.getExtensionName()).isPresent())
-            .flatMap(
-                extension ->
-                    ImmutableSet.<ExtensionValidationMessage>builder()
-                        .addAll(extension.validate(schemaValidator)).build().stream())
-            .collect(ImmutableSet.toImmutableSet());
-
-    // TODO(b/161441872) : Add extension scope validation logic
+    return extensions.stream()
+        .filter(extension -> valueOfExtensionName(extension.getExtensionName()).isPresent())
+        .flatMap(
+            extension ->
+                ImmutableSet.<ExtensionValidationMessage>builder()
+                    .addAll(extension.validate(schemaValidator))
+                    .addAll(extension.validate(scopeValidator)).build().stream())
+        .collect(ImmutableSet.toImmutableSet());
   }
 }
diff --git a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java
index 0ff912a..86be8d9 100644
--- a/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java
+++ b/oas-core/src/test/java/com/apigee/security/oas/extendedvalidator/BaseExtendedValidatorTest.java
@@ -30,8 +30,11 @@
   @Mock private OpenApi3 openApiSpec;
   @Mock private Extension supportedExtension;
   @Mock private Extension unsupportedExtension;
+  @Mock private ExtensionValidationMessage schemaMessage;
+  @Mock private ExtensionValidationMessage scopeMessage;
 
-  @Mock private ExtensionSchemaValidator extensionSchemaValidator;
+  @Mock private ExtensionSchemaValidator schemaValidator;
+  @Mock private ExtensionScopeValidator scopeValidator;
   @Mock private TraversalHelperFactory traversalHelperFactory;
   @Mock private TraversalHelper traversalHelper;
   @InjectMocks private BaseExtendedValidator baseExtendedValidator;
@@ -55,7 +58,7 @@
   @Test
   public void validate_supportedExtension_callsExtensionValidate() {
     when(supportedExtension.getExtensionName()).thenReturn(X_SECURITY_TYPE.getExtensionName());
-    when(supportedExtension.validate(extensionSchemaValidator)).thenReturn(ImmutableSet.of());
+    when(supportedExtension.validate(any(ExtensionValidator.class))).thenReturn(ImmutableSet.of());
     when(traversalHelper.traverse()).thenReturn(ImmutableSet.of(supportedExtension));
 
     baseExtendedValidator.validate(openApiSpec);
@@ -73,15 +76,12 @@
   }
 
   @Test
-  public void validate_withExtensions_returnsExtensionValidationMessage() {
-    ExtensionValidationMessage message =
-        ExtensionValidationMessage.builder().setType("").setMessage("").setPath("").build();
-
+  public void validate_withExtensions_returnsExactExtensionValidationMessages() {
     when(supportedExtension.getExtensionName()).thenReturn(X_SECURITY_TYPE.getExtensionName());
     when(traversalHelper.traverse()).thenReturn(ImmutableSet.of(supportedExtension));
-    when(supportedExtension.validate(any(ExtensionValidator.class)))
-        .thenReturn(ImmutableSet.of(message));
+    when(supportedExtension.validate(schemaValidator)).thenReturn(ImmutableSet.of(schemaMessage));
+    when(supportedExtension.validate(scopeValidator)).thenReturn(ImmutableSet.of(scopeMessage));
 
-    assertThat(baseExtendedValidator.validate(openApiSpec)).hasSize(1);
+    assertThat(baseExtendedValidator.validate(openApiSpec)).hasSize(2);
   }
 }