🐛 Fix a bug in Issue#hashCode()
authorDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 27 Nov 2025 15:08:36 +0000 (16:08 +0100)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Thu, 27 Nov 2025 15:08:36 +0000 (16:08 +0100)
And add the test that discovered it.

src/main/java/de/todesbaum/jsite/application/validation/Issue.java
src/test/java/de/todesbaum/jsite/application/validation/IssueTest.java [new file with mode: 0644]

index 451aabc..2df4878 100644 (file)
@@ -53,7 +53,7 @@ public class Issue {
 
        @Override
        public int hashCode() {
-               return Objects.hash(errorKey, fatal, parameters);
+               return Objects.hash(errorKey, fatal, Arrays.hashCode(parameters));
        }
 
        @Override
diff --git a/src/test/java/de/todesbaum/jsite/application/validation/IssueTest.java b/src/test/java/de/todesbaum/jsite/application/validation/IssueTest.java
new file mode 100644 (file)
index 0000000..628b026
--- /dev/null
@@ -0,0 +1,118 @@
+package de.todesbaum.jsite.application.validation;
+
+import org.junit.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.not;
+
+public class IssueTest {
+
+       @Test
+       public void issueRetainsErrorKey() {
+               Issue issue = new Issue("error-key", false, "param1", "param2");
+               assertThat(issue.getErrorKey(), equalTo("error-key"));
+       }
+
+       @Test
+       public void issueRetainsFatalFalse() {
+               Issue issue = new Issue("error-key", false, "param1", "param2");
+               assertThat(issue.isFatal(), equalTo(false));
+       }
+
+       @Test
+       public void issueRetainsFatalTrue() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.isFatal(), equalTo(true));
+       }
+
+       @Test
+       public void issueRetainsParameters() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.getParameters(), equalTo(new String[] { "param1", "param2" }));
+       }
+
+       @Test
+       public void issuesAreEqualIfAllValuesAreEqual() {
+               Issue firstIssue = new Issue("error-key", true, "param1", "param2");
+               Issue secondIssue = new Issue("error-key", true, "param1", "param2");
+               assertThat(firstIssue, equalTo(secondIssue));
+       }
+
+       @Test
+       public void hashCodeIsTheSameIfObjectsAreEqual() {
+               Issue firstIssue = new Issue("error-key", true, "param1", "param2");
+               Issue secondIssue = new Issue("error-key", true, "param1", "param2");
+               assertThat(firstIssue.hashCode(), equalTo(secondIssue.hashCode()));
+       }
+
+       @Test
+       public void issuesAreEqualToThemselves() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue, equalTo(issue));
+       }
+
+       @Test
+       public void issueIsNotEqualToNull() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.equals(null), equalTo(false));
+       }
+
+       @Test
+       public void issuesAreNotEqualToObjectsOfDifferentClass() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.equals(new Object()), equalTo(false));
+       }
+
+       @Test
+       public void issuesAreNotEqualIfErrorKeyIsDifferent() {
+               Issue firstIssue = new Issue("first-error-key", true, "param1", "param2");
+               Issue secondIssue = new Issue("second-error-key", true, "param1", "param2");
+               assertThat(firstIssue, not(equalTo(secondIssue)));
+       }
+
+       @Test
+       public void issuesAreNotEqualIfFatalIsDifferent() {
+               Issue firstIssue = new Issue("error-key", true, "param1", "param2");
+               Issue secondIssue = new Issue("error-key", false, "param1", "param2");
+               assertThat(firstIssue, not(equalTo(secondIssue)));
+       }
+
+       @Test
+       public void issuesAreNotEqualIfParametersAreDifferent() {
+               Issue firstIssue = new Issue("error-key", true, "param1", "param2");
+               Issue secondIssue = new Issue("error-key", true, "param1", "param2", "param3");
+               assertThat(firstIssue, not(equalTo(secondIssue)));
+       }
+
+       @Test
+       public void toStringContainsErrorKey() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.toString(), allOf(
+                               containsString("errorKey"),
+                               containsString("error-key")
+               ));
+       }
+
+       @Test
+       public void toStringContainsFatal() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.toString(), allOf(
+                               containsString("fatal"),
+                               containsString("true")
+               ));
+       }
+
+       @Test
+       public void toStringContainsParameters() {
+               Issue issue = new Issue("error-key", true, "param1", "param2");
+               assertThat(issue.toString(), allOf(
+                               containsString("parameters"),
+                               containsString("param1"),
+                               containsString("param2")
+               ));
+       }
+
+}