diff --git a/mycore-pi/pom.xml b/mycore-pi/pom.xml index 4f485185e6..39b2e69ff9 100644 --- a/mycore-pi/pom.xml +++ b/mycore-pi/pom.xml @@ -116,6 +116,16 @@ junit-jupiter-api test + + org.junit.jupiter + junit-jupiter-params + test + + + org.mockito + mockito-core + test + org.mycore mycore-ifs diff --git a/mycore-pi/src/main/java/org/mycore/pi/urn/MCRURNUtils.java b/mycore-pi/src/main/java/org/mycore/pi/urn/MCRURNUtils.java index 67abb1cc0b..35ba7b2a7d 100644 --- a/mycore-pi/src/main/java/org/mycore/pi/urn/MCRURNUtils.java +++ b/mycore-pi/src/main/java/org/mycore/pi/urn/MCRURNUtils.java @@ -19,9 +19,8 @@ package org.mycore.pi.urn; import java.text.ParseException; -import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.Date; -import java.util.Locale; import java.util.Optional; import org.apache.logging.log4j.LogManager; @@ -57,7 +56,8 @@ public static Date getDNBRegisterDate(String identifier) throws ParseException { return null; } - return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.GERMAN).parse(date); + Instant instant = Instant.parse(date); + return Date.from(instant); } } diff --git a/mycore-pi/src/test/java/org/mycore/pi/urn/MCRURNUtilsTest.java b/mycore-pi/src/test/java/org/mycore/pi/urn/MCRURNUtilsTest.java new file mode 100644 index 0000000000..4426ea82e5 --- /dev/null +++ b/mycore-pi/src/test/java/org/mycore/pi/urn/MCRURNUtilsTest.java @@ -0,0 +1,65 @@ +package org.mycore.pi.urn; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyString; + +import java.text.ParseException; +import java.time.format.DateTimeParseException; +import java.util.Date; +import java.util.Optional; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mycore.pi.urn.rest.MCRDNBURNRestClient; +import org.mycore.test.MyCoReTest; + +import com.google.gson.JsonObject; + +@MyCoReTest +public class MCRURNUtilsTest { + + @ParameterizedTest + @ValueSource(strings = { + "2025-11-07T15:00:21.000Z", + "2025-11-07T15:00:21Z", + "2025-11-07T15:00:21.1Z", + "2025-11-07T15:00:21-12:00", + "2025-11-07T15:00:21+01:00", + "2025-11-07T15:00:21.123456Z", + }) + public void testGetDNBRegisterDateValid(String dateString) throws ParseException { + try (MockedStatic urnClient = Mockito.mockStatic(MCRDNBURNRestClient.class)) { + urnClient.when(() -> MCRDNBURNRestClient.getRegistrationInfo(anyString())) + .thenReturn(createTestJson(dateString)); + Date returnDate = MCRURNUtils.getDNBRegisterDate("urn:test:123"); + assertNotNull(returnDate); + } + } + + @Test + public void testGetDNBRegisterDateInvalid() { + String dateString = "invalidDate"; + + try (MockedStatic urnClient = Mockito.mockStatic(MCRDNBURNRestClient.class)) { + urnClient.when(() -> MCRDNBURNRestClient.getRegistrationInfo(anyString())) + .thenReturn(createTestJson(dateString)); + assertThrows(DateTimeParseException.class, () -> MCRURNUtils.getDNBRegisterDate("urn:test:123")); + } + } + + private static Optional createTestJson(String dateString) { + JsonObject json = new JsonObject(); + json.addProperty("created", dateString); + json.addProperty("lastModified", dateString); + json.addProperty("myUrls", "123"); + json.addProperty("namespace", "123"); + json.addProperty("self", "123"); + json.addProperty("urls", "123"); + json.addProperty("urn", "123"); + return Optional.of(json); + } +}