diff --git a/.circleci/config.yml b/.circleci/config.yml index e58107c83..a68ccb056 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,17 +14,23 @@ jobs: - restore_cache: key: openapi-diff-{{ checksum "pom.xml" }} - - run: mvn dependency:go-offline + - run: ./mvnw package -X - save_cache: paths: - ~/.m2 key: openapi-diff-{{ checksum "pom.xml" }} - - run: mvn package -X - + - run: + name: Save test results + command: | + mkdir -p ~/test-results/junit/ + find . -type f -regex ".*/target/surefire-reports/.*xml" -exec cp {} ~/test-results/junit/ \; + when: always - store_test_results: - path: target/surefire-reports + path: ~/test-results - store_artifacts: - path: target/openapi-diff-*-SNAPSHOT.jar \ No newline at end of file + path: core/target/openapi-diff-*-SNAPSHOT.jar + - store_artifacts: + path: cli/target/openapi-diff-*-SNAPSHOT.jar diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..67c3b85f3 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: +- package-ecosystem: maven + directory: "/" + schedule: + interval: daily + time: "04:00" + open-pull-requests-limit: 10 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 000000000..d573da07c --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,33 @@ +name: Test +on: + push: + branches: + - master + pull_request: + branches: + - master +jobs: + build: + runs-on: 'ubuntu-latest' + strategy: + fail-fast: false + matrix: + java_version: ['8', '11', '14'] + env: + JAVA_OPTS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1" + steps: + - uses: actions/checkout@v2 + - name: Set up JDK + uses: joschi/setup-jdk@v1 + with: + java-version: ${{ matrix.java_version }} + - uses: actions/cache@v1 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- + - name: Build with Maven + run: ./mvnw -V -B -ff install '-DskipTests=true' '-Dmaven.javadoc.skip=true' + - name: Run tests + run: ./mvnw -V -B -ff verify diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 000000000..c6feb8bb6 Binary files /dev/null and b/.mvn/wrapper/maven-wrapper.jar differ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..72853742a --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 809c84b11..000000000 --- a/.travis.yml +++ /dev/null @@ -1,2 +0,0 @@ -language: java -script: mvn clean install diff --git a/Dockerfile b/Dockerfile index 16abb03f2..1be25c916 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,10 @@ -FROM maven:3.5-jdk-8-alpine as build -WORKDIR /app -COPY ./ /app -RUN mvn install -q && \ - mvn package -q && \ - ls /app/target/ && \ - MVN_VERSION=$(mvn -q \ - -Dexec.executable="echo" \ - -Dexec.args='${project.version}' \ - --non-recursive \ - org.codehaus.mojo:exec-maven-plugin:1.6.0:exec) && \ - mv /app/target/openapi-diff-${MVN_VERSION}-jar-with-dependencies.jar /app/openapi-diff.jar +FROM openjdk:8-jdk-alpine AS build +WORKDIR /build +COPY ./ /build +RUN ./mvnw -V -B -ff -P docker package -q FROM openjdk:8-jre-alpine WORKDIR /app -COPY --from=0 /app/openapi-diff.jar /app +COPY --from=build /build/cli/target/openapi-diff-jar-with-dependencies.jar /app/openapi-diff.jar ENTRYPOINT ["java", "-jar", "/app/openapi-diff.jar"] CMD ["--help"] diff --git a/README.md b/README.md index e260bda17..3d08121d3 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,63 @@ # OpenAPI-diff -Compare two OpenAPI specifications(3.x) and render the difference to html file or markdown file. +Compare two OpenAPI specifications (3.x) and render the difference to HTML plaintext, or Markdown files. -[![CircleCI](https://circleci.com/gh/quen2404/openapi-diff/tree/master.svg?style=svg)](https://circleci.com/gh/quen2404/openapi-diff/tree/master) +[![Test](https://github.com/joschi/openapi-diff/workflows/Test/badge.svg)](https://github.com/joschi/openapi-diff/actions?query=branch%3Amaster+workflow%3ATest+) # Requirements -`jdk1.8+` + +* Java 8 # Feature -* Supports OpenAPi spec v3.0. -* Depth comparison of parameters, responses, endpoint, http method(GET,POST,PUT,DELETE...) + +* Supports OpenAPI spec v3.0. +* Depth comparison of parameters, responses, endpoint, http method (GET,POST,PUT,DELETE...) * Supports swagger api Authorization * Render difference of property with Expression Language -* html & markdown render +* HTML & Markdown render # Maven -Available on [Maven Central](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.qdesrame%22%20AND%20a%3A%22openapi-diff%22) +Available on [Maven Central](https://search.maven.org/artifact/com.github.joschi.openapi-diff/core) ```xml - com.qdesrame - openapi-diff - 1.2.0 + com.github.joschi.openapi-diff + core + ${openapi-diff-version} ``` # Docker -Available on [Docker Hub](https://hub.docker.com/r/quen2404/openapi-diff/) as `quen2404/openapi-diff`. +Available on [Docker Hub](https://hub.docker.com/r/joschi/openapi-diff/) as `joschi/openapi-diff`. + +```bash +# docker run joschi/openapi-diff:latest +usage: openapi-diff + --debug Print debugging information + --error Print error information + --fail-on-changed Fail if API changed but is backward + compatible + --fail-on-incompatible Fail only if API changes broke backward + compatibility + -h,--help print this message + --header use given header for authorisation + --html export diff as html in given file + --info Print additional information + -l,--log use given level for log (TRACE, DEBUG, + INFO, WARN, ERROR, OFF). Default: ERROR + --markdown export diff as markdown in given file + --off No information printed + --query use query param for authorisation + --state Only output diff state: no_changes, + incompatible, compatible + --text export diff as text in given file + --trace be extra verbose + --version print the version information and exit + --warn Print warning information +``` + ## Build the image @@ -42,19 +71,20 @@ You can replace the local image name `local-openapi-diff` by any name of your ch ## Run an instance -In this example the `$(pwd)/src/test/resources` directory is mounted in the `/specs` directory of the container +In this example the `$(pwd)/core/src/test/resources` directory is mounted in the `/specs` directory of the container in readonly mode (`ro`). ```bash docker run -t \ - -v $(pwd)/src/test/resources:/specs:ro \ - quen2404/openapi-diff /specs/path_1.yaml /specs/path_2.yaml + -v $(pwd)/core/src/test/resources:/specs:ro \ + joschi/openapi-diff /specs/path_1.yaml /specs/path_2.yaml ``` -The remote name `quen2404/openapi-diff` can be replaced with `local-openapi-diff` or the name you gave to your local image. +The remote name `joschi/openapi-diff` can be replaced with `local-openapi-diff` or the name you gave to your local image. # Usage -OpenDiff can read swagger api spec from json file or http. + +openapi-diff can read OpenAPI specs from JSON files or HTTP URLs. ## Command Line @@ -70,13 +100,12 @@ usage: openapi-diff -l,--log use given level for log (TRACE, DEBUG, INFO, WARN, ERROR, OFF). Default: ERROR --markdown export diff as markdown in given file - -o,--output use given format (html, markdown) for - output in file --off No information printed --query use query param for authorisation --state Only output diff state: no_changes, incompatible, compatible --fail-on-incompatible Fail only if API changes broke backward compatibility + --fail-on-changed Fail if API changed but is backward compatible --trace be extra verbose --version print the version information and exit --warn Print warning information @@ -100,6 +129,7 @@ public class Main { ### Render difference --- #### HTML + ```java String html = new HtmlRender("Changelog", "http://deepoove.com/swagger-diff/stylesheets/demo.css") @@ -117,6 +147,7 @@ try { ``` #### Markdown + ```java String render = new MarkdownRender().render(diff); try { @@ -131,11 +162,13 @@ try { ``` ### Extensions + This project uses Java Service Provider Inteface (SPI) so additional extensions can be added. -To build your own extension, you simply need to create a `src/main/resources/META-INF/services/com.qdesrame.openapi.diff.compare.ExtensionDiff` file with the full classname of your implementation. Your class must also implement the `com.qdesrame.openapi.diff.compare.ExtensionDiff` interface. Then, including your library with the `openapi-diff` module will cause it to be triggered automatically. +To build your own extension, you simply need to create a `src/main/resources/META-INF/services/com.qdesrame.openapi.diff.core.compare.ExtensionDiff` file with the full classname of your implementation. Your class must also implement the `com.qdesrame.openapi.diff.core.compare.ExtensionDiff` interface. Then, including your library with the `openapi-diff` module will cause it to be triggered automatically. + +# Examples -# Example ### CLI Output ```text @@ -234,6 +267,7 @@ To build your own extension, you simply need to create a `src/main/resources/MET ``` ### Markdown + ```markdown ### What's New --- @@ -308,10 +342,12 @@ To build your own extension, you simply need to create a `src/main/resources/MET ``` # License + openapi-diff is released under the Apache License 2.0. # Thanks -* Adarsh Sharma / [adarshsharma](https://github.com/adarshsharma) +* Adarsh Sharma / [adarshsharma](https://github.com/adarshsharma) +* Quentin Desramé / [quen2404](https://github.com/quen2404) * [Sayi](https://github.com/Sayi) for his project [swagger-diff](https://github.com/Sayi/swagger-diff) which was a source of inspiration for this tool diff --git a/cli/pom.xml b/cli/pom.xml new file mode 100644 index 000000000..a2522bb74 --- /dev/null +++ b/cli/pom.xml @@ -0,0 +1,67 @@ + + 4.0.0 + + + com.github.joschi.openapi-diff + parent + 2.0.0-SNAPSHOT + + + cli + jar + + openapi-diff-cli + CLI for openapi-diff + + + + com.github.joschi.openapi-diff + core + 2.0.0-SNAPSHOT + + + commons-cli + commons-cli + + + org.apache.commons + commons-lang3 + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + + + com.qdesrame.openapi.diff.cli.Main + + + openapi-diff + + + + make-assembly + package + + single + + + + + + + diff --git a/src/main/java/com/qdesrame/openapi/diff/Main.java b/cli/src/main/java/com/qdesrame/openapi/diff/cli/Main.java similarity index 74% rename from src/main/java/com/qdesrame/openapi/diff/Main.java rename to cli/src/main/java/com/qdesrame/openapi/diff/cli/Main.java index 4a254fc39..f84517c4e 100644 --- a/src/main/java/com/qdesrame/openapi/diff/Main.java +++ b/cli/src/main/java/com/qdesrame/openapi/diff/cli/Main.java @@ -1,12 +1,19 @@ -package com.qdesrame.openapi.diff; +package com.qdesrame.openapi.diff.cli; -import com.qdesrame.openapi.diff.model.ChangedOpenApi; -import com.qdesrame.openapi.diff.output.ConsoleRender; -import com.qdesrame.openapi.diff.output.HtmlRender; -import com.qdesrame.openapi.diff.output.MarkdownRender; +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.output.ConsoleRender; +import com.qdesrame.openapi.diff.core.output.HtmlRender; +import com.qdesrame.openapi.diff.core.output.MarkdownRender; import java.io.File; import java.io.IOException; -import org.apache.commons.cli.*; +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.CommandLineParser; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Option; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.log4j.Level; @@ -33,6 +40,11 @@ public static void main(String... args) { .longOpt("fail-on-incompatible") .desc("Fail only if API changes broke backward compatibility") .build()); + options.addOption( + Option.builder() + .longOpt("fail-on-changed") + .desc("Fail if API changed but is backward compatible") + .build()); options.addOption(Option.builder().longOpt("trace").desc("be extra verbose").build()); options.addOption( Option.builder().longOpt("debug").desc("Print debugging information").build()); @@ -66,15 +78,6 @@ public static void main(String... args) { .argName("property=value") .desc("use query param for authorisation") .build()); - options.addOption( - Option.builder("o") - .longOpt("output") - .hasArgs() - .numberOfArgs(2) - .valueSeparator() - .argName("format=file") - .desc("use given format (html, markdown) for output in file") - .build()); options.addOption( Option.builder() .longOpt("markdown") @@ -89,6 +92,13 @@ public static void main(String... args) { .argName("file") .desc("export diff as html in given file") .build()); + options.addOption( + Option.builder() + .longOpt("text") + .hasArg() + .argName("file") + .desc("export diff as text in given file") + .build()); final String message = "Hello logging!"; // create the parser @@ -148,45 +158,29 @@ public static void main(String... args) { if (!logLevel.equals("OFF")) { System.out.println(consoleRender.render(result)); } - HtmlRender htmlRender = new HtmlRender(); - MarkdownRender mdRender = new MarkdownRender(); - String output = null; - String outputFile = null; if (line.hasOption("html")) { - output = htmlRender.render(result); - outputFile = line.getOptionValue("html"); + HtmlRender htmlRender = new HtmlRender(); + String output = htmlRender.render(result); + String outputFile = line.getOptionValue("html"); + writeOutput(output, outputFile); } if (line.hasOption("markdown")) { - output = mdRender.render(result); - outputFile = line.getOptionValue("markdown"); + MarkdownRender mdRender = new MarkdownRender(); + String output = mdRender.render(result); + String outputFile = line.getOptionValue("markdown"); + writeOutput(output, outputFile); } - if (line.hasOption("output")) { - String[] outputValues = line.getOptionValues("output"); - if (outputValues[0].equalsIgnoreCase("markdown")) { - output = mdRender.render(result); - } else if (outputValues[0].equalsIgnoreCase("html")) { - output = htmlRender.render(result); - } else { - throw new ParseException("Invalid output format"); - } - outputFile = outputValues[1]; - } - if (output != null && outputFile != null) { - File file = new File(outputFile); - logger.debug("Output file: {}", file.getAbsolutePath()); - try { - FileUtils.writeStringToFile(file, output); - } catch (IOException e) { - logger.error("Impossible to write output to file {}", outputFile, e); - System.exit(2); - } + if (line.hasOption("text")) { + String output = consoleRender.render(result); + String outputFile = line.getOptionValue("text"); + writeOutput(output, outputFile); } if (line.hasOption("state")) { System.out.println(result.isChanged().getValue()); System.exit(0); } else if (line.hasOption("fail-on-incompatible")) { System.exit(result.isCompatible() ? 0 : 1); - } else { + } else if (line.hasOption("fail-on-changed")) { System.exit(result.isUnchanged() ? 0 : 1); } } catch (ParseException e) { @@ -204,6 +198,17 @@ public static void main(String... args) { } } + private static void writeOutput(String output, String outputFile) { + File file = new File(outputFile); + logger.debug("Output file: {}", file.getAbsolutePath()); + try { + FileUtils.writeStringToFile(file, output); + } catch (IOException e) { + logger.error("Impossible to write output to file {}", outputFile, e); + System.exit(2); + } + } + public static void printHelp(Options options) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("openapi-diff ", options); diff --git a/src/main/resources/log4j.properties b/cli/src/main/resources/log4j.properties similarity index 100% rename from src/main/resources/log4j.properties rename to cli/src/main/resources/log4j.properties diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 000000000..63074e15d --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,66 @@ + + 4.0.0 + + + com.github.joschi.openapi-diff + parent + 2.0.0-SNAPSHOT + + + core + jar + + openapi-diff-core + Library for comparing two OpenAPI specifications. + + + + io.swagger.parser.v3 + swagger-parser-v3 + + + io.swagger.parser.v3 + swagger-parser + + + io.swagger.parser.v3 + swagger-parser-v2-converter + + + com.j2html + j2html + + + org.apache.commons + commons-collections4 + + + org.slf4j + slf4j-api + + + commons-httpclient + commons-httpclient + + + org.projectlombok + lombok + provided + + + org.junit.jupiter + junit-jupiter + test + + + org.assertj + assertj-core + test + + + org.slf4j + slf4j-simple + test + + + diff --git a/src/main/java/com/qdesrame/openapi/diff/OpenApiCompare.java b/core/src/main/java/com/qdesrame/openapi/diff/core/OpenApiCompare.java similarity index 90% rename from src/main/java/com/qdesrame/openapi/diff/OpenApiCompare.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/OpenApiCompare.java index eb9eefff9..a48f5d7dd 100644 --- a/src/main/java/com/qdesrame/openapi/diff/OpenApiCompare.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/OpenApiCompare.java @@ -1,9 +1,9 @@ -package com.qdesrame.openapi.diff; +package com.qdesrame.openapi.diff.core; -import com.qdesrame.openapi.diff.compare.OpenApiDiff; -import com.qdesrame.openapi.diff.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.compare.OpenApiDiff; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import io.swagger.parser.OpenAPIParser; import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.parser.OpenAPIV3Parser; import io.swagger.v3.parser.core.models.AuthorizationValue; import io.swagger.v3.parser.core.models.ParseOptions; import java.io.File; @@ -11,7 +11,7 @@ public class OpenApiCompare { - private static OpenAPIV3Parser openApiParser = new OpenAPIV3Parser(); + private static OpenAPIParser openApiParser = new OpenAPIParser(); private static ParseOptions options = new ParseOptions(); static { @@ -113,6 +113,6 @@ private static OpenAPI readContent(String content, List auth } private static OpenAPI readLocation(String location, List auths) { - return openApiParser.read(location, auths, options); + return openApiParser.readLocation(location, auths, options).getOpenAPI(); } } diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ApiResponseDiff.java similarity index 82% rename from src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ApiResponseDiff.java index 03b0216ae..b64913a23 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ApiResponseDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ApiResponseDiff.java @@ -1,10 +1,10 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedApiResponse; -import com.qdesrame.openapi.diff.model.ChangedResponse; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedApiResponse; +import com.qdesrame.openapi.diff.core.model.ChangedResponse; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponses; import java.util.LinkedHashMap; diff --git a/core/src/main/java/com/qdesrame/openapi/diff/core/compare/CacheKey.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/CacheKey.java new file mode 100644 index 000000000..ccf034282 --- /dev/null +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/CacheKey.java @@ -0,0 +1,12 @@ +package com.qdesrame.openapi.diff.core.compare; + +import com.qdesrame.openapi.diff.core.model.DiffContext; +import lombok.Value; + +@Value +public class CacheKey { + + String left; + String right; + DiffContext context; +} diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/Comparable.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/Comparable.java similarity index 60% rename from src/main/java/com/qdesrame/openapi/diff/compare/Comparable.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/Comparable.java index 79ffb7ec8..34133e0fc 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/Comparable.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/Comparable.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; public interface Comparable { diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ContentDiff.java similarity index 81% rename from src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ContentDiff.java index 67eeda204..ecaff7781 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ContentDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ContentDiff.java @@ -1,11 +1,11 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isUnchanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isUnchanged; -import com.qdesrame.openapi.diff.model.ChangedContent; -import com.qdesrame.openapi.diff.model.ChangedMediaType; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedContent; +import com.qdesrame.openapi.diff.core.model.ChangedMediaType; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.MediaType; import java.util.*; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionDiff.java similarity index 59% rename from src/main/java/com/qdesrame/openapi/diff/compare/ExtensionDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionDiff.java index e838f118a..485d965d0 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionDiff.java @@ -1,8 +1,8 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import com.qdesrame.openapi.diff.model.Change; -import com.qdesrame.openapi.diff.model.Changed; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.Change; +import com.qdesrame.openapi.diff.core.model.Changed; +import com.qdesrame.openapi.diff.core.model.DiffContext; public interface ExtensionDiff { diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionsDiff.java similarity index 86% rename from src/main/java/com/qdesrame/openapi/diff/compare/ExtensionsDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionsDiff.java index 0b2690b4b..7a27c0862 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ExtensionsDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ExtensionsDiff.java @@ -1,12 +1,12 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; -import static com.qdesrame.openapi.diff.utils.Copy.copyMap; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.Copy.copyMap; -import com.qdesrame.openapi.diff.model.Change; -import com.qdesrame.openapi.diff.model.Changed; -import com.qdesrame.openapi.diff.model.ChangedExtensions; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.Change; +import com.qdesrame.openapi.diff.core.model.Changed; +import com.qdesrame.openapi.diff.core.model.ChangedExtensions; +import com.qdesrame.openapi.diff.core.model.DiffContext; import java.util.*; import java.util.function.Function; @@ -29,9 +29,7 @@ public boolean isParentApplicable( if (extensions.size() == 0) { return true; } - return extensions - .entrySet() - .stream() + return extensions.entrySet().stream() .map( entry -> executeExtension( diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeaderDiff.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeaderDiff.java index fc37f8f38..b7e391033 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/HeaderDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeaderDiff.java @@ -1,11 +1,11 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedHeader; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.ChangedHeader; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.headers.Header; import java.util.HashSet; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeadersDiff.java similarity index 80% rename from src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeadersDiff.java index 6bc6ede80..e78d4eba5 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/HeadersDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/HeadersDiff.java @@ -1,10 +1,10 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedHeader; -import com.qdesrame.openapi.diff.model.ChangedHeaders; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedHeader; +import com.qdesrame.openapi.diff.core.model.ChangedHeaders; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.headers.Header; import java.util.LinkedHashMap; import java.util.List; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ListDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ListDiff.java similarity index 86% rename from src/main/java/com/qdesrame/openapi/diff/compare/ListDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ListDiff.java index 748ecb0aa..db794db4f 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ListDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ListDiff.java @@ -1,9 +1,7 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import com.qdesrame.openapi.diff.model.ChangedList; -import lombok.Getter; +import com.qdesrame.openapi.diff.core.model.ChangedList; -@Getter public class ListDiff { public static , X> K diff(K instance) { diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/MapKeyDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MapKeyDiff.java similarity index 96% rename from src/main/java/com/qdesrame/openapi/diff/compare/MapKeyDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/MapKeyDiff.java index f1bdf775d..d63de1278 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/MapKeyDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MapKeyDiff.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; import java.util.ArrayList; import java.util.LinkedHashMap; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/MetadataDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MetadataDiff.java similarity index 76% rename from src/main/java/com/qdesrame/openapi/diff/compare/MetadataDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/MetadataDiff.java index d8d418135..684a8442b 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/MetadataDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/MetadataDiff.java @@ -1,9 +1,9 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedMetadata; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedMetadata; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.Components; import java.util.Optional; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowDiff.java similarity index 87% rename from src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowDiff.java index d3d5b8f71..264419bb6 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowDiff.java @@ -1,9 +1,9 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; import static java.util.Optional.ofNullable; -import com.qdesrame.openapi.diff.model.ChangedOAuthFlow; +import com.qdesrame.openapi.diff.core.model.ChangedOAuthFlow; import io.swagger.v3.oas.models.security.OAuthFlow; import java.util.Map; import java.util.Objects; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowsDiff.java similarity index 89% rename from src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowsDiff.java index ae2f84fc7..49c6ce7fe 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/OAuthFlowsDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OAuthFlowsDiff.java @@ -1,9 +1,9 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; import static java.util.Optional.ofNullable; -import com.qdesrame.openapi.diff.model.ChangedOAuthFlows; +import com.qdesrame.openapi.diff.core.model.ChangedOAuthFlows; import io.swagger.v3.oas.models.security.OAuthFlows; import java.util.Map; import java.util.Optional; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OpenApiDiff.java similarity index 86% rename from src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OpenApiDiff.java index 5b89c8274..af6c06248 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/OpenApiDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OpenApiDiff.java @@ -1,10 +1,14 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.compare.PathsDiff.valOrEmpty; +import static com.qdesrame.openapi.diff.core.compare.PathsDiff.valOrEmpty; -import com.qdesrame.openapi.diff.model.*; -import com.qdesrame.openapi.diff.model.ChangedExtensions; -import com.qdesrame.openapi.diff.utils.EndpointUtils; +import com.qdesrame.openapi.diff.core.model.ChangedExtensions; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.model.ChangedOperation; +import com.qdesrame.openapi.diff.core.model.ChangedPath; +import com.qdesrame.openapi.diff.core.model.ChangedPaths; +import com.qdesrame.openapi.diff.core.model.Endpoint; +import com.qdesrame.openapi.diff.core.utils.EndpointUtils; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.security.SecurityRequirement; @@ -22,7 +26,7 @@ public class OpenApiDiff { public static final String SWAGGER_VERSION_V2 = "2.0"; - private static Logger logger = LoggerFactory.getLogger(OpenApiDiff.class); + private static final Logger logger = LoggerFactory.getLogger(OpenApiDiff.class); private PathsDiff pathsDiff; private PathDiff pathDiff; @@ -44,8 +48,8 @@ public class OpenApiDiff { private ExtensionsDiff extensionsDiff; private MetadataDiff metadataDiff; - private OpenAPI oldSpecOpenApi; - private OpenAPI newSpecOpenApi; + private final OpenAPI oldSpecOpenApi; + private final OpenAPI newSpecOpenApi; private List newEndpoints; private List missingEndpoints; private List changedOperations; @@ -138,27 +142,19 @@ private void preProcess(OpenAPI openApi) { .values() .forEach( pathItem -> - pathItem - .readOperationsMap() - .values() - .stream() + pathItem.readOperationsMap().values().stream() .filter(operation -> operation.getSecurity() != null) .forEach( operation -> operation.setSecurity( - operation - .getSecurity() - .stream() + operation.getSecurity().stream() .distinct() .collect(Collectors.toList())))); paths .values() .forEach( pathItem -> - pathItem - .readOperationsMap() - .values() - .stream() + pathItem.readOperationsMap().values().stream() .filter(operation -> operation.getSecurity() == null) .forEach(operation -> operation.setSecurity(distinctSecurityRequirements))); } diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OperationDiff.java similarity index 90% rename from src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/OperationDiff.java index 4c3de2cf8..9ad0ba6e0 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/OperationDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/OperationDiff.java @@ -1,10 +1,10 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedOperation; -import com.qdesrame.openapi.diff.model.ChangedParameters; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedOperation; +import com.qdesrame.openapi.diff.core.model.ChangedParameters; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.parameters.Parameter; import java.util.List; @@ -84,8 +84,7 @@ public void removePathParameters(Map pathParameters, ChangedPara } public void removePathParameter(String name, List parameters) { - parameters - .stream() + parameters.stream() .filter(p -> "path".equals(p.getIn()) && name.equals(p.getName())) .findFirst() .ifPresent(parameters::remove); diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParameterDiff.java similarity index 89% rename from src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParameterDiff.java index 7a9d9b970..14c4fca0e 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ParameterDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParameterDiff.java @@ -1,11 +1,11 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedParameter; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.ChangedParameter; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.parameters.Parameter; import java.util.HashSet; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParametersDiff.java similarity index 86% rename from src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParametersDiff.java index 33f6fb1d8..98097ce68 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ParametersDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ParametersDiff.java @@ -1,11 +1,11 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedParameters; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.ChangedParameters; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.parameters.Parameter; import java.util.ArrayList; @@ -39,8 +39,7 @@ public ParametersDiff(OpenApiDiff openApiDiff) { public static Optional contains( Components components, List parameters, Parameter parameter) { - return parameters - .stream() + return parameters.stream() .filter(param -> same(refPointer.resolveRef(components, param, param.get$ref()), parameter)) .findFirst(); } diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/PathDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathDiff.java similarity index 86% rename from src/main/java/com/qdesrame/openapi/diff/compare/PathDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathDiff.java index ef0e0e60a..5017dac7f 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/PathDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathDiff.java @@ -1,9 +1,9 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedPath; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedPath; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; import java.util.List; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/PathsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathsDiff.java similarity index 89% rename from src/main/java/com/qdesrame/openapi/diff/compare/PathsDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathsDiff.java index f057d9a3b..2f0a25632 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/PathsDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/PathsDiff.java @@ -1,9 +1,9 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedPaths; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedPaths; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.Paths; import java.util.*; @@ -42,9 +42,7 @@ public Optional diff( PathItem leftPath = left.get(url); String template = normalizePath(url); Optional result = - right - .keySet() - .stream() + right.keySet().stream() .filter(s -> normalizePath(s).equals(template)) .findFirst(); if (result.isPresent()) { diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ReferenceDiffCache.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ReferenceDiffCache.java similarity index 94% rename from src/main/java/com/qdesrame/openapi/diff/compare/ReferenceDiffCache.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ReferenceDiffCache.java index e15f04222..a8ff0eac6 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ReferenceDiffCache.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ReferenceDiffCache.java @@ -1,6 +1,6 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.DiffContext; import java.util.HashMap; import java.util.HashSet; import java.util.Map; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/RequestBodyDiff.java similarity index 89% rename from src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/RequestBodyDiff.java index 731873947..fb9be20fe 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/RequestBodyDiff.java @@ -1,12 +1,12 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; import static java.util.Optional.ofNullable; -import com.qdesrame.openapi.diff.model.ChangedRequestBody; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.ChangedRequestBody; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.parameters.RequestBody; import java.util.HashSet; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/ResponseDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ResponseDiff.java similarity index 86% rename from src/main/java/com/qdesrame/openapi/diff/compare/ResponseDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/ResponseDiff.java index a6ded3578..4a87865ba 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/ResponseDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/ResponseDiff.java @@ -1,11 +1,11 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedResponse; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.ChangedResponse; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.responses.ApiResponse; import java.util.HashSet; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SchemaDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SchemaDiff.java similarity index 95% rename from src/main/java/com/qdesrame/openapi/diff/compare/SchemaDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SchemaDiff.java index 8642c91f6..f88c1bf54 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/SchemaDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SchemaDiff.java @@ -1,14 +1,14 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; import static java.util.Optional.ofNullable; -import com.qdesrame.openapi.diff.compare.schemadiffresult.ArraySchemaDiffResult; -import com.qdesrame.openapi.diff.compare.schemadiffresult.ComposedSchemaDiffResult; -import com.qdesrame.openapi.diff.compare.schemadiffresult.SchemaDiffResult; -import com.qdesrame.openapi.diff.model.ChangedSchema; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.compare.schemadiffresult.ArraySchemaDiffResult; +import com.qdesrame.openapi.diff.core.compare.schemadiffresult.ComposedSchemaDiffResult; +import com.qdesrame.openapi.diff.core.compare.schemadiffresult.SchemaDiffResult; +import com.qdesrame.openapi.diff.core.model.ChangedSchema; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.media.ArraySchema; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityDiffInfo.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityDiffInfo.java similarity index 81% rename from src/main/java/com/qdesrame/openapi/diff/compare/SecurityDiffInfo.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityDiffInfo.java index 510227ca6..cd052df4c 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityDiffInfo.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityDiffInfo.java @@ -1,19 +1,17 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import com.qdesrame.openapi.diff.model.ChangedList; +import com.qdesrame.openapi.diff.core.model.ChangedList; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import java.util.List; import java.util.Optional; import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; -/** Created by adarsh.sharma on 11/01/18. */ -@Getter -@Setter +@Data @AllArgsConstructor public class SecurityDiffInfo { + private String ref; private SecurityScheme securityScheme; private List scopes; @@ -30,8 +28,7 @@ public static SecurityRequirement getSecurityRequirement( public static Optional> containsList( List> securityRequirements, List leftSecurities) { - return securityRequirements - .stream() + return securityRequirements.stream() .filter(rightSecurities -> sameList(leftSecurities, rightSecurities)) .findFirst(); } @@ -44,14 +41,20 @@ public static boolean sameList( @Override public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } SecurityDiffInfo that = (SecurityDiffInfo) o; if (securityScheme != null ? !securityScheme.equals(that.securityScheme) - : that.securityScheme != null) return false; + : that.securityScheme != null) { + return false; + } return scopes != null ? scopes.equals(that.scopes) : that.scopes == null; } diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementDiff.java similarity index 90% rename from src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementDiff.java index 6b9e3a806..74607ccd9 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementDiff.java @@ -1,10 +1,10 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedSecurityRequirement; -import com.qdesrame.openapi.diff.model.ChangedSecurityScheme; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedSecurityRequirement; +import com.qdesrame.openapi.diff.core.model.ChangedSecurityScheme; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; @@ -30,9 +30,7 @@ public SecurityRequirementDiff(OpenApiDiff openApiDiff) { public static SecurityRequirement getCopy(LinkedHashMap> right) { SecurityRequirement newSecurityRequirement = new SecurityRequirement(); - right - .entrySet() - .stream() + right.entrySet().stream() .forEach(e -> newSecurityRequirement.put(e.getKey(), new ArrayList<>(e.getValue()))); return newSecurityRequirement; } diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementsDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementsDiff.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementsDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementsDiff.java index 0472cea92..cdb5ae31d 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/SecurityRequirementsDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecurityRequirementsDiff.java @@ -1,12 +1,12 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedSecurityRequirement; -import com.qdesrame.openapi.diff.model.ChangedSecurityRequirements; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.ChangedSecurityRequirement; +import com.qdesrame.openapi.diff.core.model.ChangedSecurityRequirements; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; @@ -39,8 +39,7 @@ public SecurityRequirementsDiff(OpenApiDiff openApiDiff) { public Optional contains( List securityRequirements, SecurityRequirement left) { - return securityRequirements - .stream() + return securityRequirements.stream() .filter(rightSecurities -> same(left, rightSecurities)) .findFirst(); } @@ -63,9 +62,7 @@ public boolean same(SecurityRequirement left, SecurityRequirement right) { private List> getListOfSecuritySchemes( Components components, SecurityRequirement securityRequirement) { - return securityRequirement - .keySet() - .stream() + return securityRequirement.keySet().stream() .map( x -> { SecurityScheme result = components.getSecuritySchemes().get(x); diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/SecuritySchemeDiff.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecuritySchemeDiff.java similarity index 93% rename from src/main/java/com/qdesrame/openapi/diff/compare/SecuritySchemeDiff.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecuritySchemeDiff.java index 5749a46b4..e4270c530 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/SecuritySchemeDiff.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/SecuritySchemeDiff.java @@ -1,10 +1,10 @@ -package com.qdesrame.openapi.diff.compare; +package com.qdesrame.openapi.diff.core.compare; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; -import com.qdesrame.openapi.diff.model.ChangedSecurityScheme; -import com.qdesrame.openapi.diff.model.ChangedSecuritySchemeScopes; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.ChangedSecurityScheme; +import com.qdesrame.openapi.diff.core.model.ChangedSecuritySchemeScopes; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.security.SecurityScheme; import java.util.HashSet; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ArraySchemaDiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ArraySchemaDiffResult.java similarity index 82% rename from src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ArraySchemaDiffResult.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ArraySchemaDiffResult.java index 63cbfb54a..34bdb7e34 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ArraySchemaDiffResult.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ArraySchemaDiffResult.java @@ -1,8 +1,8 @@ -package com.qdesrame.openapi.diff.compare.schemadiffresult; +package com.qdesrame.openapi.diff.core.compare.schemadiffresult; -import com.qdesrame.openapi.diff.compare.OpenApiDiff; -import com.qdesrame.openapi.diff.model.ChangedSchema; -import com.qdesrame.openapi.diff.model.DiffContext; +import com.qdesrame.openapi.diff.core.compare.OpenApiDiff; +import com.qdesrame.openapi.diff.core.model.ChangedSchema; +import com.qdesrame.openapi.diff.core.model.DiffContext; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.Schema; diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ComposedSchemaDiffResult.java similarity index 77% rename from src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ComposedSchemaDiffResult.java index 5121072ca..163581570 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/ComposedSchemaDiffResult.java @@ -1,12 +1,12 @@ -package com.qdesrame.openapi.diff.compare.schemadiffresult; +package com.qdesrame.openapi.diff.core.compare.schemadiffresult; -import com.qdesrame.openapi.diff.compare.MapKeyDiff; -import com.qdesrame.openapi.diff.compare.OpenApiDiff; -import com.qdesrame.openapi.diff.model.ChangedOneOfSchema; -import com.qdesrame.openapi.diff.model.ChangedSchema; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.compare.MapKeyDiff; +import com.qdesrame.openapi.diff.core.compare.OpenApiDiff; +import com.qdesrame.openapi.diff.core.model.ChangedOneOfSchema; +import com.qdesrame.openapi.diff.core.model.ChangedSchema; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.media.ComposedSchema; import io.swagger.v3.oas.models.media.Discriminator; @@ -42,15 +42,15 @@ public , X> Optional diff( Discriminator leftDis = leftComposedSchema.getDiscriminator(); Discriminator rightDis = rightComposedSchema.getDiscriminator(); - if (leftDis == null - || rightDis == null - || leftDis.getPropertyName() == null - || rightDis.getPropertyName() == null) { - throw new IllegalArgumentException( - "discriminator or property not found for oneOf schema"); - } else if (!leftDis.getPropertyName().equals(rightDis.getPropertyName()) - || (CollectionUtils.isEmpty(leftComposedSchema.getOneOf()) - || CollectionUtils.isEmpty(rightComposedSchema.getOneOf()))) { + if ((leftDis == null && rightDis != null) + || (leftDis != null && rightDis == null) + || (leftDis != null + && rightDis != null + && ((leftDis.getPropertyName() == null && rightDis.getPropertyName() != null) + || (leftDis.getPropertyName() != null && rightDis.getPropertyName() == null) + || (leftDis.getPropertyName() != null + && rightDis.getPropertyName() != null + && !leftDis.getPropertyName().equals(rightDis.getPropertyName()))))) { changedSchema.setOldSchema(left); changedSchema.setNewSchema(right); changedSchema.setDiscriminatorPropertyChanged(true); @@ -109,15 +109,14 @@ private Map getMapping(ComposedSchema composedSchema) { reverseMapping.put(ref, schemaName); } - if (composedSchema.getDiscriminator().getMapping() != null) { + if (composedSchema.getDiscriminator() != null + && composedSchema.getDiscriminator().getMapping() != null) { for (String ref : composedSchema.getDiscriminator().getMapping().keySet()) { reverseMapping.put(composedSchema.getDiscriminator().getMapping().get(ref), ref); } } - return reverseMapping - .entrySet() - .stream() + return reverseMapping.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); } } diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/SchemaDiffResult.java similarity index 91% rename from src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/SchemaDiffResult.java index 772a2998e..eae8efa35 100644 --- a/src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/SchemaDiffResult.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/compare/schemadiffresult/SchemaDiffResult.java @@ -1,15 +1,15 @@ -package com.qdesrame.openapi.diff.compare.schemadiffresult; +package com.qdesrame.openapi.diff.core.compare.schemadiffresult; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isChanged; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isChanged; import static java.util.Optional.ofNullable; -import com.qdesrame.openapi.diff.compare.ListDiff; -import com.qdesrame.openapi.diff.compare.MapKeyDiff; -import com.qdesrame.openapi.diff.compare.OpenApiDiff; -import com.qdesrame.openapi.diff.model.Change; -import com.qdesrame.openapi.diff.model.ChangedSchema; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.model.schema.*; +import com.qdesrame.openapi.diff.core.compare.ListDiff; +import com.qdesrame.openapi.diff.core.compare.MapKeyDiff; +import com.qdesrame.openapi.diff.core.compare.OpenApiDiff; +import com.qdesrame.openapi.diff.core.model.Change; +import com.qdesrame.openapi.diff.core.model.ChangedSchema; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.schema.*; import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.media.Schema; import java.util.*; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/Change.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Change.java similarity index 59% rename from src/main/java/com/qdesrame/openapi/diff/model/Change.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/Change.java index fb2345a6e..db87ae77e 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/Change.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Change.java @@ -1,18 +1,13 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; -import lombok.Getter; +import lombok.Value; -@Getter +@Value public class Change { - private final T oldValue; - private final T newValue; - private final Type type; - private Change(T oldValue, T newValue, Type type) { - this.oldValue = oldValue; - this.newValue = newValue; - this.type = type; - } + T oldValue; + T newValue; + Type type; public static Change changed(T oldValue, T newValue) { return new Change<>(oldValue, newValue, Type.CHANGED); diff --git a/src/main/java/com/qdesrame/openapi/diff/model/Changed.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Changed.java similarity index 92% rename from src/main/java/com/qdesrame/openapi/diff/model/Changed.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/Changed.java index 543a0ab79..bc5bc828f 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/Changed.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Changed.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import java.util.Optional; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedApiResponse.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedApiResponse.java similarity index 91% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedApiResponse.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedApiResponse.java index 0a32379f1..9b98dad81 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedApiResponse.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedApiResponse.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.oas.models.responses.ApiResponses; @@ -7,15 +7,13 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 22/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedApiResponse implements ComposedChanged { + private final ApiResponses oldApiResponses; private final ApiResponses newApiResponses; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedContent.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedContent.java similarity index 90% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedContent.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedContent.java index 2502ad27b..26afee7ee 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedContent.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedContent.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.MediaType; @@ -6,15 +6,13 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 22/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedContent implements ComposedChanged { + private final Content oldContent; private final Content newContent; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedExtensions.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedExtensions.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedExtensions.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedExtensions.java index 5d0fabbe7..62fd7a44d 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedExtensions.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedExtensions.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import java.util.Collection; import java.util.LinkedHashMap; @@ -6,14 +6,11 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; +import lombok.Data; -@Getter -@Setter -@Accessors +@Data public class ChangedExtensions implements ComposedChanged { + private final Map oldExtensions; private final Map newExtensions; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeader.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeader.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedHeader.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeader.java index db4441f24..64a14ad15 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeader.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeader.java @@ -1,17 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.headers.Header; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 28/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedHeader implements ComposedChanged { + private final Header oldHeader; private final Header newHeader; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeaders.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeaders.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedHeaders.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeaders.java index e0790cddc..b76a2ee65 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedHeaders.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedHeaders.java @@ -1,18 +1,16 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.headers.Header; import java.util.ArrayList; import java.util.List; import java.util.Map; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 28/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedHeaders implements ComposedChanged { + private final Map oldHeaders; private final Map newHeaders; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedList.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedList.java similarity index 92% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedList.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedList.java index 365dc28a6..31455e685 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedList.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedList.java @@ -1,16 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public abstract class ChangedList implements Changed { + protected DiffContext context; protected List oldValue; protected List newValue; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMediaType.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMediaType.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedMediaType.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMediaType.java index 0181b6867..c0b11b279 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMediaType.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMediaType.java @@ -1,16 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.media.Schema; import java.util.Collections; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedMediaType implements ComposedChanged { + private final Schema oldSchema; private final Schema newSchema; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMetadata.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMetadata.java similarity index 77% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedMetadata.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMetadata.java index 424771d6e..edd6b2e81 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedMetadata.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedMetadata.java @@ -1,12 +1,10 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import java.util.Objects; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedMetadata implements Changed { diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlow.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlow.java similarity index 85% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlow.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlow.java index 0fa6955f7..92638d812 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlow.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlow.java @@ -1,17 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.security.OAuthFlow; import java.util.Collections; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 12/01/18. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedOAuthFlow implements ComposedChanged { + private OAuthFlow oldOAuthFlow; private OAuthFlow newOAuthFlow; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlows.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlows.java similarity index 87% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlows.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlows.java index f498af44d..168ed71c6 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOAuthFlows.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOAuthFlows.java @@ -1,17 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.security.OAuthFlows; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 12/01/18. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedOAuthFlows implements ComposedChanged { + private final OAuthFlows oldOAuthFlows; private final OAuthFlows newOAuthFlows; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOneOfSchema.java similarity index 88% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOneOfSchema.java index 57b4b9ca3..2d28fa4f1 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOneOfSchema.java @@ -1,18 +1,16 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.media.Schema; import java.util.ArrayList; import java.util.List; import java.util.Map; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 22/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedOneOfSchema implements ComposedChanged { + private final Map oldMapping; private final Map newMapping; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOpenApi.java similarity index 83% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOpenApi.java index 265577879..66a199c8a 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOpenApi.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOpenApi.java @@ -1,19 +1,17 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; -import com.qdesrame.openapi.diff.utils.EndpointUtils; +import com.qdesrame.openapi.diff.core.utils.EndpointUtils; import io.swagger.v3.oas.models.OpenAPI; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 22/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedOpenApi implements ComposedChanged { + private OpenAPI oldSpecOpenApi; private OpenAPI newSpecOpenApi; @@ -23,8 +21,7 @@ public class ChangedOpenApi implements ComposedChanged { private ChangedExtensions changedExtensions; public List getDeprecatedEndpoints() { - return changedOperations - .stream() + return changedOperations.stream() .filter(ChangedOperation::isDeprecated) .map( c -> diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOperation.java similarity index 91% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOperation.java index a21e5660b..781439318 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedOperation.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedOperation.java @@ -1,19 +1,18 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; -import static com.qdesrame.openapi.diff.model.Changed.result; +import static com.qdesrame.openapi.diff.core.model.Changed.result; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedOperation implements ComposedChanged { + private Operation oldOperation; private Operation newOperation; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameter.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameter.java similarity index 93% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedParameter.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameter.java index e212dee74..b52cbfad0 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameter.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameter.java @@ -1,16 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.parameters.Parameter; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedParameter implements ComposedChanged { + private final DiffContext context; private Parameter oldParameter; private Parameter newParameter; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameters.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameters.java similarity index 81% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedParameters.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameters.java index 6d522e07e..b8d8a06fe 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedParameters.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedParameters.java @@ -1,14 +1,12 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.parameters.Parameter; import java.util.ArrayList; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedParameters implements ComposedChanged { private final List oldParameterList; @@ -39,7 +37,12 @@ public DiffResult isCoreChanged() { if (increased.isEmpty() && missing.isEmpty()) { return DiffResult.NO_CHANGES; } - if (increased.stream().noneMatch(Parameter::getRequired) && missing.isEmpty()) { + if (increased.stream() + .noneMatch( + p -> { + return p.getRequired() != null && p.getRequired(); + }) + && missing.isEmpty()) { return DiffResult.COMPATIBLE; } return DiffResult.INCOMPATIBLE; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPath.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPath.java similarity index 93% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedPath.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPath.java index e1f4426f7..8406632b1 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPath.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPath.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; @@ -8,14 +8,13 @@ import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedPath implements ComposedChanged { + private final String pathUrl; private final PathItem oldPath; private final PathItem newPath; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPaths.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPaths.java similarity index 91% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedPaths.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPaths.java index c3991b5d8..4ae8c41dd 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedPaths.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedPaths.java @@ -1,16 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.PathItem; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; -@Getter -@Setter +@Data public class ChangedPaths implements ComposedChanged { + private final Map oldPathMap; private final Map newPathMap; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedRequestBody.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedRequestBody.java similarity index 87% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedRequestBody.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedRequestBody.java index 7bab24076..b0111e024 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedRequestBody.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedRequestBody.java @@ -1,17 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.parameters.RequestBody; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 27/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedRequestBody implements ComposedChanged { + private final RequestBody oldRequestBody; private final RequestBody newRequestBody; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedResponse.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedResponse.java similarity index 90% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedResponse.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedResponse.java index 0a85ef97e..8f23fb573 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedResponse.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedResponse.java @@ -1,16 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.responses.ApiResponse; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedResponse implements ComposedChanged { + private final ApiResponse oldApiResponse; private final ApiResponse newApiResponse; private final DiffContext context; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSchema.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSchema.java similarity index 77% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSchema.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSchema.java index ea3d1b2e2..722e3d99e 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSchema.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSchema.java @@ -1,21 +1,24 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; -import com.qdesrame.openapi.diff.model.schema.*; +import com.qdesrame.openapi.diff.core.model.schema.ChangedEnum; +import com.qdesrame.openapi.diff.core.model.schema.ChangedMaxLength; +import com.qdesrame.openapi.diff.core.model.schema.ChangedReadOnly; +import com.qdesrame.openapi.diff.core.model.schema.ChangedRequired; +import com.qdesrame.openapi.diff.core.model.schema.ChangedWriteOnly; +import io.swagger.v3.oas.models.PathItem; import io.swagger.v3.oas.models.media.Schema; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 22/12/17. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedSchema implements ComposedChanged { + protected DiffContext context; protected Schema oldSchema; protected Schema newSchema; @@ -76,10 +79,9 @@ public DiffResult isCoreChanged() { && !discriminatorPropertyChanged) { return DiffResult.NO_CHANGES; } - boolean compatibleForRequest = (oldSchema != null || newSchema == null); boolean compatibleForResponse = missingProperties.isEmpty() && (oldSchema == null || newSchema != null); - if ((context.isRequest() && compatibleForRequest + if ((context.isRequest() && compatibleForRequest() || context.isResponse() && compatibleForResponse) && !changedType && !discriminatorPropertyChanged) { @@ -87,4 +89,14 @@ public DiffResult isCoreChanged() { } return DiffResult.INCOMPATIBLE; } + + private boolean compatibleForRequest() { + if (PathItem.HttpMethod.PUT.equals(context.getMethod())) { + if (increasedProperties.size() > 0) { + return false; + } + } + + return (oldSchema != null || newSchema == null); + } } diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirement.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirement.java similarity index 91% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirement.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirement.java index a1361db09..5d950f061 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirement.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirement.java @@ -1,17 +1,15 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.security.SecurityRequirement; import java.util.ArrayList; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; -/** Created by adarsh.sharma on 06/01/18. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedSecurityRequirement implements ComposedChanged { + private SecurityRequirement oldSecurityRequirement; private SecurityRequirement newSecurityRequirement; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirements.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirements.java similarity index 92% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirements.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirements.java index 61e6d7f02..81b935bf8 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityRequirements.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityRequirements.java @@ -1,18 +1,16 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.security.SecurityRequirement; import java.util.ArrayList; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; import org.apache.commons.collections4.CollectionUtils; -/** Created by adarsh.sharma on 06/01/18. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedSecurityRequirements implements ComposedChanged { + private List oldSecurityRequirements; private List newSecurityRequirements; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityScheme.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityScheme.java similarity index 94% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityScheme.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityScheme.java index 62c2ae136..c7ea64bd1 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecurityScheme.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecurityScheme.java @@ -1,17 +1,16 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.security.SecurityScheme; import java.util.Arrays; import java.util.List; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import lombok.experimental.Accessors; /** Created by adarsh.sharma on 11/01/18. */ -@Getter -@Setter +@Data @Accessors(chain = true) public class ChangedSecurityScheme implements ComposedChanged { + private SecurityScheme oldSecurityScheme; private SecurityScheme newSecurityScheme; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecuritySchemeScopes.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecuritySchemeScopes.java similarity index 81% rename from src/main/java/com/qdesrame/openapi/diff/model/ChangedSecuritySchemeScopes.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecuritySchemeScopes.java index 418046ca0..82a216c53 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ChangedSecuritySchemeScopes.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ChangedSecuritySchemeScopes.java @@ -1,9 +1,7 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import java.util.List; -import lombok.Getter; -@Getter public class ChangedSecuritySchemeScopes extends ChangedList { public ChangedSecuritySchemeScopes(List oldValue, List newValue) { diff --git a/src/main/java/com/qdesrame/openapi/diff/model/ComposedChanged.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ComposedChanged.java similarity index 87% rename from src/main/java/com/qdesrame/openapi/diff/model/ComposedChanged.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/ComposedChanged.java index f0aa5af0a..cd338a3f0 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/ComposedChanged.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/ComposedChanged.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import java.util.List; import java.util.Objects; @@ -16,8 +16,7 @@ public interface ComposedChanged extends Changed { default DiffResult isChanged() { DiffResult elementsResult = DiffResult.fromWeight( - getChangedElements() - .stream() + getChangedElements().stream() .filter(Objects::nonNull) .map(Changed::isChanged) .mapToInt(DiffResult::getWeight) diff --git a/src/main/java/com/qdesrame/openapi/diff/model/DiffContext.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffContext.java similarity index 98% rename from src/main/java/com/qdesrame/openapi/diff/model/DiffContext.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffContext.java index c38516b63..391be8a53 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/DiffContext.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffContext.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.PathItem; import java.util.HashMap; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/DiffResult.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffResult.java similarity index 95% rename from src/main/java/com/qdesrame/openapi/diff/model/DiffResult.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffResult.java index 7b7f66b55..ff707bfca 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/DiffResult.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/DiffResult.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import static java.lang.String.format; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/Endpoint.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Endpoint.java similarity index 77% rename from src/main/java/com/qdesrame/openapi/diff/model/Endpoint.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/Endpoint.java index 0c1b0f048..bc940c33c 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/Endpoint.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/Endpoint.java @@ -1,12 +1,10 @@ -package com.qdesrame.openapi.diff.model; +package com.qdesrame.openapi.diff.core.model; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; -@Getter -@Setter +@Data public class Endpoint { private String pathUrl; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedEnum.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedEnum.java similarity index 66% rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedEnum.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedEnum.java index 06ba01982..8d5480a85 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedEnum.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedEnum.java @@ -1,12 +1,10 @@ -package com.qdesrame.openapi.diff.model.schema; +package com.qdesrame.openapi.diff.core.model.schema; -import com.qdesrame.openapi.diff.model.ChangedList; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.model.DiffResult; +import com.qdesrame.openapi.diff.core.model.ChangedList; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.DiffResult; import java.util.List; -import lombok.Getter; -@Getter public class ChangedEnum extends ChangedList { public ChangedEnum(List oldValue, List newValue, DiffContext context) { diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedMaxLength.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedMaxLength.java similarity index 50% rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedMaxLength.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedMaxLength.java index 915d78560..31780dc66 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedMaxLength.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedMaxLength.java @@ -1,20 +1,17 @@ -package com.qdesrame.openapi.diff.model.schema; +package com.qdesrame.openapi.diff.core.model.schema; -import com.qdesrame.openapi.diff.model.Changed; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.model.DiffResult; +import com.qdesrame.openapi.diff.core.model.Changed; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.DiffResult; import java.util.Objects; +import lombok.Value; +@Value public class ChangedMaxLength implements Changed { - private final Integer oldValue; - private final Integer newValue; - private final DiffContext context; - public ChangedMaxLength(Integer oldValue, Integer newValue, DiffContext context) { - this.oldValue = oldValue; - this.newValue = newValue; - this.context = context; - } + Integer oldValue; + Integer newValue; + DiffContext context; @Override public DiffResult isChanged() { diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedReadOnly.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedReadOnly.java similarity index 82% rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedReadOnly.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedReadOnly.java index 815e8cbe7..433684ac9 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedReadOnly.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedReadOnly.java @@ -1,8 +1,8 @@ -package com.qdesrame.openapi.diff.model.schema; +package com.qdesrame.openapi.diff.core.model.schema; -import com.qdesrame.openapi.diff.model.Changed; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.model.DiffResult; +import com.qdesrame.openapi.diff.core.model.Changed; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.DiffResult; import java.util.Objects; import java.util.Optional; diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedRequired.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedRequired.java similarity index 67% rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedRequired.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedRequired.java index 9774b8fb1..bd4756dad 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedRequired.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedRequired.java @@ -1,12 +1,10 @@ -package com.qdesrame.openapi.diff.model.schema; +package com.qdesrame.openapi.diff.core.model.schema; -import com.qdesrame.openapi.diff.model.ChangedList; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.model.DiffResult; +import com.qdesrame.openapi.diff.core.model.ChangedList; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.DiffResult; import java.util.List; -import lombok.Getter; -@Getter public class ChangedRequired extends ChangedList { public ChangedRequired(List oldValue, List newValue, DiffContext context) { diff --git a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedWriteOnly.java b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedWriteOnly.java similarity index 82% rename from src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedWriteOnly.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedWriteOnly.java index 5f525662a..358fb3622 100644 --- a/src/main/java/com/qdesrame/openapi/diff/model/schema/ChangedWriteOnly.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/model/schema/ChangedWriteOnly.java @@ -1,8 +1,8 @@ -package com.qdesrame.openapi.diff.model.schema; +package com.qdesrame.openapi.diff.core.model.schema; -import com.qdesrame.openapi.diff.model.Changed; -import com.qdesrame.openapi.diff.model.DiffContext; -import com.qdesrame.openapi.diff.model.DiffResult; +import com.qdesrame.openapi.diff.core.model.Changed; +import com.qdesrame.openapi.diff.core.model.DiffContext; +import com.qdesrame.openapi.diff.core.model.DiffResult; import java.util.Objects; import java.util.Optional; diff --git a/src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java similarity index 94% rename from src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java index 7fe4d8a08..499dff44e 100644 --- a/src/main/java/com/qdesrame/openapi/diff/output/ConsoleRender.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java @@ -1,10 +1,10 @@ -package com.qdesrame.openapi.diff.output; +package com.qdesrame.openapi.diff.core.output; -import static com.qdesrame.openapi.diff.model.Changed.result; +import static com.qdesrame.openapi.diff.core.model.Changed.result; -import com.qdesrame.openapi.diff.model.*; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.*; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.parameters.Parameter; @@ -213,12 +213,19 @@ private String properties( String propPrefix, String title, Map properties, DiffContext context) { StringBuilder sb = new StringBuilder(); if (properties != null) { - properties.forEach( - (key, value) -> sb.append(property(propPrefix + key, title, resolve(value)))); + properties.forEach((key, value) -> sb.append(resolveProperty(propPrefix, value, key, title))); } return sb.toString(); } + private String resolveProperty(String propPrefix, Schema value, String key, String title) { + try { + return property(propPrefix + key, title, resolve(value)); + } catch (Exception e) { + return property(propPrefix + key, title, type(value)); + } + } + protected String property(String name, String title, Schema schema) { return property(name, title, type(schema)); } @@ -234,7 +241,9 @@ protected Schema resolve(Schema schema) { protected String type(Schema schema) { String result = "object"; - if (schema instanceof ArraySchema) { + if (schema == null) { + result = "no schema"; + } else if (schema instanceof ArraySchema) { result = "array"; } else if (schema.getType() != null) { result = schema.getType(); diff --git a/src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java similarity index 93% rename from src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java index 756bc045a..cc585e446 100644 --- a/src/main/java/com/qdesrame/openapi/diff/output/HtmlRender.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java @@ -1,11 +1,11 @@ -package com.qdesrame.openapi.diff.output; +package com.qdesrame.openapi.diff.core.output; -import static com.qdesrame.openapi.diff.model.Changed.result; +import static com.qdesrame.openapi.diff.core.model.Changed.result; import static j2html.TagCreator.*; -import com.qdesrame.openapi.diff.model.*; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.*; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.MediaType; import io.swagger.v3.oas.models.media.Schema; @@ -269,7 +269,16 @@ private void properties( Map properties, DiffContext context) { if (properties != null) { - properties.forEach((key, value) -> property(output, propPrefix + key, title, resolve(value))); + properties.forEach((key, value) -> resolveProperty(output, propPrefix, key, value, title)); + } + } + + private void resolveProperty( + ContainerTag output, String propPrefix, String key, Schema value, String title) { + try { + property(output, propPrefix + key, title, resolve(value)); + } catch (Exception e) { + property(output, propPrefix + key, title, type(value)); } } @@ -288,7 +297,9 @@ protected Schema resolve(Schema schema) { protected String type(Schema schema) { String result = "object"; - if (schema instanceof ArraySchema) { + if (schema == null) { + result = "no schema"; + } else if (schema instanceof ArraySchema) { result = "array"; } else if (schema.getType() != null) { result = schema.getType(); @@ -347,7 +358,10 @@ private ContainerTag li_changedParam(ChangedParameter changeParam) { return li_deprecatedParam(changeParam); } boolean changeRequired = changeParam.isChangeRequired(); - boolean changeDescription = changeParam.getDescription().isDifferent(); + boolean changeDescription = + Optional.ofNullable(changeParam.getDescription()) + .map(ChangedMetadata::isDifferent) + .orElse(false); Parameter rightParam = changeParam.getNewParameter(); Parameter leftParam = changeParam.getNewParameter(); ContainerTag li = li().withText(changeParam.getName() + " in " + changeParam.getIn()); diff --git a/src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java similarity index 94% rename from src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java index 9e1729e70..88e8801b7 100644 --- a/src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java @@ -1,12 +1,12 @@ -package com.qdesrame.openapi.diff.output; +package com.qdesrame.openapi.diff.core.output; -import static com.qdesrame.openapi.diff.model.Changed.result; -import static com.qdesrame.openapi.diff.utils.ChangedUtils.isUnchanged; +import static com.qdesrame.openapi.diff.core.model.Changed.result; +import static com.qdesrame.openapi.diff.core.utils.ChangedUtils.isUnchanged; import static java.lang.String.format; -import com.qdesrame.openapi.diff.model.*; -import com.qdesrame.openapi.diff.utils.RefPointer; -import com.qdesrame.openapi.diff.utils.RefType; +import com.qdesrame.openapi.diff.core.model.*; +import com.qdesrame.openapi.diff.core.utils.RefPointer; +import com.qdesrame.openapi.diff.core.utils.RefType; import io.swagger.v3.oas.models.headers.Header; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ComposedSchema; @@ -63,8 +63,7 @@ protected String sectionTitle(String title) { protected String listEndpoints(String title, List endpoints) { if (null == endpoints || endpoints.size() == 0) return ""; StringBuilder sb = new StringBuilder(sectionTitle(title)); - endpoints - .stream() + endpoints.stream() .map(e -> itemEndpoint(e.getMethod().toString(), e.getPathUrl(), e.getSummary())) .forEach(sb::append); return sb.toString(); @@ -85,8 +84,7 @@ protected String titleH5(String title) { protected String listEndpoints(List changedOperations) { if (null == changedOperations || changedOperations.size() == 0) return ""; StringBuilder sb = new StringBuilder(sectionTitle("What's Changed")); - changedOperations - .stream() + changedOperations.stream() .map( operation -> { StringBuilder details = @@ -122,10 +120,7 @@ protected String responses(ChangedApiResponse changedApiResponse) { StringBuilder sb = new StringBuilder("\n"); sb.append(listResponse("New response", changedApiResponse.getIncreased())); sb.append(listResponse("Deleted response", changedApiResponse.getMissing())); - changedApiResponse - .getChanged() - .entrySet() - .stream() + changedApiResponse.getChanged().entrySet().stream() .map(e -> this.itemResponse(e.getKey(), e.getValue())) .forEach(sb::append); return sb.toString(); @@ -133,9 +128,7 @@ protected String responses(ChangedApiResponse changedApiResponse) { protected String listResponse(String title, Map responses) { StringBuilder sb = new StringBuilder(); - responses - .entrySet() - .stream() + responses.entrySet().stream() .map(e -> this.itemResponse(title, e.getKey(), e.getValue())) .forEach(sb::append); return sb.toString(); @@ -177,10 +170,7 @@ protected String headers(ChangedHeaders headers) { if (headers != null) { sb.append(listHeader("New header", headers.getIncreased())) .append(listHeader("Deleted header", headers.getMissing())); - headers - .getChanged() - .entrySet() - .stream() + headers.getChanged().entrySet().stream() .map(e -> this.itemHeader(e.getKey(), e.getValue())) .forEach(sb::append); } @@ -189,9 +179,7 @@ protected String headers(ChangedHeaders headers) { protected String listHeader(String title, Map headers) { StringBuilder sb = new StringBuilder(); - headers - .entrySet() - .stream() + headers.entrySet().stream() .map(e -> this.itemHeader(title, e.getKey(), e.getValue())) .forEach(sb::append); return sb.toString(); @@ -225,10 +213,7 @@ protected String bodyContent(String prefix, ChangedContent changedContent) { } else { deepness = 0; } - changedContent - .getChanged() - .entrySet() - .stream() + changedContent.getChanged().entrySet().stream() .map(e -> this.itemContent(deepness, e.getKey(), e.getValue())) .forEach(e -> sb.append(prefix).append(e)); return sb.toString(); @@ -240,9 +225,7 @@ protected String bodyContent(ChangedContent changedContent) { protected String listContent(String prefix, String title, Map mediaTypes) { StringBuilder sb = new StringBuilder(); - mediaTypes - .entrySet() - .stream() + mediaTypes.entrySet().stream() .map(e -> this.itemContent(title, e.getKey(), e.getValue())) .forEach(e -> sb.append(prefix).append(e)); return sb.toString(); @@ -340,18 +323,14 @@ protected String schema(int deepness, ComposedSchema schema, DiffContext context StringBuilder sb = new StringBuilder(); if (schema.getAllOf() != null && schema.getAllOf() != null) { LOGGER.debug("All of schema"); - schema - .getAllOf() - .stream() + schema.getAllOf().stream() .map(this::resolve) .forEach(composedChild -> sb.append(schema(deepness, composedChild, context))); } if (schema.getOneOf() != null && schema.getOneOf() != null) { LOGGER.debug("One of schema"); sb.append(format("%sOne of:\n\n", indent(deepness))); - schema - .getOneOf() - .stream() + schema.getOneOf().stream() .map(this::resolve) .forEach(composedChild -> sb.append(schema(deepness + 1, composedChild, context))); } @@ -402,7 +381,7 @@ protected String properties( if (properties != null) { properties.forEach( (key, value) -> { - sb.append(property(deepness, title, key, resolve(value))); + sb.append(resolveProperty(deepness, value, key, title)); if (showContent) { sb.append(schema(deepness + 1, resolve(value), context)); } @@ -411,6 +390,14 @@ protected String properties( return sb.toString(); } + private String resolveProperty(int deepness, Schema value, String key, String title) { + try { + return property(deepness, title, key, resolve(value)); + } catch (Exception e) { + return property(deepness, title, key, type(value), ""); + } + } + protected String property(int deepness, String name, ChangedSchema schema) { StringBuilder sb = new StringBuilder(); String type = type(schema.getNewSchema()); diff --git a/core/src/main/java/com/qdesrame/openapi/diff/core/output/Render.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/Render.java new file mode 100644 index 000000000..9e2368480 --- /dev/null +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/Render.java @@ -0,0 +1,8 @@ +package com.qdesrame.openapi.diff.core.output; + +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; + +public interface Render { + + String render(ChangedOpenApi diff); +} diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/ChangedUtils.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/ChangedUtils.java similarity index 82% rename from src/main/java/com/qdesrame/openapi/diff/utils/ChangedUtils.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/ChangedUtils.java index 85628c2b7..f392d2bea 100644 --- a/src/main/java/com/qdesrame/openapi/diff/utils/ChangedUtils.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/ChangedUtils.java @@ -1,6 +1,6 @@ -package com.qdesrame.openapi.diff.utils; +package com.qdesrame.openapi.diff.core.utils; -import com.qdesrame.openapi.diff.model.Changed; +import com.qdesrame.openapi.diff.core.model.Changed; import java.util.Optional; public class ChangedUtils { diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/Copy.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/Copy.java similarity index 84% rename from src/main/java/com/qdesrame/openapi/diff/utils/Copy.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/Copy.java index d798ab64d..0704413ce 100644 --- a/src/main/java/com/qdesrame/openapi/diff/utils/Copy.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/Copy.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.utils; +package com.qdesrame.openapi.diff.core.utils; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/EndpointUtils.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/EndpointUtils.java similarity index 95% rename from src/main/java/com/qdesrame/openapi/diff/utils/EndpointUtils.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/EndpointUtils.java index 392f61cda..f1b5b57ae 100644 --- a/src/main/java/com/qdesrame/openapi/diff/utils/EndpointUtils.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/EndpointUtils.java @@ -1,6 +1,6 @@ -package com.qdesrame.openapi.diff.utils; +package com.qdesrame.openapi.diff.core.utils; -import com.qdesrame.openapi.diff.model.Endpoint; +import com.qdesrame.openapi.diff.core.model.Endpoint; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.PathItem; import java.util.ArrayList; diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/RefPointer.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefPointer.java similarity index 97% rename from src/main/java/com/qdesrame/openapi/diff/utils/RefPointer.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefPointer.java index a1382bfa8..8eda2b800 100644 --- a/src/main/java/com/qdesrame/openapi/diff/utils/RefPointer.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefPointer.java @@ -1,4 +1,4 @@ -package com.qdesrame.openapi.diff.utils; +package com.qdesrame.openapi.diff.core.utils; import io.swagger.v3.oas.models.Components; import java.util.Map; diff --git a/src/main/java/com/qdesrame/openapi/diff/utils/RefType.java b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefType.java similarity index 72% rename from src/main/java/com/qdesrame/openapi/diff/utils/RefType.java rename to core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefType.java index 7b1f6b8b6..44b34e68f 100644 --- a/src/main/java/com/qdesrame/openapi/diff/utils/RefType.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/utils/RefType.java @@ -1,8 +1,7 @@ -package com.qdesrame.openapi.diff.utils; +package com.qdesrame.openapi.diff.core.utils; import lombok.Getter; -/** Created by adarsh.sharma on 07/01/18. */ @Getter public enum RefType { REQUEST_BODIES("requestBodies"), @@ -17,5 +16,5 @@ public enum RefType { this.name = name; } - private String name; + private final String name; } diff --git a/src/main/resources/demo.css b/core/src/main/resources/demo.css similarity index 100% rename from src/main/resources/demo.css rename to core/src/main/resources/demo.css diff --git a/src/main/resources/template.html b/core/src/main/resources/template.html similarity index 100% rename from src/main/resources/template.html rename to core/src/main/resources/template.html diff --git a/src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/AddPropDiffTest.java diff --git a/core/src/test/java/com/qdesrame/openapi/test/AddPropPutDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/AddPropPutDiffTest.java new file mode 100644 index 000000000..70852e888 --- /dev/null +++ b/core/src/test/java/com/qdesrame/openapi/test/AddPropPutDiffTest.java @@ -0,0 +1,22 @@ +package com.qdesrame.openapi.test; + +import static com.qdesrame.openapi.test.TestUtils.assertOpenApiAreEquals; +import static com.qdesrame.openapi.test.TestUtils.assertOpenApiBackwardIncompatible; + +import org.junit.jupiter.api.Test; + +/** Created by trohrberg on 23/03/19. */ +public class AddPropPutDiffTest { + private final String OPENAPI_DOC1 = "add-prop-put-1.yaml"; + private final String OPENAPI_DOC2 = "add-prop-put-2.yaml"; + + @Test + public void testDiffSame() { + assertOpenApiAreEquals(OPENAPI_DOC1, OPENAPI_DOC1); + } + + @Test + public void testDiffDifferent() { + assertOpenApiBackwardIncompatible(OPENAPI_DOC1, OPENAPI_DOC2); + } +} diff --git a/src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/AllOfDiffTest.java diff --git a/src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/ArrayDiffTest.java diff --git a/src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java b/core/src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java rename to core/src/test/java/com/qdesrame/openapi/test/BackwardCompatibilityTest.java diff --git a/core/src/test/java/com/qdesrame/openapi/test/ConsoleRenderTest.java b/core/src/test/java/com/qdesrame/openapi/test/ConsoleRenderTest.java new file mode 100644 index 000000000..705897c50 --- /dev/null +++ b/core/src/test/java/com/qdesrame/openapi/test/ConsoleRenderTest.java @@ -0,0 +1,18 @@ +package com.qdesrame.openapi.test; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.output.ConsoleRender; +import org.junit.jupiter.api.Test; + +public class ConsoleRenderTest { + @Test + public void renderDoesNotFailWhenPropertyHasBeenRemoved() { + ConsoleRender render = new ConsoleRender(); + ChangedOpenApi diff = + OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml"); + assertThat(render.render(diff)).isNotBlank(); + } +} diff --git a/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java similarity index 88% rename from src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java index f075124f8..e0ca1c549 100644 --- a/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java +++ b/core/src/test/java/com/qdesrame/openapi/test/ContentDiffTest.java @@ -2,8 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.qdesrame.openapi.diff.OpenApiCompare; -import com.qdesrame.openapi.diff.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; import org.junit.jupiter.api.Test; public class ContentDiffTest { diff --git a/core/src/test/java/com/qdesrame/openapi/test/HtmlRenderTest.java b/core/src/test/java/com/qdesrame/openapi/test/HtmlRenderTest.java new file mode 100644 index 000000000..c0b29c6e4 --- /dev/null +++ b/core/src/test/java/com/qdesrame/openapi/test/HtmlRenderTest.java @@ -0,0 +1,18 @@ +package com.qdesrame.openapi.test; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.output.HtmlRender; +import org.junit.jupiter.api.Test; + +public class HtmlRenderTest { + @Test + public void renderDoesNotFailWhenPropertyHasBeenRemoved() { + HtmlRender render = new HtmlRender(); + ChangedOpenApi diff = + OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml"); + assertThat(render.render(diff)).isNotBlank(); + } +} diff --git a/core/src/test/java/com/qdesrame/openapi/test/MarkdownRenderTest.java b/core/src/test/java/com/qdesrame/openapi/test/MarkdownRenderTest.java new file mode 100644 index 000000000..54e6978f1 --- /dev/null +++ b/core/src/test/java/com/qdesrame/openapi/test/MarkdownRenderTest.java @@ -0,0 +1,18 @@ +package com.qdesrame.openapi.test; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.output.MarkdownRender; +import org.junit.jupiter.api.Test; + +public class MarkdownRenderTest { + @Test + public void renderDoesNotFailWhenPropertyHasBeenRemoved() { + MarkdownRender render = new MarkdownRender(); + ChangedOpenApi diff = + OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml"); + assertThat(render.render(diff)).isNotBlank(); + } +} diff --git a/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java similarity index 78% rename from src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java index 5f6779454..16a4eb5c4 100644 --- a/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java +++ b/core/src/test/java/com/qdesrame/openapi/test/OneOfDiffTest.java @@ -16,6 +16,8 @@ public class OneOfDiffTest { private final String OPENAPI_DOC5 = "composed_schema_2.yaml"; private final String OPENAPI_DOC6 = "oneOf_discriminator-changed_1.yaml"; private final String OPENAPI_DOC7 = "oneOf_discriminator-changed_2.yaml"; + private final String OPENAPI_DOC8 = "oneOf_discriminator-missing_1.yaml"; + private final String OPENAPI_DOC9 = "oneOf_discriminator-missing_2.yaml"; @Test public void testDiffSame() { @@ -42,4 +44,14 @@ public void testOneOfDiscrimitatorChanged() { // The oneOf 'discriminator' changed: 'realtype' -> 'othertype': assertOpenApiBackwardIncompatible(OPENAPI_DOC6, OPENAPI_DOC7); } + + @Test + public void testOneOfDiscrimitatorMissingSameOrder() { + assertOpenApiAreEquals(OPENAPI_DOC8, OPENAPI_DOC8); + } + + @Test + public void testOneOfDiscrimitatorMissingDifferentOrder() { + assertOpenApiAreEquals(OPENAPI_DOC8, OPENAPI_DOC9); + } } diff --git a/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java similarity index 90% rename from src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java index 379737bc3..896c38bcd 100644 --- a/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java +++ b/core/src/test/java/com/qdesrame/openapi/test/OpenApiDiffTest.java @@ -3,12 +3,12 @@ import static com.qdesrame.openapi.test.TestUtils.assertOpenApiAreEquals; import static org.assertj.core.api.Assertions.assertThat; -import com.qdesrame.openapi.diff.OpenApiCompare; -import com.qdesrame.openapi.diff.model.ChangedOpenApi; -import com.qdesrame.openapi.diff.model.ChangedOperation; -import com.qdesrame.openapi.diff.model.Endpoint; -import com.qdesrame.openapi.diff.output.HtmlRender; -import com.qdesrame.openapi.diff.output.MarkdownRender; +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.model.ChangedOperation; +import com.qdesrame.openapi.diff.core.model.Endpoint; +import com.qdesrame.openapi.diff.core.output.HtmlRender; +import com.qdesrame.openapi.diff.core.output.MarkdownRender; import java.io.FileWriter; import java.io.IOException; import java.util.List; diff --git a/src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/ParameterDiffTest.java diff --git a/src/test/java/com/qdesrame/openapi/test/PathDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/PathDiffTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/PathDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/PathDiffTest.java diff --git a/src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java b/core/src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java rename to core/src/test/java/com/qdesrame/openapi/test/RecursiveSchemaTest.java diff --git a/src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java b/core/src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java rename to core/src/test/java/com/qdesrame/openapi/test/ReferenceDiffCacheTest.java diff --git a/src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java similarity index 100% rename from src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/RequestDiffTest.java diff --git a/core/src/test/java/com/qdesrame/openapi/test/ResponseAddedContentSchemaTest.java b/core/src/test/java/com/qdesrame/openapi/test/ResponseAddedContentSchemaTest.java new file mode 100644 index 000000000..baaf2a10f --- /dev/null +++ b/core/src/test/java/com/qdesrame/openapi/test/ResponseAddedContentSchemaTest.java @@ -0,0 +1,47 @@ +package com.qdesrame.openapi.test; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.model.ChangedResponse; +import com.qdesrame.openapi.diff.core.output.ConsoleRender; +import com.qdesrame.openapi.diff.core.output.HtmlRender; +import com.qdesrame.openapi.diff.core.output.MarkdownRender; +import io.swagger.v3.oas.models.media.Content; +import java.util.Map; +import org.junit.jupiter.api.Test; + +public class ResponseAddedContentSchemaTest { + + private final String OPENAPI_DOC1 = "response_schema_added_1.yaml"; + private final String OPENAPI_DOC2 = "response_schema_added_2.yaml"; + + @Test + public void testDiffDifferent() { + ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2); + + assertThat(changedOpenApi.getNewEndpoints()).isEmpty(); + assertThat(changedOpenApi.getMissingEndpoints()).isEmpty(); + assertThat(changedOpenApi.getChangedOperations()).isNotEmpty(); + + Map changedResponses = + changedOpenApi.getChangedOperations().get(0).getApiResponses().getChanged(); + assertThat(changedResponses).containsKey("200"); + + ChangedResponse changedResponse = changedResponses.get("200"); + Content oldContent = changedResponse.getOldApiResponse().getContent(); + Content newContent = changedResponse.getNewApiResponse().getContent(); + assertThat(oldContent.get("application/json").getSchema()).isNull(); + assertThat(newContent.get("application/json").getSchema()).isNotNull(); + } + + @Test + public void testDiffCanBeRendered() { + ChangedOpenApi changedOpenApi = OpenApiCompare.fromLocations(OPENAPI_DOC1, OPENAPI_DOC2); + + assertThat(new ConsoleRender().render(changedOpenApi)).isNotBlank(); + assertThat(new HtmlRender().render(changedOpenApi)).isNotBlank(); + assertThat(new MarkdownRender().render(changedOpenApi)).isNotBlank(); + } +} diff --git a/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java similarity index 83% rename from src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java index 7a1462a46..17947e792 100644 --- a/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java +++ b/core/src/test/java/com/qdesrame/openapi/test/ResponseHeaderDiffTest.java @@ -2,10 +2,10 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.qdesrame.openapi.diff.OpenApiCompare; -import com.qdesrame.openapi.diff.model.ChangedHeaders; -import com.qdesrame.openapi.diff.model.ChangedOpenApi; -import com.qdesrame.openapi.diff.model.ChangedResponse; +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedHeaders; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.model.ChangedResponse; import java.util.Map; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java b/core/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java similarity index 92% rename from src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java rename to core/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java index b8532a814..4c78ae39c 100644 --- a/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java +++ b/core/src/test/java/com/qdesrame/openapi/test/SecurityDiffTest.java @@ -3,8 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; -import com.qdesrame.openapi.diff.OpenApiCompare; -import com.qdesrame.openapi.diff.model.*; +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.*; import io.swagger.v3.oas.models.security.SecurityRequirement; import org.junit.jupiter.api.Test; @@ -21,9 +21,7 @@ public void testDiffDifferent() { assertThat(changedOpenApi.getChangedOperations().size() == 3); ChangedOperation changedOperation1 = - changedOpenApi - .getChangedOperations() - .stream() + changedOpenApi.getChangedOperations().stream() .filter(x -> x.getPathUrl().equals("/pet/{petId}")) .findFirst() .get(); @@ -51,9 +49,7 @@ public void testDiffDifferent() { .isEqualTo("read:pets")); ChangedOperation changedOperation2 = - changedOpenApi - .getChangedOperations() - .stream() + changedOpenApi.getChangedOperations().stream() .filter(x -> x.getPathUrl().equals("/pet3")) .findFirst() .get(); @@ -73,9 +69,7 @@ public void testDiffDifferent() { assertThat(changedImplicitOAuthFlow2.isAuthorizationUrl()).isTrue(); ChangedOperation changedOperation3 = - changedOpenApi - .getChangedOperations() - .stream() + changedOpenApi.getChangedOperations().stream() .filter(x -> x.getPathUrl().equals("/pet/findByStatus2")) .findFirst() .get(); diff --git a/core/src/test/java/com/qdesrame/openapi/test/Swagger2CompatibilityTest.java b/core/src/test/java/com/qdesrame/openapi/test/Swagger2CompatibilityTest.java new file mode 100644 index 000000000..6b8487231 --- /dev/null +++ b/core/src/test/java/com/qdesrame/openapi/test/Swagger2CompatibilityTest.java @@ -0,0 +1,22 @@ +package com.qdesrame.openapi.test; + +import static com.qdesrame.openapi.test.TestUtils.assertOpenApiAreEquals; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +@Disabled +public class Swagger2CompatibilityTest { + private final String SWAGGER_DOC1 = "petstore_swagger2.yaml"; + private final String OPENAPI_DOC2 = "petstore_openapi3.yaml"; + + @Test + public void testEqual() { + assertOpenApiAreEquals(SWAGGER_DOC1, SWAGGER_DOC1); + } + + @Test + public void testSwagger2ToOpenapi3() { + assertOpenApiAreEquals(SWAGGER_DOC1, OPENAPI_DOC2); + } +} diff --git a/src/test/java/com/qdesrame/openapi/test/TestUtils.java b/core/src/test/java/com/qdesrame/openapi/test/TestUtils.java similarity index 93% rename from src/test/java/com/qdesrame/openapi/test/TestUtils.java rename to core/src/test/java/com/qdesrame/openapi/test/TestUtils.java index aaa947d14..c58f50e69 100644 --- a/src/test/java/com/qdesrame/openapi/test/TestUtils.java +++ b/core/src/test/java/com/qdesrame/openapi/test/TestUtils.java @@ -3,8 +3,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.slf4j.LoggerFactory.getLogger; -import com.qdesrame.openapi.diff.OpenApiCompare; -import com.qdesrame.openapi.diff.model.ChangedOpenApi; +import com.qdesrame.openapi.diff.core.OpenApiCompare; +import com.qdesrame.openapi.diff.core.model.ChangedOpenApi; import org.slf4j.Logger; public class TestUtils { diff --git a/src/test/resources/add-prop-1.yaml b/core/src/test/resources/add-prop-1.yaml similarity index 100% rename from src/test/resources/add-prop-1.yaml rename to core/src/test/resources/add-prop-1.yaml diff --git a/src/test/resources/add-prop-2.yaml b/core/src/test/resources/add-prop-2.yaml similarity index 100% rename from src/test/resources/add-prop-2.yaml rename to core/src/test/resources/add-prop-2.yaml diff --git a/core/src/test/resources/add-prop-put-1.yaml b/core/src/test/resources/add-prop-put-1.yaml new file mode 100644 index 000000000..e764df63f --- /dev/null +++ b/core/src/test/resources/add-prop-put-1.yaml @@ -0,0 +1,71 @@ +openapi: 3.0.0 +servers: + - description: SwaggerHub API Auto Mocking + url: https://virtserver.swaggerhub.com/anshul10s/pet-store/1.0.0 +info: + description: | + This is a sample Petstore server. You can find + out more about Swagger at + [http://swagger.io](http://swagger.io) or on + [irc.freenode.net, #swagger](http://swagger.io/irc/). + version: "1.0.0" + title: Swagger Petstore + termsOfService: 'http://swagger.io/terms/' + contact: + email: apiteam@swagger.io + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +tags: + - name: pet + description: Everything about your Pets + externalDocs: + description: Find out more + url: 'http://swagger.io' + - name: store + description: Access to Petstore orders + - name: user + description: Operations about user + externalDocs: + description: Find out more about our store + url: 'http://swagger.io' +paths: + /store/inventory/{id}: + put: + tags: + - store + summary: Updates the inventory with the given id + description: Updates the inventory with the given id and returns it + operationId: putInventory + parameters: + - name: id + in: path + description: Unique Id of the inventory + required: true + example: a-b-c-d + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Inventory' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Inventory' +externalDocs: + description: Find out more about Swagger + url: 'http://swagger.io' +components: + schemas: + Inventory: + type: object + properties: + id: + type: string + details: + type: count \ No newline at end of file diff --git a/core/src/test/resources/add-prop-put-2.yaml b/core/src/test/resources/add-prop-put-2.yaml new file mode 100644 index 000000000..392301c8f --- /dev/null +++ b/core/src/test/resources/add-prop-put-2.yaml @@ -0,0 +1,73 @@ +openapi: 3.0.0 +servers: + - description: SwaggerHub API Auto Mocking + url: https://virtserver.swaggerhub.com/anshul10s/pet-store/1.0.0 +info: + description: | + This is a sample Petstore server. You can find + out more about Swagger at + [http://swagger.io](http://swagger.io) or on + [irc.freenode.net, #swagger](http://swagger.io/irc/). + version: "1.0.0" + title: Swagger Petstore + termsOfService: 'http://swagger.io/terms/' + contact: + email: apiteam@swagger.io + license: + name: Apache 2.0 + url: 'http://www.apache.org/licenses/LICENSE-2.0.html' +tags: + - name: pet + description: Everything about your Pets + externalDocs: + description: Find out more + url: 'http://swagger.io' + - name: store + description: Access to Petstore orders + - name: user + description: Operations about user + externalDocs: + description: Find out more about our store + url: 'http://swagger.io' +paths: + /store/inventory/{id}: + put: + tags: + - store + summary: Updates the inventory with the given id + description: Updates the inventory with the given id and returns it + operationId: putInventory + parameters: + - name: id + in: path + description: Unique Id of the inventory + required: true + example: a-b-c-d + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Inventory' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Inventory' +externalDocs: + description: Find out more about Swagger + url: 'http://swagger.io' +components: + schemas: + Inventory: + type: object + properties: + id: + type: string + details: + type: count + extra_info: + type: string \ No newline at end of file diff --git a/src/test/resources/allOf_diff_1.yaml b/core/src/test/resources/allOf_diff_1.yaml similarity index 100% rename from src/test/resources/allOf_diff_1.yaml rename to core/src/test/resources/allOf_diff_1.yaml diff --git a/src/test/resources/allOf_diff_2.yaml b/core/src/test/resources/allOf_diff_2.yaml similarity index 100% rename from src/test/resources/allOf_diff_2.yaml rename to core/src/test/resources/allOf_diff_2.yaml diff --git a/src/test/resources/allOf_diff_3.yaml b/core/src/test/resources/allOf_diff_3.yaml similarity index 100% rename from src/test/resources/allOf_diff_3.yaml rename to core/src/test/resources/allOf_diff_3.yaml diff --git a/src/test/resources/allOf_diff_4.yaml b/core/src/test/resources/allOf_diff_4.yaml similarity index 100% rename from src/test/resources/allOf_diff_4.yaml rename to core/src/test/resources/allOf_diff_4.yaml diff --git a/src/test/resources/array_diff_1.yaml b/core/src/test/resources/array_diff_1.yaml similarity index 100% rename from src/test/resources/array_diff_1.yaml rename to core/src/test/resources/array_diff_1.yaml diff --git a/src/test/resources/array_diff_2.yaml b/core/src/test/resources/array_diff_2.yaml similarity index 100% rename from src/test/resources/array_diff_2.yaml rename to core/src/test/resources/array_diff_2.yaml diff --git a/src/test/resources/backwardCompatibility/bc_1.yaml b/core/src/test/resources/backwardCompatibility/bc_1.yaml similarity index 100% rename from src/test/resources/backwardCompatibility/bc_1.yaml rename to core/src/test/resources/backwardCompatibility/bc_1.yaml diff --git a/src/test/resources/backwardCompatibility/bc_2.yaml b/core/src/test/resources/backwardCompatibility/bc_2.yaml similarity index 99% rename from src/test/resources/backwardCompatibility/bc_2.yaml rename to core/src/test/resources/backwardCompatibility/bc_2.yaml index f8c6d7dc0..179f3ca3f 100644 --- a/src/test/resources/backwardCompatibility/bc_2.yaml +++ b/core/src/test/resources/backwardCompatibility/bc_2.yaml @@ -36,9 +36,6 @@ paths: summary: Add a new pet to the store description: '' operationId: addPet - responses: - '405': - description: Invalid input requestBody: $ref: '#/components/requestBodies/Pet' responses: @@ -48,6 +45,8 @@ paths: application/json: schema: $ref: '#/components/schemas/MyResponseType' + '405': + description: Invalid input /pet/findByStatus: get: tags: diff --git a/src/test/resources/backwardCompatibility/bc_3.yaml b/core/src/test/resources/backwardCompatibility/bc_3.yaml similarity index 99% rename from src/test/resources/backwardCompatibility/bc_3.yaml rename to core/src/test/resources/backwardCompatibility/bc_3.yaml index 456fc0553..30a68ced7 100644 --- a/src/test/resources/backwardCompatibility/bc_3.yaml +++ b/core/src/test/resources/backwardCompatibility/bc_3.yaml @@ -36,9 +36,6 @@ paths: summary: Add a new pet to the store description: '' operationId: addPet - responses: - '405': - description: Invalid input requestBody: $ref: '#/components/requestBodies/Pet' responses: @@ -48,6 +45,8 @@ paths: application/json: schema: $ref: '#/components/schemas/MyResponseType' + '405': + description: Invalid input get: tags: - pet diff --git a/src/test/resources/backwardCompatibility/bc_4.yaml b/core/src/test/resources/backwardCompatibility/bc_4.yaml similarity index 99% rename from src/test/resources/backwardCompatibility/bc_4.yaml rename to core/src/test/resources/backwardCompatibility/bc_4.yaml index 5de739f84..4e6ee3e18 100644 --- a/src/test/resources/backwardCompatibility/bc_4.yaml +++ b/core/src/test/resources/backwardCompatibility/bc_4.yaml @@ -36,9 +36,6 @@ paths: summary: Add a new pet to the store description: '' operationId: addPet - responses: - '405': - description: Invalid input requestBody: $ref: '#/components/requestBodies/Pet' responses: @@ -48,6 +45,8 @@ paths: application/json: schema: $ref: '#/components/schemas/MyResponseType' + '405': + description: Invalid input /pet/findByStatus: get: tags: diff --git a/src/test/resources/backwardCompatibility/bc_5.yaml b/core/src/test/resources/backwardCompatibility/bc_5.yaml similarity index 100% rename from src/test/resources/backwardCompatibility/bc_5.yaml rename to core/src/test/resources/backwardCompatibility/bc_5.yaml diff --git a/src/test/resources/composed_schema_1.yaml b/core/src/test/resources/composed_schema_1.yaml similarity index 100% rename from src/test/resources/composed_schema_1.yaml rename to core/src/test/resources/composed_schema_1.yaml diff --git a/src/test/resources/composed_schema_2.yaml b/core/src/test/resources/composed_schema_2.yaml similarity index 100% rename from src/test/resources/composed_schema_2.yaml rename to core/src/test/resources/composed_schema_2.yaml diff --git a/src/test/resources/content_diff_1.yaml b/core/src/test/resources/content_diff_1.yaml similarity index 100% rename from src/test/resources/content_diff_1.yaml rename to core/src/test/resources/content_diff_1.yaml diff --git a/src/test/resources/content_diff_2.yaml b/core/src/test/resources/content_diff_2.yaml similarity index 100% rename from src/test/resources/content_diff_2.yaml rename to core/src/test/resources/content_diff_2.yaml diff --git a/src/test/resources/header_1.yaml b/core/src/test/resources/header_1.yaml similarity index 100% rename from src/test/resources/header_1.yaml rename to core/src/test/resources/header_1.yaml diff --git a/src/test/resources/header_2.yaml b/core/src/test/resources/header_2.yaml similarity index 100% rename from src/test/resources/header_2.yaml rename to core/src/test/resources/header_2.yaml diff --git a/core/src/test/resources/missing_property_1.yaml b/core/src/test/resources/missing_property_1.yaml new file mode 100644 index 000000000..070fc748f --- /dev/null +++ b/core/src/test/resources/missing_property_1.yaml @@ -0,0 +1,31 @@ +openapi: 3.0.1 +info: + title: Title + version: 1.0.0 + description: Description +paths: + /: + get: + summary: Simple GET + operationId: simpleGet + responses: + default: + content: + application/json: + schema: + $ref: '#/components/schemas/Wrapper' + description: Simple GET +components: + schemas: + Wrapper: + type: object + properties: + id: + type: string + childProperty: + $ref: '#/components/schemas/ChildProperty' + ChildProperty: + type: object + properties: + id: + type: string \ No newline at end of file diff --git a/core/src/test/resources/missing_property_2.yaml b/core/src/test/resources/missing_property_2.yaml new file mode 100644 index 000000000..f84504c52 --- /dev/null +++ b/core/src/test/resources/missing_property_2.yaml @@ -0,0 +1,24 @@ +openapi: 3.0.1 +info: + title: Title + version: 1.0.0 + description: Description +paths: + /: + get: + summary: Simple GET + operationId: simpleGet + responses: + default: + content: + application/json: + schema: + $ref: '#/components/schemas/Wrapper' + description: Simple GET +components: + schemas: + Wrapper: + type: object + properties: + id: + type: string \ No newline at end of file diff --git a/src/test/resources/oneOf_diff_1.yaml b/core/src/test/resources/oneOf_diff_1.yaml similarity index 100% rename from src/test/resources/oneOf_diff_1.yaml rename to core/src/test/resources/oneOf_diff_1.yaml diff --git a/src/test/resources/oneOf_diff_2.yaml b/core/src/test/resources/oneOf_diff_2.yaml similarity index 100% rename from src/test/resources/oneOf_diff_2.yaml rename to core/src/test/resources/oneOf_diff_2.yaml diff --git a/src/test/resources/oneOf_diff_3.yaml b/core/src/test/resources/oneOf_diff_3.yaml similarity index 100% rename from src/test/resources/oneOf_diff_3.yaml rename to core/src/test/resources/oneOf_diff_3.yaml diff --git a/src/test/resources/oneOf_discriminator-changed_1.yaml b/core/src/test/resources/oneOf_discriminator-changed_1.yaml similarity index 100% rename from src/test/resources/oneOf_discriminator-changed_1.yaml rename to core/src/test/resources/oneOf_discriminator-changed_1.yaml diff --git a/src/test/resources/oneOf_discriminator-changed_2.yaml b/core/src/test/resources/oneOf_discriminator-changed_2.yaml similarity index 100% rename from src/test/resources/oneOf_discriminator-changed_2.yaml rename to core/src/test/resources/oneOf_discriminator-changed_2.yaml diff --git a/core/src/test/resources/oneOf_discriminator-missing_1.yaml b/core/src/test/resources/oneOf_discriminator-missing_1.yaml new file mode 100644 index 000000000..f541d12ee --- /dev/null +++ b/core/src/test/resources/oneOf_discriminator-missing_1.yaml @@ -0,0 +1,44 @@ +openapi: 3.0.1 +info: + title: oneOf test for issue 29 + version: '1.0' +servers: + - url: 'http://localhost:8000/' +paths: + /state: + post: + operationId: update + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/A' + - $ref: '#/components/schemas/B' + required: true + responses: + '201': + description: OK +components: + schemas: + A: + type: object + properties: + realtype: + type: string + othertype: + type: string + message: + type: string + B: + type: object + properties: + realtype: + type: string + othertype: + type: string + description: + type: string + code: + type: integer + format: int32 \ No newline at end of file diff --git a/core/src/test/resources/oneOf_discriminator-missing_2.yaml b/core/src/test/resources/oneOf_discriminator-missing_2.yaml new file mode 100644 index 000000000..ea456bb79 --- /dev/null +++ b/core/src/test/resources/oneOf_discriminator-missing_2.yaml @@ -0,0 +1,44 @@ +openapi: 3.0.1 +info: + title: oneOf test for issue 29 + version: '1.0' +servers: + - url: 'http://localhost:8000/' +paths: + /state: + post: + operationId: update + requestBody: + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/B' + - $ref: '#/components/schemas/A' + required: true + responses: + '201': + description: OK +components: + schemas: + A: + type: object + properties: + realtype: + type: string + othertype: + type: string + message: + type: string + B: + type: object + properties: + realtype: + type: string + othertype: + type: string + description: + type: string + code: + type: integer + format: int32 \ No newline at end of file diff --git a/src/test/resources/parameters_diff.yaml b/core/src/test/resources/parameters_diff.yaml similarity index 100% rename from src/test/resources/parameters_diff.yaml rename to core/src/test/resources/parameters_diff.yaml diff --git a/src/test/resources/parameters_diff_1.yaml b/core/src/test/resources/parameters_diff_1.yaml similarity index 100% rename from src/test/resources/parameters_diff_1.yaml rename to core/src/test/resources/parameters_diff_1.yaml diff --git a/src/test/resources/parameters_diff_2.yaml b/core/src/test/resources/parameters_diff_2.yaml similarity index 100% rename from src/test/resources/parameters_diff_2.yaml rename to core/src/test/resources/parameters_diff_2.yaml diff --git a/src/test/resources/path_1.yaml b/core/src/test/resources/path_1.yaml similarity index 100% rename from src/test/resources/path_1.yaml rename to core/src/test/resources/path_1.yaml diff --git a/src/test/resources/path_2.yaml b/core/src/test/resources/path_2.yaml similarity index 100% rename from src/test/resources/path_2.yaml rename to core/src/test/resources/path_2.yaml diff --git a/src/test/resources/path_3.yaml b/core/src/test/resources/path_3.yaml similarity index 100% rename from src/test/resources/path_3.yaml rename to core/src/test/resources/path_3.yaml diff --git a/core/src/test/resources/petstore_openapi3.yaml b/core/src/test/resources/petstore_openapi3.yaml new file mode 100644 index 000000000..264dbeabf --- /dev/null +++ b/core/src/test/resources/petstore_openapi3.yaml @@ -0,0 +1,109 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + format: int32 + responses: + '200': + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + '201': + description: Null response + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + items: + $ref: "#/components/schemas/Pet" + Error: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string diff --git a/core/src/test/resources/petstore_swagger2.yaml b/core/src/test/resources/petstore_swagger2.yaml new file mode 100644 index 000000000..ecd195aa6 --- /dev/null +++ b/core/src/test/resources/petstore_swagger2.yaml @@ -0,0 +1,101 @@ +swagger: "2.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +host: petstore.swagger.io +basePath: /v1 +schemes: + - http +consumes: + - application/json +produces: + - application/json +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + type: integer + format: int32 + responses: + "200": + description: A paged array of pets + headers: + x-next: + type: string + description: A link to the next page of responses + schema: + $ref: '#/definitions/Pets' + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + "201": + description: Null response + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + type: string + responses: + "200": + description: Expected response to a valid request + schema: + $ref: '#/definitions/Pets' + default: + description: unexpected error + schema: + $ref: '#/definitions/Error' +definitions: + Pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + items: + $ref: '#/definitions/Pet' + Error: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string \ No newline at end of file diff --git a/src/test/resources/petstore_v2_1.yaml b/core/src/test/resources/petstore_v2_1.yaml similarity index 100% rename from src/test/resources/petstore_v2_1.yaml rename to core/src/test/resources/petstore_v2_1.yaml diff --git a/src/test/resources/petstore_v2_2.yaml b/core/src/test/resources/petstore_v2_2.yaml similarity index 100% rename from src/test/resources/petstore_v2_2.yaml rename to core/src/test/resources/petstore_v2_2.yaml diff --git a/src/test/resources/petstore_v2_empty.yaml b/core/src/test/resources/petstore_v2_empty.yaml similarity index 100% rename from src/test/resources/petstore_v2_empty.yaml rename to core/src/test/resources/petstore_v2_empty.yaml diff --git a/src/test/resources/recursive_model_1.yaml b/core/src/test/resources/recursive_model_1.yaml similarity index 100% rename from src/test/resources/recursive_model_1.yaml rename to core/src/test/resources/recursive_model_1.yaml diff --git a/src/test/resources/recursive_model_2.yaml b/core/src/test/resources/recursive_model_2.yaml similarity index 100% rename from src/test/resources/recursive_model_2.yaml rename to core/src/test/resources/recursive_model_2.yaml diff --git a/src/test/resources/request_diff_1.yaml b/core/src/test/resources/request_diff_1.yaml similarity index 100% rename from src/test/resources/request_diff_1.yaml rename to core/src/test/resources/request_diff_1.yaml diff --git a/src/test/resources/request_diff_2.yaml b/core/src/test/resources/request_diff_2.yaml similarity index 100% rename from src/test/resources/request_diff_2.yaml rename to core/src/test/resources/request_diff_2.yaml diff --git a/core/src/test/resources/response_schema_added_1.yaml b/core/src/test/resources/response_schema_added_1.yaml new file mode 100644 index 000000000..d4050c576 --- /dev/null +++ b/core/src/test/resources/response_schema_added_1.yaml @@ -0,0 +1,106 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + format: int32 + responses: + '200': + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: {} + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + '201': + description: Null response + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + items: + $ref: "#/components/schemas/Pet" + Error: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string diff --git a/core/src/test/resources/response_schema_added_2.yaml b/core/src/test/resources/response_schema_added_2.yaml new file mode 100644 index 000000000..264dbeabf --- /dev/null +++ b/core/src/test/resources/response_schema_added_2.yaml @@ -0,0 +1,109 @@ +openapi: "3.0.0" +info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT +servers: + - url: http://petstore.swagger.io/v1 +paths: + /pets: + get: + summary: List all pets + operationId: listPets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + format: int32 + responses: + '200': + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + post: + summary: Create a pet + operationId: createPets + tags: + - pets + responses: + '201': + description: Null response + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /pets/{petId}: + get: + summary: Info for a specific pet + operationId: showPetById + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + '200': + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/schemas/Pets" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string + Pets: + type: array + items: + $ref: "#/components/schemas/Pet" + Error: + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string diff --git a/src/test/resources/schema_diff_cache_1.yaml b/core/src/test/resources/schema_diff_cache_1.yaml similarity index 99% rename from src/test/resources/schema_diff_cache_1.yaml rename to core/src/test/resources/schema_diff_cache_1.yaml index a1c61848c..558ea7ffb 100644 --- a/src/test/resources/schema_diff_cache_1.yaml +++ b/core/src/test/resources/schema_diff_cache_1.yaml @@ -36,9 +36,6 @@ paths: summary: Add a new pet to the store description: '' operationId: addPet - responses: - '405': - description: Invalid input requestBody: $ref: '#/components/requestBodies/Pet' responses: @@ -48,6 +45,8 @@ paths: application/json: schema: $ref: '#/components/schemas/MyResponseType' + '405': + description: Invalid input get: tags: - pet diff --git a/src/test/resources/security_diff_1.yaml b/core/src/test/resources/security_diff_1.yaml similarity index 100% rename from src/test/resources/security_diff_1.yaml rename to core/src/test/resources/security_diff_1.yaml diff --git a/src/test/resources/security_diff_2.yaml b/core/src/test/resources/security_diff_2.yaml similarity index 100% rename from src/test/resources/security_diff_2.yaml rename to core/src/test/resources/security_diff_2.yaml diff --git a/src/test/resources/security_diff_3.yaml b/core/src/test/resources/security_diff_3.yaml similarity index 100% rename from src/test/resources/security_diff_3.yaml rename to core/src/test/resources/security_diff_3.yaml diff --git a/mvnw b/mvnw new file mode 100755 index 000000000..fc7efd17d --- /dev/null +++ b/mvnw @@ -0,0 +1,234 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CMD_LINE_ARGS + diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 000000000..001048081 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%MAVEN_CONFIG% %* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR=""%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml index 6651ef43f..56c26bdc8 100644 --- a/pom.xml +++ b/pom.xml @@ -7,14 +7,18 @@ 7 - com.qdesrame - openapi-diff + + core + cli + + + com.github.joschi.openapi-diff + parent 2.0.0-SNAPSHOT - jar + pom - openapi-diff - Utility for comparing two OpenAPI specifications. - http://maven.apache.org + openapi-diff-parent + Parent POM for OpenAPI-Diff @@ -28,12 +32,17 @@ qdesrame quen2404@gmail.com + + Jochen Schalanda + jochen@schalanda.name + https://github.com/joschi + - scm:git:http://github.com/quen2404/openapi-diff.git - scm:git:http://github.com/quen2404/openapi-diff.git - https://github.com/quen2404/openapi-diff + scm:git:https://github.com/joschi/openapi-diff.git + scm:git:https://github.com/joschi/openapi-diff.git + https://github.com/joschi/openapi-diff HEAD @@ -51,88 +60,109 @@ + 1.8 + 1.8 UTF-8 + UTF-8 github - 2.22.2 - 5.5.2 - 1.3.2 - 3.14.0 + + 2.0.21 + 1.7.30 - - - io.swagger.parser.v3 - swagger-parser-v3 - 2.0.17 - - - com.j2html - j2html - 1.4.0 - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.version} - test - - - org.junit.platform - junit-platform-runner - ${junit.platform.version} - test - - - org.junit.platform - junit-platform-launcher - ${junit.platform.version} - test - - - org.assertj - assertj-core - ${assertj-core.version} - test - - - org.apache.commons - commons-collections4 - 4.4 - - - commons-cli - commons-cli - 1.4 - - - org.slf4j - slf4j-api - 1.7.30 - - - org.slf4j - slf4j-log4j12 - 1.7.30 - - - commons-httpclient - commons-httpclient - 3.1 - - - org.projectlombok - lombok - 1.18.10 - - + + + + org.junit + junit-bom + 5.6.2 + pom + import + + + io.swagger.parser.v3 + swagger-parser-v3 + ${swagger-parser.version} + + + io.swagger.parser.v3 + swagger-parser + ${swagger-parser.version} + + + io.swagger.parser.v3 + swagger-parser-v2-converter + ${swagger-parser.version} + + + com.j2html + j2html + 1.4.0 + + + org.apache.commons + commons-collections4 + 4.4 + + + commons-cli + commons-cli + 1.4 + + + org.apache.commons + commons-lang3 + 3.11 + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + commons-httpclient + commons-httpclient + 3.1 + + + org.projectlombok + lombok + 1.18.12 + provided + + + org.assertj + assertj-core + 3.16.1 + test + + + org.slf4j + slf4j-simple + ${slf4j.version} + test + + + + + + docker + + true + true + true + true + true + true + + release-sign-artifacts @@ -148,12 +178,10 @@ maven-gpg-plugin 1.6 - - - --pinentry-mode - loopback - - + + --pinentry-mode + loopback + @@ -170,20 +198,68 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + com.coveo + fmt-maven-plugin + 2.9.1 + + + io.github.phillipuniverse + githook-maven-plugin + 1.0.5 + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + + org.apache.maven.plugins maven-compiler-plugin - - 1.8 - 1.8 - UTF-8 - - 3.8.1 org.apache.maven.plugins maven-source-plugin - 3.1.0 package @@ -196,21 +272,15 @@ org.apache.maven.plugins maven-release-plugin - 2.5.3 - @{project.version} true - releases - - + release - org.apache.maven.plugins maven-javadoc-plugin - 3.1.1 true true @@ -227,58 +297,13 @@ - - maven-assembly-plugin - - - - com.qdesrame.openapi.diff.Main - - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - org.apache.maven.plugins maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/Test*.java - **/*Test.java - **/*Tests.java - **/*TestCase.java - - false - - - - org.junit.platform - junit-platform-surefire-provider - ${junit.platform.version} - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - - com.coveo fmt-maven-plugin - 2.9 @@ -290,7 +315,6 @@ io.github.phillipuniverse githook-maven-plugin - 1.0.4 diff --git a/src/main/java/com/qdesrame/openapi/diff/compare/CacheKey.java b/src/main/java/com/qdesrame/openapi/diff/compare/CacheKey.java deleted file mode 100644 index 7ce970da2..000000000 --- a/src/main/java/com/qdesrame/openapi/diff/compare/CacheKey.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.qdesrame.openapi.diff.compare; - -import com.qdesrame.openapi.diff.model.DiffContext; -import lombok.Getter; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; - -@Getter -public final class CacheKey { - private final String left; - private final String right; - private final DiffContext context; - - public CacheKey(final String left, final String right, final DiffContext context) { - this.left = left; - this.right = right; - this.context = context; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - - if (o == null || getClass() != o.getClass()) return false; - - CacheKey cacheKey = (CacheKey) o; - - return new EqualsBuilder() - .append(left, cacheKey.left) - .append(right, cacheKey.right) - .append(context, cacheKey.context) - .isEquals(); - } - - @Override - public int hashCode() { - return new HashCodeBuilder(17, 37).append(left).append(right).append(context).toHashCode(); - } -} diff --git a/src/main/java/com/qdesrame/openapi/diff/output/Render.java b/src/main/java/com/qdesrame/openapi/diff/output/Render.java deleted file mode 100644 index bf866312a..000000000 --- a/src/main/java/com/qdesrame/openapi/diff/output/Render.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.qdesrame.openapi.diff.output; - -import com.qdesrame.openapi.diff.model.ChangedOpenApi; - -public interface Render { - - String render(ChangedOpenApi diff); -}