From 60ea0fc92f087a95729a5b8f2ca768b9ac182daf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 10:32:58 +0000 Subject: [PATCH 1/3] Initial plan From 8754d7f84d083599073d6db93cb111c71add0749 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 10:39:58 +0000 Subject: [PATCH 2/3] Fix NullPointerException in MarkdownRender, AsciidocRender, and ConsoleRender when schema is null Co-authored-by: DrSatyr <8143518+DrSatyr@users.noreply.github.com> --- .../openapidiff/core/output/AsciidocRender.java | 2 +- .../openapidiff/core/output/ConsoleRender.java | 2 +- .../openapidiff/core/output/MarkdownRender.java | 6 +++++- .../openapidiff/core/output/AsciidocRenderTest.java | 12 ++++++++++++ .../openapidiff/core/output/ConsoleRenderTest.java | 12 ++++++++++++ .../openapidiff/core/output/MarkdownRenderTest.java | 12 ++++++++++++ 6 files changed, 43 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java index b45b2034..b6afc6f5 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/AsciidocRender.java @@ -182,7 +182,7 @@ private String itemContent( .append(itemContent("Schema:", "", indent)) .append(changedMediaType.isCompatible() ? "Backward compatible" : "Broken compatibility") .append(System.lineSeparator()); - if (!changedMediaType.isCompatible()) { + if (!changedMediaType.isCompatible() && changedMediaType.getSchema() != null) { sb.append(incompatibilities(changedMediaType.getSchema())); } return sb.toString(); diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java index 37b926cd..e41f7aa9 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/ConsoleRender.java @@ -171,7 +171,7 @@ private String itemContent( .append("Schema: ") .append(changedMediaType.isCompatible() ? "Backward compatible" : "Broken compatibility") .append(System.lineSeparator()); - if (!changedMediaType.isCompatible()) { + if (!changedMediaType.isCompatible() && changedMediaType.getSchema() != null) { sb.append(incompatibilities(changedMediaType.getSchema())); } return sb.toString(); diff --git a/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java b/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java index b1182606..73bd12cc 100644 --- a/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java +++ b/core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java @@ -274,7 +274,11 @@ protected String itemContent(String title, String mediaType, MediaType content) } protected String itemContent(int deepness, String mediaType, ChangedMediaType content) { - return itemContent("Changed content type", mediaType) + schema(deepness, content.getSchema()); + String result = itemContent("Changed content type", mediaType); + if (content.getSchema() != null) { + result += schema(deepness, content.getSchema()); + } + return result; } protected String schema(ChangedSchema schema) { diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java index 15c698d6..d4eb908b 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java @@ -93,4 +93,16 @@ public void validateAsciiDocRangeStatus() { + "\n" + "WARNING: API changes broke backward compatibility\n"); } + + @Test + public void renderDoesNotFailWhenSchemaIsNullButExampleChanged() { + AsciidocRender render = new AsciidocRender(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); + ChangedOpenApi diff = + OpenApiCompare.fromLocations( + "issue-865-null-schema-1.yaml", "issue-865-null-schema-2.yaml"); + render.render(diff, outputStreamWriter); + assertThat(outputStream.toString()).isNotBlank(); + } } diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java index 675633fc..0cd01be5 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java @@ -76,4 +76,16 @@ public void renderShowsWhatsChangedSectionWithCorrectFormattingWhenEndpointIsCha .contains("What's Changed") .containsSubsequence("- GET /widgets", "Parameter:", "- Changed query-param-1 in query"); } + + @Test + public void renderDoesNotFailWhenSchemaIsNullButExampleChanged() { + ConsoleRender render = new ConsoleRender(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); + ChangedOpenApi diff = + OpenApiCompare.fromLocations( + "issue-865-null-schema-1.yaml", "issue-865-null-schema-2.yaml"); + render.render(diff, outputStreamWriter); + assertThat(outputStream.toString()).isNotBlank(); + } } diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java index fb1f24fe..5c21b4b7 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java @@ -40,4 +40,16 @@ public void renderDoesNotFailWhenHTTPStatusCodeIsRange() { render.render(diff, outputStreamWriter); assertThat(outputStream.toString()).isNotBlank(); } + + @Test + public void renderDoesNotFailWhenSchemaIsNullButExampleChanged() { + MarkdownRender render = new MarkdownRender(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); + ChangedOpenApi diff = + OpenApiCompare.fromLocations( + "issue-865-null-schema-1.yaml", "issue-865-null-schema-2.yaml"); + render.render(diff, outputStreamWriter); + assertThat(outputStream.toString()).isNotBlank(); + } } From 4ca83f7b58e32e825e86e8defe506c180e3d120f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 28 Nov 2025 10:48:11 +0000 Subject: [PATCH 3/3] Add issue ID prefix to test method names for issue #870 Co-authored-by: DrSatyr <8143518+DrSatyr@users.noreply.github.com> --- .../openapidiff/core/output/AsciidocRenderTest.java | 2 +- .../openapitools/openapidiff/core/output/ConsoleRenderTest.java | 2 +- .../openapidiff/core/output/MarkdownRenderTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java index d4eb908b..a9e7937b 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/AsciidocRenderTest.java @@ -95,7 +95,7 @@ public void validateAsciiDocRangeStatus() { } @Test - public void renderDoesNotFailWhenSchemaIsNullButExampleChanged() { + public void issue870_renderDoesNotFailWhenSchemaIsNullButExampleChanged() { AsciidocRender render = new AsciidocRender(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java index 0cd01be5..a193e4e5 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/ConsoleRenderTest.java @@ -78,7 +78,7 @@ public void renderShowsWhatsChangedSectionWithCorrectFormattingWhenEndpointIsCha } @Test - public void renderDoesNotFailWhenSchemaIsNullButExampleChanged() { + public void issue870_renderDoesNotFailWhenSchemaIsNullButExampleChanged() { ConsoleRender render = new ConsoleRender(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); diff --git a/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java b/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java index 5c21b4b7..59788210 100644 --- a/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java +++ b/core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java @@ -42,7 +42,7 @@ public void renderDoesNotFailWhenHTTPStatusCodeIsRange() { } @Test - public void renderDoesNotFailWhenSchemaIsNullButExampleChanged() { + public void issue870_renderDoesNotFailWhenSchemaIsNullButExampleChanged() { MarkdownRender render = new MarkdownRender(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);