Improve MediaTypeAssert to-string-equality assertions

This commit introduces a `isNotEqualTo(String)` assertion in order to
avoid false negatives when using the default Object-based assertion.

This is a risk since MediaTypeAssert has a `isEqualTo(String)` method
that overrides the base object method and parses the provided String
into a MediaType. Users may thus be tempted to use the reverse assertion
and expect the same parsing behaviour.

This commit also adds tests around the String parsing and the isNotEqual
cases.

Closes gh-32756
This commit is contained in:
Simon Baslé
2024-05-15 11:01:30 +02:00
parent 60c5f44e1d
commit 531da015e1
2 changed files with 78 additions and 7 deletions

View File

@@ -43,19 +43,35 @@ class MediaTypeAssertTests {
}
@Test
void isEqualWhenSameShouldPass() {
void isEqualWhenActualIsNullStringShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(null).isEqualTo("text/html"))
.withMessageContaining("Media type");
}
@Test
void isEqualWhenSameStringShouldPass() {
assertThat(mediaType("application/json")).isEqualTo("application/json");
}
@Test
void isEqualWhenDifferentShouldFail() {
void isEqualWhenDifferentStringShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(mediaType("application/json")).isEqualTo("text/html"))
.withMessageContaining("Media type");
}
@Test
void isEqualWhenActualIsNullShouldFail() {
void isEqualInvalidStringShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(mediaType("application/json")).isEqualTo("example of a bad value"))
.withMessageContaining("[Media type]")
.withMessageEndingWith("To be a valid media type but got:\n" +
" \"Invalid mime type \"example of a bad value\": does not contain '/'\"\n");
}
@Test
void isEqualWhenActualIsNullTypeShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(null).isEqualTo(MediaType.APPLICATION_JSON))
.withMessageContaining("Media type");
@@ -73,6 +89,49 @@ class MediaTypeAssertTests {
.withMessageContaining("Media type");
}
@Test
void isNotEqualWhenActualIsNullStringShouldPass() {
assertThat(null).isNotEqualTo("application/json");
}
@Test
void isNotEqualWhenDifferentStringShouldPass() {
assertThat(mediaType("application/json")).isNotEqualTo("text/html");
}
@Test
void isNotEqualWhenSameStringShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(mediaType("application/json")).isNotEqualTo("application/json"))
.withMessageContaining("Media type");
}
@Test
void isNotEqualInvalidStringShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(mediaType("application/json")).isNotEqualTo("example of a bad value"))
.withMessageContaining("[Media type]")
.withMessageEndingWith("To be a valid media type but got:\n" +
" \"Invalid mime type \"example of a bad value\": does not contain '/'\"\n");
}
@Test
void isNotEqualWhenActualIsNullTypeShouldPass() {
assertThat(null).isNotEqualTo(MediaType.APPLICATION_JSON);
}
@Test
void isNotEqualWhenDifferentTypeShouldPass() {
assertThat(mediaType("application/json")).isNotEqualTo(MediaType.TEXT_HTML);
}
@Test
void isNotEqualWhenSameTypeShouldFail() {
assertThatExceptionOfType(AssertionError.class)
.isThrownBy(() -> assertThat(mediaType("application/json")).isNotEqualTo(MediaType.APPLICATION_JSON))
.withMessageContaining("Media type");
}
@Test
void isCompatibleWhenSameShouldPass() {
assertThat(mediaType("application/json")).isCompatibleWith("application/json");