From d018ed523ed1ec0f808f5978ee37617f674908d1 Mon Sep 17 00:00:00 2001 From: gracekarina Date: Tue, 19 Jul 2022 09:24:50 -0500 Subject: [PATCH] initial Swagger Parser CLI --- modules/swagger-parser-cli/pom.xml | 75 +++++++++++++++++++ .../io/swagger/v3/parser/SwaggerParser.java | 31 ++++++++ .../src/test/java/SwaggerParserCLITest.java | 28 +++++++ .../resources/fileWithNoErrorMessages.yaml | 55 ++++++++++++++ .../fileWithValidationErrorMessages.yaml | 53 +++++++++++++ pom.xml | 1 + 6 files changed, 243 insertions(+) create mode 100644 modules/swagger-parser-cli/pom.xml create mode 100644 modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java create mode 100644 modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java create mode 100644 modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml create mode 100644 modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml diff --git a/modules/swagger-parser-cli/pom.xml b/modules/swagger-parser-cli/pom.xml new file mode 100644 index 0000000000..6dc74a4333 --- /dev/null +++ b/modules/swagger-parser-cli/pom.xml @@ -0,0 +1,75 @@ + + + + swagger-parser-project + io.swagger.parser.v3 + 2.1.2-SNAPSHOT + ../.. + + 4.0.0 + + swagger-parser-cli + jar + swagger-parser (executable) + + + swagger-parser-cli + + + src/main/resources + true + + logback.xml + + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + + process-resources + package + + shade + + + false + true + + ${java.io.tmpdir}/dependency-reduced-pom.xml + + + + + + + + + + + + + + io.swagger.parser.v3 + swagger-parser-v3 + 2.1.2-SNAPSHOT + compile + + + org.testng + testng + + + + + 8 + 8 + + + \ No newline at end of file diff --git a/modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java b/modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java new file mode 100644 index 0000000000..8fa2ec402a --- /dev/null +++ b/modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java @@ -0,0 +1,31 @@ +package io.swagger.v3.parser; + +import io.swagger.v3.parser.core.models.SwaggerParseResult; +import java.util.ArrayList; +import java.util.List; + +public class SwaggerParser { + public static void main(String[] args) { + if (args.length > 0){ + List messages = readFromLocation(args[0]); + if ( messages.size() > 0){ + messages.forEach(System.out::println); + System.exit(1); + } + } + } + + public static List readFromLocation(String location) { + List messages = new ArrayList<>(); + try { + final SwaggerParseResult result = new OpenAPIV3Parser().readLocation(location, null, null); + if(result.getOpenAPI() == null || !result.getMessages().isEmpty()){ + messages = result.getMessages(); + } + }catch (Exception e){ + e.printStackTrace(); + System.exit(1); + } + return messages; + } +} \ No newline at end of file diff --git a/modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java b/modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java new file mode 100644 index 0000000000..fa68bd9568 --- /dev/null +++ b/modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java @@ -0,0 +1,28 @@ +import io.swagger.v3.parser.SwaggerParser; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class SwaggerParserCLITest { + @Test + public void validateOKFromLocationTest(){ + String []args = new String[1]; + args[0] = "src/test/resources/fileWithNoErrorMessages.yaml"; + Assert.assertTrue(SwaggerParser.readFromLocation(args[0]).size() == 0); + } + + @Test + public void validateErrorFromLocationTest(){ + String []args = new String[1]; + args[0] = "src/test/resources/fileWithValidationErrorMessages.yaml"; + Assert.assertEquals(SwaggerParser.readFromLocation(args[0]).get(0), "attribute info.version is missing"); + Assert.assertEquals(SwaggerParser.readFromLocation(args[0]).get(1), "attribute paths.'/cu'(post).responses.200.description is missing"); + } + + @Test + public void validateFileNotFoundInLocationTest(){ + String []args = new String[1]; + args[0] = "src/test/resources/WrongLocation.yaml"; + Assert.assertTrue(SwaggerParser.readFromLocation(args[0]).size() == 1); + Assert.assertEquals(SwaggerParser.readFromLocation(args[0]).get(0), "Unable to read location `src/test/resources/WrongLocation.yaml`"); + } +} \ No newline at end of file diff --git a/modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml b/modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml new file mode 100644 index 0000000000..3378904b47 --- /dev/null +++ b/modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml @@ -0,0 +1,55 @@ +openapi: 3.0.0 +info: + description: test + title: test + version: 1.0 +paths: + /cu: + post: + operationId: savecu + responses: + "200": + description: successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/AbTestFoo" + "/bar": + put: + operationId: updateBar + responses: + "200": + description: successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/CoTestBar" +servers: + - url: /foo/bar +components: + schemas: + Thing: + type: object + properties: + moreThings: + type: array + uniqueItems: true + items: + $ref: "#/components/schemas/ThingAs" + ThingAs: + type: object + properties: + concept: + $ref: "#/components/schemas/Thing" + AbTestFoo: + type: object + properties: + moreThings: + type: array + uniqueItems: true + items: + $ref: "#/components/schemas/ThingAs" + readOnly: true + CoTestBar: + allOf: + - $ref: "#/components/schemas/Thing" \ No newline at end of file diff --git a/modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml b/modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml new file mode 100644 index 0000000000..8ef7d2fed8 --- /dev/null +++ b/modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml @@ -0,0 +1,53 @@ +openapi: 3.0.0 +info: + description: test + title: test +paths: + /cu: + post: + operationId: savecu + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/AbTestFoo" + "/bar": + put: + operationId: updateBar + responses: + "200": + description: successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/CoTestBar" +servers: + - url: /foo/bar +components: + schemas: + Thing: + type: object + properties: + moreThings: + type: array + uniqueItems: true + items: + $ref: "#/components/schemas/ThingAs" + ThingAs: + type: object + properties: + concept: + $ref: "#/components/schemas/Thing" + AbTestFoo: + type: object + properties: + moreThings: + type: array + uniqueItems: true + items: + $ref: "#/components/schemas/ThingAs" + readOnly: true + CoTestBar: + allOf: + - $ref: "#/components/schemas/Thing" \ No newline at end of file diff --git a/pom.xml b/pom.xml index 27b0e8a579..985cf2294e 100644 --- a/pom.xml +++ b/pom.xml @@ -377,6 +377,7 @@ modules/swagger-parser-v3 modules/swagger-parser-v2-converter modules/swagger-parser + modules/swagger-parser-cli