Skip to content

Commit f1fc50b

Browse files
CopilotDrSatyr
andcommitted
Implement enum rename detection in MarkdownRender
- Enhanced listDiff method to detect 1:1 enum renames (1 added + 1 removed = rename) - Shows "Renamed enum value: OldValue -> NewValue" instead of separate Added/Removed - Falls back to original behavior for other cases (multiple changes, only additions, etc.) - Added comprehensive test cases to verify all scenarios Co-authored-by: DrSatyr <[email protected]>
1 parent 8b3d0f3 commit f1fc50b

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

core/src/main/java/org/openapitools/openapidiff/core/output/MarkdownRender.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,18 @@ protected String listDiff(int deepness, String name, ChangedList<?> listDiff) {
432432
if (listDiff == null) {
433433
return "";
434434
}
435+
436+
// Check if this looks like a simple rename (1 added, 1 removed)
437+
if (listDiff.getIncreased().size() == 1 && listDiff.getMissing().size() == 1) {
438+
StringBuilder sb = new StringBuilder();
439+
Object oldValue = listDiff.getMissing().get(0);
440+
Object newValue = listDiff.getIncreased().get(0);
441+
sb.append(format("%sRenamed %s value:\n\n", indent(deepness), name));
442+
sb.append(format("%s* `%s` -> `%s`\n", indent(deepness), oldValue, newValue));
443+
return sb.toString();
444+
}
445+
446+
// Fall back to current behavior for other cases
435447
return listItem(deepness, "Added " + name, listDiff.getIncreased())
436448
+ listItem(deepness, "Removed " + name, listDiff.getMissing());
437449
}

core/src/test/java/org/openapitools/openapidiff/core/output/MarkdownRenderTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44

55
import java.io.ByteArrayOutputStream;
66
import java.io.OutputStreamWriter;
7+
import java.util.Arrays;
8+
import java.util.Collections;
79
import org.junit.jupiter.api.Test;
810
import org.openapitools.openapidiff.core.OpenApiCompare;
11+
import org.openapitools.openapidiff.core.model.ChangedList;
912
import org.openapitools.openapidiff.core.model.ChangedOpenApi;
1013

1114
public class MarkdownRenderTest {
@@ -40,4 +43,45 @@ public void renderDoesNotFailWhenHTTPStatusCodeIsRange() {
4043
render.render(diff, outputStreamWriter);
4144
assertThat(outputStream.toString()).isNotBlank();
4245
}
46+
47+
@Test
48+
public void testEnumRenameDetection() {
49+
MarkdownRender render = new MarkdownRender();
50+
51+
// Test 1:1 rename (should show as rename)
52+
ChangedList<String> enumRename =
53+
org.openapitools.openapidiff.core.compare.ListDiff.diff(
54+
new ChangedList.SimpleChangedList<>(
55+
Collections.singletonList("OldValue"), Collections.singletonList("NewValue")));
56+
String renameResult = render.listDiff(2, "enum", enumRename);
57+
assertThat(renameResult).contains("Renamed enum value:");
58+
assertThat(renameResult).contains("`OldValue` -> `NewValue`");
59+
60+
// Test multiple additions and removals (should fall back to original behavior)
61+
ChangedList<String> enumMultiple =
62+
org.openapitools.openapidiff.core.compare.ListDiff.diff(
63+
new ChangedList.SimpleChangedList<>(
64+
Arrays.asList("OldValue1", "OldValue2"), Arrays.asList("NewValue1", "NewValue2")));
65+
String multipleResult = render.listDiff(2, "enum", enumMultiple);
66+
assertThat(multipleResult).contains("Added enum values:");
67+
assertThat(multipleResult).contains("Removed enum values:");
68+
69+
// Test single addition (should use original behavior)
70+
ChangedList<String> enumAdd =
71+
org.openapitools.openapidiff.core.compare.ListDiff.diff(
72+
new ChangedList.SimpleChangedList<>(
73+
Collections.emptyList(), Collections.singletonList("NewValue")));
74+
String addResult = render.listDiff(2, "enum", enumAdd);
75+
assertThat(addResult).contains("Added enum value:");
76+
assertThat(addResult).doesNotContain("Renamed");
77+
78+
// Test single removal (should use original behavior)
79+
ChangedList<String> enumRemove =
80+
org.openapitools.openapidiff.core.compare.ListDiff.diff(
81+
new ChangedList.SimpleChangedList<>(
82+
Collections.singletonList("OldValue"), Collections.emptyList()));
83+
String removeResult = render.listDiff(2, "enum", enumRemove);
84+
assertThat(removeResult).contains("Removed enum value:");
85+
assertThat(removeResult).doesNotContain("Renamed");
86+
}
4387
}

0 commit comments

Comments
 (0)