Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add details to TraitBreakingChange EventId #1538

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import software.amazon.smithy.model.traits.Trait;
import software.amazon.smithy.model.traits.TraitDefinition;
import software.amazon.smithy.model.validation.ValidationEvent;
import software.amazon.smithy.utils.StringUtils;

/**
* Finds breaking changes related to when a trait is added, removed, or
Expand Down Expand Up @@ -170,7 +171,7 @@ private void compareResult(String path, Node left, Node right) {
}
FromSourceLocation location = !right.isNullNode() ? right : targetShape;
events.add(ValidationEvent.builder()
.id(TraitBreakingChange.class.getSimpleName())
.id(getValidationEventId(type))
.severity(rule.getDefaultedSeverity())
.shape(targetShape)
.sourceLocation(location)
Expand All @@ -180,6 +181,11 @@ private void compareResult(String path, Node left, Node right) {
}
}

private String getValidationEventId(TraitDefinition.ChangeType type) {
return String.format("%s.%s.%s", TraitBreakingChange.class.getSimpleName(),
StringUtils.capitalize(type.toString()), trait.getId());
}

// Check if a breaking change was encountered, and return the type of breaking change.
private TraitDefinition.ChangeType isChangeBreaking(TraitDefinition.ChangeType type, Node left, Node right) {
switch (type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ public void detectsBreakingChangeWhenRemoved() {
validate("trait-removed.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getSeverity(), equalTo(Severity.ERROR));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Removed trait `smithy.example#exampleTrait`"));
});
}
Expand Down Expand Up @@ -77,6 +78,7 @@ public void detectsBreakingChangeWhenAdded() {
shape -> shape.addTrait(new DynamicTrait(EXAMPLE_TRAIT, Node.objectNode())).build(),
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Add.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Added trait `smithy.example#exampleTrait`"));
}
);
Expand All @@ -86,6 +88,7 @@ public void detectsBreakingChangeWhenAdded() {
public void detectsBreakingChangePresence() {
validate("trait-presence.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Removed trait `smithy.example#exampleTrait`"));
});
}
Expand All @@ -94,6 +97,7 @@ public void detectsBreakingChangePresence() {
public void detectsBreakingChangeAny() {
validate("trait-any.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(), equalTo("Removed trait `smithy.example#exampleTrait`"));
});
}
Expand All @@ -102,6 +106,7 @@ public void detectsBreakingChangeAny() {
public void canChangeSeverity() {
validate("trait-severity.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getSeverity(), equalTo(Severity.WARNING));
});
}
Expand All @@ -110,6 +115,7 @@ public void canChangeSeverity() {
public void canIncludeCustomMessage() {
validate("trait-message.smithy", shape -> shape.removeTrait(EXAMPLE_TRAIT).build(), events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Removed trait `smithy.example#exampleTrait`; This is bad!"));
});
Expand All @@ -122,6 +128,7 @@ public void canPathIntoListMembers() {
shape -> shape.addTrait(new DynamicTrait(EXAMPLE_TRAIT, Node.fromStrings("a", "B", "c"))).build(),
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Update.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Changed trait contents of `smithy.example#exampleTrait` at path `/1` "
+ "from \"b\" to \"B\""));
Expand All @@ -137,6 +144,7 @@ public void canPathIntoMapKeys() {
.build(),
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Removed trait contents from `smithy.example#exampleTrait` at path `/b`. "
+ "Removed value: \"B\""));
Expand All @@ -155,6 +163,7 @@ public void canPathIntoMapValues() {
},
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Update.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Changed trait contents of `smithy.example#exampleTrait` at path `/b` "
+ "from \"B\" to \"_B_\""));
Expand All @@ -172,6 +181,7 @@ public void canPathIntoStructureMembers() {
},
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Remove.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Removed trait contents from `smithy.example#exampleTrait` at path "
+ "`/foo/bar`. Removed value: \"hi\""));
Expand All @@ -189,6 +199,7 @@ public void canPathIntoUnionMembers() {
},
events -> {
assertThat(events, hasSize(1));
assertThat(events.get(0).getId(), equalTo("TraitBreakingChange.Update.smithy.example#exampleTrait"));
assertThat(events.get(0).getMessage(),
equalTo("Changed trait contents of `smithy.example#exampleTrait` at path "
+ "`/foo` from \"hi\" to \"bye\""));
Expand Down