From 2b42868f1c43447d7766a19a56c1385d69d4db1f Mon Sep 17 00:00:00 2001 From: CHssmith2 Date: Thu, 20 Aug 2026 17:14:44 +0100 Subject: [PATCH 1/5] update LocalDateDeserializer test coverage --- .../LocalDateDeserializerTest.java | 47 +++++++++++++++---- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java b/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java index ae5866b..48de606 100644 --- a/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java +++ b/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java @@ -1,7 +1,12 @@ package uk.gov.companieshouse.api.serialization; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import java.io.IOException; import java.time.LocalDate; import org.junit.jupiter.api.Assertions; @@ -10,6 +15,7 @@ import tools.jackson.core.JsonParser; +import tools.jackson.databind.DeserializationContext; import tools.jackson.databind.ObjectMapper; import uk.gov.companieshouse.api.exception.BadRequestException; @@ -31,7 +37,7 @@ void dateShouldDeserialize() { String jsonTestString = "{\"date\":{\"$date\": \"2023-01-09T00:00:00Z\"}}"; LocalDate returnedDate = deserialize(jsonTestString); - Assertions.assertEquals(LocalDate.of(2023, 1, 9), returnedDate); + assertEquals(LocalDate.of(2023, 1, 9), returnedDate); } @Test @@ -39,7 +45,7 @@ void longStringReturnsLong() { String jsonTestString = "{\"date\":{\"$date\": {\"$numberLong\":\"-1431388800000\"}}}"; LocalDate returnedDate = deserialize(jsonTestString); - Assertions.assertEquals(LocalDate.of(1924, 8, 23), returnedDate); + assertEquals(LocalDate.of(1924, 8, 23), returnedDate); } @Test @@ -52,19 +58,45 @@ void nullStringReturnsError() { void invalidStringReturnsError() { String jsonTestString = "{\"date\":{\"$date\": \"NotADate\"}}}"; - assertThrows(java.time.format.DateTimeParseException.class, () -> deserialize(jsonTestString)); + BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + + assertEquals("Deserialization failed.", exception.getMessage()); } @Test void missingDateFieldReturnsError() { String jsonTestString = "{\"date\":{}}"; - assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + + BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + assertEquals("$date field is missing or null", exception.getMessage()); } @Test void nullDateFieldReturnsError() { String jsonTestString = "{\"date\":{\"$date\":null}}"; - assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + + BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + assertEquals("$date field is missing or null", exception.getMessage()); + } + + @Test + void invalidDateShouldReturnError() throws Exception { + + JsonParser parser = mock(JsonParser.class); + when(parser.readValueAsTree()) + .thenThrow(new RuntimeException("Invalid JSON")); + BadRequestException exception = assertThrows(BadRequestException.class, () -> deserializer.deserialize(parser, null)); + + assertEquals("Deserialization failed.", exception.getMessage()); + } + + @Test + void invalidNumberLongReturnError() throws Exception { + String jsonTestString = "{\"date\":{\"$date\": {\"$numberLong\":\"not-a-number\"}}}"; + + BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + + assertEquals("Deserialization failed.", exception.getMessage()); } private LocalDate deserialize(String jsonString) { @@ -76,11 +108,6 @@ private LocalDate deserialize(String jsonString) { // Pass null for DeserializationContext as it's not used in the deserializer return deserializer.deserialize(parser, null); } catch (Exception e) { - // Unwrap if it's a RuntimeException wrapping another exception - if (e instanceof RuntimeException && e.getCause() != null) { - throw (RuntimeException) e.getCause(); - } - // Otherwise, rethrow as is throw e; } } From e8a131764609f55383985e8511cb1772fefd27fc Mon Sep 17 00:00:00 2001 From: CHssmith2 Date: Thu, 20 Aug 2026 17:18:49 +0100 Subject: [PATCH 2/5] remove unused imports --- .../api/serialization/LocalDateDeserializerTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java b/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java index 48de606..6b27151 100644 --- a/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java +++ b/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java @@ -2,20 +2,16 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import java.io.IOException; import java.time.LocalDate; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import tools.jackson.core.JsonParser; -import tools.jackson.databind.DeserializationContext; import tools.jackson.databind.ObjectMapper; import uk.gov.companieshouse.api.exception.BadRequestException; From cbeac5405719a2ca13a6360b8e903f371f135c71 Mon Sep 17 00:00:00 2001 From: CHssmith2 Date: Fri, 21 Aug 2026 09:39:40 +0100 Subject: [PATCH 3/5] add new unit test for TransactionKindResult --- .../utils/TransactionKindResultTest.java | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java diff --git a/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java b/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java new file mode 100644 index 0000000..f8ae5a0 --- /dev/null +++ b/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java @@ -0,0 +1,104 @@ +package uk.gov.companieshouse.api.filinghistory.utils; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class TransactionKindResultTest { + + @Test + void constructorShouldSetFields() { + TransactionKind kind = TransactionKind.TOP_LEVEL; + + TransactionKindResult result = + new TransactionKindResult("encoded-id", kind); + + assertEquals("encoded-id", result.getEncodedId()); + assertEquals(kind, result.getKind()); + } + + @Test + void settersShouldUpdateFields() { + TransactionKindResult result = + new TransactionKindResult(null, null); + + result.setEncodedId("new-id"); + result.setKind(TransactionKind.TOP_LEVEL); + + assertEquals("new-id", result.getEncodedId()); + assertEquals(TransactionKind.TOP_LEVEL, result.getKind()); + } + + @Test + void equalsShouldReturnTrueForSameValues() { + TransactionKindResult first = + new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + + TransactionKindResult second = + new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + + assertEquals(first, second); + assertEquals(first.hashCode(), second.hashCode()); + } + + @Test + void equalsShouldReturnFalseForDifferentEncodedId() { + TransactionKindResult first = + new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + + TransactionKindResult second = + new TransactionKindResult("id2", TransactionKind.TOP_LEVEL); + + assertNotEquals(first, second); + assertNotEquals(first.hashCode(), second.hashCode()); + } + + @Test + void equalsShouldReturnFalseForDifferentKind() { + TransactionKindResult first = + new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + + TransactionKindResult second = + new TransactionKindResult("id1", TransactionKind.ASSOCIATED_FILING); + + assertNotEquals(first, second); + assertNotEquals(first.hashCode(), second.hashCode()); + } + + @Test + void equalsShouldReturnFalseForDifferentObjectType() { + TransactionKindResult result = + new TransactionKindResult("id1", TransactionKind.ANNOTATION); + + assertNotEquals(result, "not-a-TransactionKindResult"); + } + + @Test + void equalsShouldHandleNullFields() { + TransactionKindResult first = + new TransactionKindResult(null, null); + + TransactionKindResult second = + new TransactionKindResult(null, null); + + assertEquals(first, second); + } + + @Test + void hashCodeShouldHandleNullValues() { + TransactionKindResult result = + new TransactionKindResult(null, null); + + result.hashCode(); + } + + @Test + void hashCodeShouldHandleNonNullValues() { + TransactionKindResult result = + new TransactionKindResult( + "id1", + TransactionKind.RESOLUTION); + + result.hashCode(); + } +} From b52c67e6da509a585e08593e75d05a2054e8333e Mon Sep 17 00:00:00 2001 From: CHssmith2 Date: Fri, 21 Aug 2026 12:52:10 +0100 Subject: [PATCH 4/5] fix newer warnings --- .../utils/TransactionKindResultTest.java | 51 +++++++------------ .../LocalDateDeserializerTest.java | 28 +++++----- 2 files changed, 34 insertions(+), 45 deletions(-) diff --git a/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java b/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java index f8ae5a0..d692899 100644 --- a/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java +++ b/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java @@ -2,7 +2,9 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; class TransactionKindResultTest { @@ -10,8 +12,7 @@ class TransactionKindResultTest { void constructorShouldSetFields() { TransactionKind kind = TransactionKind.TOP_LEVEL; - TransactionKindResult result = - new TransactionKindResult("encoded-id", kind); + TransactionKindResult result = new TransactionKindResult("encoded-id", kind); assertEquals("encoded-id", result.getEncodedId()); assertEquals(kind, result.getKind()); @@ -19,8 +20,7 @@ void constructorShouldSetFields() { @Test void settersShouldUpdateFields() { - TransactionKindResult result = - new TransactionKindResult(null, null); + TransactionKindResult result = new TransactionKindResult(null, null); result.setEncodedId("new-id"); result.setKind(TransactionKind.TOP_LEVEL); @@ -31,11 +31,9 @@ void settersShouldUpdateFields() { @Test void equalsShouldReturnTrueForSameValues() { - TransactionKindResult first = - new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + TransactionKindResult first = new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); - TransactionKindResult second = - new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + TransactionKindResult second = new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); assertEquals(first, second); assertEquals(first.hashCode(), second.hashCode()); @@ -43,11 +41,9 @@ void equalsShouldReturnTrueForSameValues() { @Test void equalsShouldReturnFalseForDifferentEncodedId() { - TransactionKindResult first = - new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + TransactionKindResult first = new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); - TransactionKindResult second = - new TransactionKindResult("id2", TransactionKind.TOP_LEVEL); + TransactionKindResult second = new TransactionKindResult("id2", TransactionKind.TOP_LEVEL); assertNotEquals(first, second); assertNotEquals(first.hashCode(), second.hashCode()); @@ -55,11 +51,9 @@ void equalsShouldReturnFalseForDifferentEncodedId() { @Test void equalsShouldReturnFalseForDifferentKind() { - TransactionKindResult first = - new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); + TransactionKindResult first = new TransactionKindResult("id1", TransactionKind.TOP_LEVEL); - TransactionKindResult second = - new TransactionKindResult("id1", TransactionKind.ASSOCIATED_FILING); + TransactionKindResult second = new TransactionKindResult("id1", TransactionKind.ASSOCIATED_FILING); assertNotEquals(first, second); assertNotEquals(first.hashCode(), second.hashCode()); @@ -67,38 +61,31 @@ void equalsShouldReturnFalseForDifferentKind() { @Test void equalsShouldReturnFalseForDifferentObjectType() { - TransactionKindResult result = - new TransactionKindResult("id1", TransactionKind.ANNOTATION); + TransactionKindResult result = new TransactionKindResult("id1", TransactionKind.ANNOTATION); - assertNotEquals(result, "not-a-TransactionKindResult"); + assertNotEquals("not-a-TransactionKindResult", result); } @Test void equalsShouldHandleNullFields() { - TransactionKindResult first = - new TransactionKindResult(null, null); + TransactionKindResult first = new TransactionKindResult(null, null); - TransactionKindResult second = - new TransactionKindResult(null, null); + TransactionKindResult second = new TransactionKindResult(null, null); assertEquals(first, second); } @Test void hashCodeShouldHandleNullValues() { - TransactionKindResult result = - new TransactionKindResult(null, null); + TransactionKindResult result = new TransactionKindResult(null, null); - result.hashCode(); + assertNotNull(result.hashCode()); } @Test void hashCodeShouldHandleNonNullValues() { - TransactionKindResult result = - new TransactionKindResult( - "id1", - TransactionKind.RESOLUTION); + TransactionKindResult result = new TransactionKindResult("id1", TransactionKind.RESOLUTION); - result.hashCode(); + assertNotNull(result.hashCode()); } } diff --git a/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java b/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java index 6b27151..56fab8b 100644 --- a/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java +++ b/src/test/java/uk/gov/companieshouse/api/serialization/LocalDateDeserializerTest.java @@ -17,6 +17,8 @@ class LocalDateDeserializerTest { + private static final String DESERIALISATION_FALIED_EXCEPTION_MESSAGE = "Deserialization failed."; + private static final String DATE_FIELD_MISSING_OR_NULL = "$date field is missing or null"; private LocalDateDeserializer deserializer; private ObjectMapper mapper; @@ -54,45 +56,39 @@ void nullStringReturnsError() { void invalidStringReturnsError() { String jsonTestString = "{\"date\":{\"$date\": \"NotADate\"}}}"; - BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); - - assertEquals("Deserialization failed.", exception.getMessage()); + assertException(DESERIALISATION_FALIED_EXCEPTION_MESSAGE, jsonTestString); } @Test void missingDateFieldReturnsError() { String jsonTestString = "{\"date\":{}}"; - BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); - assertEquals("$date field is missing or null", exception.getMessage()); + assertException(DATE_FIELD_MISSING_OR_NULL, jsonTestString); } @Test void nullDateFieldReturnsError() { String jsonTestString = "{\"date\":{\"$date\":null}}"; - BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); - assertEquals("$date field is missing or null", exception.getMessage()); + assertException(DATE_FIELD_MISSING_OR_NULL, jsonTestString); } @Test - void invalidDateShouldReturnError() throws Exception { + void invalidDateShouldReturnError() { JsonParser parser = mock(JsonParser.class); when(parser.readValueAsTree()) .thenThrow(new RuntimeException("Invalid JSON")); BadRequestException exception = assertThrows(BadRequestException.class, () -> deserializer.deserialize(parser, null)); - assertEquals("Deserialization failed.", exception.getMessage()); + assertEquals(DESERIALISATION_FALIED_EXCEPTION_MESSAGE, exception.getMessage()); } @Test - void invalidNumberLongReturnError() throws Exception { + void invalidNumberLongReturnError() { String jsonTestString = "{\"date\":{\"$date\": {\"$numberLong\":\"not-a-number\"}}}"; - BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); - - assertEquals("Deserialization failed.", exception.getMessage()); + assertException(DESERIALISATION_FALIED_EXCEPTION_MESSAGE, jsonTestString); } private LocalDate deserialize(String jsonString) { @@ -108,4 +104,10 @@ private LocalDate deserialize(String jsonString) { } } + private void assertException(String expectedMessage, String jsonTestString) { + BadRequestException exception = assertThrows(BadRequestException.class, () -> deserialize(jsonTestString)); + + assertEquals(expectedMessage, exception.getMessage()); + } + } \ No newline at end of file From f00c665eb8e80c8cc1b639598a1028106b513d14 Mon Sep 17 00:00:00 2001 From: CHssmith2 Date: Fri, 21 Aug 2026 13:18:56 +0100 Subject: [PATCH 5/5] address further warnings --- .../api/filinghistory/utils/TransactionKindResultTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java b/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java index d692899..e60afbd 100644 --- a/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java +++ b/src/test/java/uk/gov/companieshouse/api/filinghistory/utils/TransactionKindResultTest.java @@ -4,7 +4,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; class TransactionKindResultTest { @@ -79,13 +78,15 @@ void equalsShouldHandleNullFields() { void hashCodeShouldHandleNullValues() { TransactionKindResult result = new TransactionKindResult(null, null); - assertNotNull(result.hashCode()); + int hashcode = result.hashCode(); + assertNotEquals(0, hashcode); } @Test void hashCodeShouldHandleNonNullValues() { TransactionKindResult result = new TransactionKindResult("id1", TransactionKind.RESOLUTION); - assertNotNull(result.hashCode()); + int hashcode = result.hashCode(); + assertNotEquals(0, hashcode); } }