Skip to content

Commit 0aaa1c2

Browse files
authored
Fix exceptions in HTML and Markdown renderers with removed property (#8)
`HtmlRender` and `MarkdownRender` failed to resolve component schemas which had been removed in the "new" OpenAPI specification and threw an `IllegalArgumentException`. Refs #7
1 parent 573fa4f commit 0aaa1c2

File tree

4 files changed

+55
-2
lines changed

4 files changed

+55
-2
lines changed

core/src/main/java/com/qdesrame/openapi/diff/core/output/HtmlRender.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,16 @@ private void properties(
269269
Map<String, Schema> properties,
270270
DiffContext context) {
271271
if (properties != null) {
272-
properties.forEach((key, value) -> property(output, propPrefix + key, title, resolve(value)));
272+
properties.forEach((key, value) -> resolveProperty(output, propPrefix, key, value, title));
273+
}
274+
}
275+
276+
private void resolveProperty(
277+
ContainerTag output, String propPrefix, String key, Schema value, String title) {
278+
try {
279+
property(output, propPrefix + key, title, resolve(value));
280+
} catch (Exception e) {
281+
property(output, propPrefix + key, title, type(value));
273282
}
274283
}
275284

core/src/main/java/com/qdesrame/openapi/diff/core/output/MarkdownRender.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ protected String properties(
381381
if (properties != null) {
382382
properties.forEach(
383383
(key, value) -> {
384-
sb.append(property(deepness, title, key, resolve(value)));
384+
sb.append(resolveProperty(deepness, value, key, title));
385385
if (showContent) {
386386
sb.append(schema(deepness + 1, resolve(value), context));
387387
}
@@ -390,6 +390,14 @@ protected String properties(
390390
return sb.toString();
391391
}
392392

393+
private String resolveProperty(int deepness, Schema value, String key, String title) {
394+
try {
395+
return property(deepness, title, key, resolve(value));
396+
} catch (Exception e) {
397+
return property(deepness, title, key, type(value), "");
398+
}
399+
}
400+
393401
protected String property(int deepness, String name, ChangedSchema schema) {
394402
StringBuilder sb = new StringBuilder();
395403
String type = type(schema.getNewSchema());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.qdesrame.openapi.test;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.qdesrame.openapi.diff.core.OpenApiCompare;
6+
import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
7+
import com.qdesrame.openapi.diff.core.output.HtmlRender;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class HtmlRenderTest {
11+
@Test
12+
public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
13+
HtmlRender render = new HtmlRender();
14+
ChangedOpenApi diff =
15+
OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
16+
assertThat(render.render(diff)).isNotBlank();
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.qdesrame.openapi.test;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import com.qdesrame.openapi.diff.core.OpenApiCompare;
6+
import com.qdesrame.openapi.diff.core.model.ChangedOpenApi;
7+
import com.qdesrame.openapi.diff.core.output.MarkdownRender;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class MarkdownRenderTest {
11+
@Test
12+
public void renderDoesNotFailWhenPropertyHasBeenRemoved() {
13+
MarkdownRender render = new MarkdownRender();
14+
ChangedOpenApi diff =
15+
OpenApiCompare.fromLocations("missing_property_1.yaml", "missing_property_2.yaml");
16+
assertThat(render.render(diff)).isNotBlank();
17+
}
18+
}

0 commit comments

Comments
 (0)