diff --git a/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java b/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java index f3e1e2b3f..499dff44e 100644 --- a/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java +++ b/core/src/main/java/com/qdesrame/openapi/diff/core/output/ConsoleRender.java @@ -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)); } 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/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