Skip to content

Commit 3daeaad

Browse files
committed
Add hierarchical ids for ChangedOperation[I|O] diff events
1 parent 9e2b204 commit 3daeaad

File tree

4 files changed

+68
-14
lines changed

4 files changed

+68
-14
lines changed

smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedOperationInput.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,21 @@ public final class ChangedOperationInput extends AbstractDiffEvaluator {
1919
public List<ValidationEvent> evaluate(Differences differences) {
2020
return differences.changedShapes(OperationShape.class)
2121
.filter(change -> !change.getOldShape().getInputShape().equals(change.getNewShape().getInputShape()))
22-
.map(change -> error(change.getNewShape(),
23-
String.format(
24-
"Changed operation input of `%s` from `%s` to `%s`",
25-
change.getShapeId(),
26-
change.getOldShape().getInputShape(),
27-
change.getNewShape().getInputShape())))
22+
.map(change -> {
23+
ValidationEvent.Builder eventBuilder = error(change.getNewShape(),
24+
String.format(
25+
"Changed operation input of `%s` from `%s` to `%s`",
26+
change.getShapeId(),
27+
change.getOldShape().getInputShape(),
28+
change.getNewShape().getInputShape()))
29+
.toBuilder();
30+
return eventBuilder
31+
.id(String.format("%s.From.%s.To.%s",
32+
getEventId(),
33+
change.getOldShape().getInputShape(),
34+
change.getNewShape().getInputShape()))
35+
.build();
36+
})
2837
.collect(Collectors.toList());
2938
}
3039
}

smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedOperationOutput.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,21 @@ public final class ChangedOperationOutput extends AbstractDiffEvaluator {
1919
public List<ValidationEvent> evaluate(Differences differences) {
2020
return differences.changedShapes(OperationShape.class)
2121
.filter(change -> !change.getOldShape().getOutputShape().equals(change.getNewShape().getOutputShape()))
22-
.map(change -> error(change.getNewShape(),
23-
String.format(
24-
"Changed operation output of `%s` from `%s` to `%s`",
25-
change.getShapeId(),
26-
change.getOldShape().getOutputShape(),
27-
change.getNewShape().getOutputShape())))
22+
.map(change -> {
23+
ValidationEvent.Builder eventBuilder = error(change.getNewShape(),
24+
String.format(
25+
"Changed operation output of `%s` from `%s` to `%s`",
26+
change.getShapeId(),
27+
change.getOldShape().getOutputShape(),
28+
change.getNewShape().getOutputShape()))
29+
.toBuilder();
30+
return eventBuilder
31+
.id(String.format("%s.From.%s.To.%s",
32+
getEventId(),
33+
change.getOldShape().getOutputShape(),
34+
change.getNewShape().getOutputShape()))
35+
.build();
36+
})
2837
.collect(Collectors.toList());
2938
}
3039
}

smithy-diff/src/test/java/software/amazon/smithy/diff/evaluators/ChangedOperationInputTest.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,24 @@ public void detectWhenOperationInputIsChanged() {
2727
Model modelB = Model.assembler().addShapes(o2, b).assemble().unwrap();
2828
List<ValidationEvent> events = ModelDiff.compare(modelA, modelB);
2929

30-
assertThat(TestHelper.findEvents(events, "ChangedOperationInput").size(), equalTo(1));
30+
List<ValidationEvent> expectedEvents = TestHelper.findEvents(events, "ChangedOperationInput");
31+
assertThat(expectedEvents.size(), equalTo(1));
32+
ValidationEvent event = expectedEvents.get(0);
33+
assertThat(event.getId(), equalTo("ChangedOperationInput.From.foo.baz#A.To.foo.baz#B"));
34+
}
35+
36+
@Test
37+
public void detectWhenOperationInputIsAdded() {
38+
OperationShape o1 = OperationShape.builder().id("foo.baz#Bar").build();
39+
OperationShape o2 = OperationShape.builder().id("foo.baz#Bar").input(ShapeId.from("foo.baz#B")).build();
40+
StructureShape b = StructureShape.builder().id("foo.baz#B").build();
41+
Model modelA = Model.assembler().addShapes(o1).assemble().unwrap();
42+
Model modelB = Model.assembler().addShapes(o2, b).assemble().unwrap();
43+
List<ValidationEvent> events = ModelDiff.compare(modelA, modelB);
44+
45+
List<ValidationEvent> expectedEvents = TestHelper.findEvents(events, "ChangedOperationInput");
46+
assertThat(expectedEvents.size(), equalTo(1));
47+
ValidationEvent event = expectedEvents.get(0);
48+
assertThat(event.getId(), equalTo("ChangedOperationInput.From.smithy.api#Unit.To.foo.baz#B"));
3149
}
3250
}

smithy-diff/src/test/java/software/amazon/smithy/diff/evaluators/ChangedOperationOutputTest.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,24 @@ public void detectWhenOperationOutputIsChanged() {
2727
Model modelB = Model.assembler().addShapes(o2, b).assemble().unwrap();
2828
List<ValidationEvent> events = ModelDiff.compare(modelA, modelB);
2929

30-
assertThat(TestHelper.findEvents(events, "ChangedOperationOutput").size(), equalTo(1));
30+
List<ValidationEvent> expectedEvents = TestHelper.findEvents(events, "ChangedOperationOutput");
31+
assertThat(expectedEvents.size(), equalTo(1));
32+
ValidationEvent event = expectedEvents.get(0);
33+
assertThat(event.getId(), equalTo("ChangedOperationOutput.From.foo.baz#A.To.foo.baz#B"));
34+
}
35+
36+
@Test
37+
public void detectWhenOperationOutputIsAdded() {
38+
OperationShape o1 = OperationShape.builder().id("foo.baz#Bar").build();
39+
OperationShape o2 = OperationShape.builder().id("foo.baz#Bar").output(ShapeId.from("foo.baz#B")).build();
40+
StructureShape b = StructureShape.builder().id("foo.baz#B").build();
41+
Model modelA = Model.assembler().addShapes(o1).assemble().unwrap();
42+
Model modelB = Model.assembler().addShapes(o2, b).assemble().unwrap();
43+
List<ValidationEvent> events = ModelDiff.compare(modelA, modelB);
44+
45+
List<ValidationEvent> expectedEvents = TestHelper.findEvents(events, "ChangedOperationOutput");
46+
assertThat(expectedEvents.size(), equalTo(1));
47+
ValidationEvent event = expectedEvents.get(0);
48+
assertThat(event.getId(), equalTo("ChangedOperationOutput.From.smithy.api#Unit.To.foo.baz#B"));
3149
}
3250
}

0 commit comments

Comments
 (0)