From 31c1b0901f86849834c3e015ce7579465f21946f Mon Sep 17 00:00:00 2001 From: Jake Waffle Date: Mon, 18 Nov 2024 10:16:31 -0700 Subject: [PATCH] Updated additional contract validation error to include ref --- .../io/vertx/openapi/contract/OpenAPIContract.java | 11 ++++++++++- .../io/vertx/tests/contract/OpenAPIContractTest.java | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/vertx/openapi/contract/OpenAPIContract.java b/src/main/java/io/vertx/openapi/contract/OpenAPIContract.java index a7ba07e8..0c7ae706 100644 --- a/src/main/java/io/vertx/openapi/contract/OpenAPIContract.java +++ b/src/main/java/io/vertx/openapi/contract/OpenAPIContract.java @@ -116,7 +116,16 @@ static Future from(Vertx vertx, JsonObject unresolvedContract, // method and reused below. JsonObject file = additionalContractFiles.get(ref); Future validationFuture = version.validateAdditionalContractFile(vertx, repository, file) - .compose(v -> vertx.executeBlocking(() -> repository.dereference(ref, JsonSchema.of(ref, file)))); + .compose(v -> vertx.executeBlocking(() -> repository.dereference(ref, JsonSchema.of(ref, file)))) + .transform(ar -> { + if (ar.failed()) { + return Future.failedFuture( + createInvalidContract("Failed to validate additional contract file: " + ref, ar.cause()) + ); + } else { + return (Future) ar; + } + }); validationFutures.add(validationFuture); } diff --git a/src/test/java/io/vertx/tests/contract/OpenAPIContractTest.java b/src/test/java/io/vertx/tests/contract/OpenAPIContractTest.java index 4cc63d1a..6afc7a96 100644 --- a/src/test/java/io/vertx/tests/contract/OpenAPIContractTest.java +++ b/src/test/java/io/vertx/tests/contract/OpenAPIContractTest.java @@ -194,8 +194,10 @@ void testMalformedJsonSchemaProvidedAsAdditionalSpecFiles(Vertx vertx, VertxTest assertTrue(handler.failed()); assertThat(handler.cause()).isInstanceOf(OpenAPIContractException.class); assertThat(handler.cause()).hasMessageThat() - .isEqualTo("The passed OpenAPI contract is invalid: Found issue in specification for reference:" + - " -1 is less than 0"); + .isEqualTo("The passed OpenAPI contract is invalid: Failed to validate additional contract file: " + + "https://example.com/petstore"); + assertThat(handler.cause().getCause()).hasMessageThat() + .isEqualTo("-1 is less than 0"); testContext.completeNow(); })); }