From 19036880b4d21750b6b1d3fab3bf0f4e75feda0c Mon Sep 17 00:00:00 2001 From: Greg Turnquist Date: Tue, 19 Feb 2019 16:40:14 -0600 Subject: [PATCH] #825 - Comply with RFC8288 for LinkRelation matching. Added several tests to ensure compliance with RFC8288. Original pull request: #826. --- .../springframework/hateoas/LinkRelation.java | 2 +- .../hateoas/StringLinkRelation.java | 17 ++++++++++++++++- .../hateoas/LinkRelationUnitTest.java | 9 +++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/hateoas/LinkRelation.java b/src/main/java/org/springframework/hateoas/LinkRelation.java index d2d0df49..78a1b421 100644 --- a/src/main/java/org/springframework/hateoas/LinkRelation.java +++ b/src/main/java/org/springframework/hateoas/LinkRelation.java @@ -73,6 +73,6 @@ public interface LinkRelation { Assert.notNull(relation, "LinkRelation must not be null!"); - return this.value().equals(relation.value()); + return this.value().equalsIgnoreCase(relation.value()); } } diff --git a/src/main/java/org/springframework/hateoas/StringLinkRelation.java b/src/main/java/org/springframework/hateoas/StringLinkRelation.java index 34c16f4f..a5b01e56 100644 --- a/src/main/java/org/springframework/hateoas/StringLinkRelation.java +++ b/src/main/java/org/springframework/hateoas/StringLinkRelation.java @@ -54,7 +54,7 @@ class StringLinkRelation implements LinkRelation, Serializable { Assert.hasText(relation, "Relation must not be null or empty!"); - return CACHE.computeIfAbsent(relation, it -> new StringLinkRelation(it)); + return CACHE.computeIfAbsent(relation, StringLinkRelation::new); } /* @@ -75,4 +75,19 @@ class StringLinkRelation implements LinkRelation, Serializable { public String toString() { return value(); } + + @Override + public boolean equals(Object o) { + + if (this == o) { + return true; + } + + if (o == null || getClass() != o.getClass()) { + return false; + } + + StringLinkRelation that = (StringLinkRelation) o; + return this.relation.equalsIgnoreCase(that.relation); + } } diff --git a/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java b/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java index 13b9b65a..f38ec9f0 100644 --- a/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java +++ b/src/test/java/org/springframework/hateoas/LinkRelationUnitTest.java @@ -49,6 +49,15 @@ public class LinkRelationUnitTest { assertThat(myOwnLinkRelations).containsExactlyInAnyOrder(MyOwnLinkRelation.FOO, MyOwnLinkRelation.BAR); } + @Test // #825 + public void verifyRFC8288CaseInsensitiveMatching() { + + assertThat(LinkRelation.of("self")).isEqualTo(LinkRelation.of("SELF")); + assertThat(LinkRelation.of("SeLf")).isEqualTo(IanaLinkRelations.SELF); + assertThat(LinkRelation.of("self").isSameAs(LinkRelation.of("SELF"))).isTrue(); + assertThat(IanaLinkRelations.SELF.isSameAs(LinkRelation.of("seLF"))).isTrue(); + } + /** * Custom implementation of the {@link LinkRelation} interface. */