Skip to content

Commit c034cfc

Browse files
committed
Update one of diff with reference resolution in discriminator
1 parent c1b4398 commit c034cfc

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ComposedSchemaDiffResult(OpenApiDiff openApiDiff) {
3131

3232
@Override
3333
public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftComponents, Components rightComponents, Schema left, Schema right, DiffContext context) {
34-
if(left instanceof ComposedSchema) {
34+
if (left instanceof ComposedSchema) {
3535
ComposedSchema leftComposedSchema = (ComposedSchema) left;
3636
ComposedSchema rightComposedSchema = (ComposedSchema) right;
3737
if (CollectionUtils.isNotEmpty(leftComposedSchema.getOneOf())
@@ -53,7 +53,8 @@ public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftCompo
5353
Map<String, String> rightMapping = getMapping(rightComposedSchema);
5454

5555
ChangedOneOfSchema changedOneOfSchema = new ChangedOneOfSchema(leftMapping, rightMapping, context);
56-
MapKeyDiff<String, String> mappingDiff = MapKeyDiff.diff(leftMapping, rightMapping);
56+
MapKeyDiff<String, Schema> mappingDiff = MapKeyDiff.diff(getSchema(leftComponents, leftMapping),
57+
getSchema(rightComponents, rightMapping));
5758
changedOneOfSchema.setIncreasedMapping(mappingDiff.getIncreased());
5859
changedOneOfSchema.setMissingMapping(mappingDiff.getMissing());
5960

@@ -76,6 +77,12 @@ public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftCompo
7677
}
7778
}
7879

80+
private Map<String, Schema> getSchema(Components components, Map<String, String> mapping) {
81+
Map<String, Schema> result = new HashMap<>();
82+
mapping.forEach((key, value) -> result.put(key, refPointer.resolveRef(components, new Schema(), value)));
83+
return result;
84+
}
85+
7986
private Map<String, String> getMapping(ComposedSchema composedSchema) {
8087
Map<String, String> reverseMapping = new HashMap<>();
8188
for (Schema schema : composedSchema.getOneOf()) {

src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.qdesrame.openapi.diff.model;
22

3+
import io.swagger.v3.oas.models.media.Schema;
34
import lombok.Getter;
45
import lombok.Setter;
56

@@ -15,8 +16,8 @@ public class ChangedOneOfSchema implements Changed {
1516
private final Map<String, String> newMapping;
1617
private final DiffContext context;
1718

18-
private Map<String, String> increasedMapping;
19-
private Map<String, String> missingMapping;
19+
private Map<String, Schema> increasedMapping;
20+
private Map<String, Schema> missingMapping;
2021
private Map<String, ChangedSchema> changedMapping;
2122

2223
public ChangedOneOfSchema(Map<String, String> oldMapping, Map<String, String> newMapping, DiffContext context) {

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,13 @@ private String schema(int deepness, ComposedSchema schema) {
239239
.map(this::resolve)
240240
.forEach(composedChild -> sb.append(schema(deepness, composedChild)));
241241
}
242+
if (schema.getOneOf() != null && schema.getOneOf() != null) {
243+
LOGGER.debug("One of schema");
244+
sb.append(format("%sOne of:\n\n", indent(deepness)));
245+
schema.getOneOf().stream()
246+
.map(this::resolve)
247+
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild)));
248+
}
242249
return sb.toString();
243250
}
244251

0 commit comments

Comments
 (0)