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);
+ }
+}