From ac0062d3bbad72384d71f84609c7ae60fc34fde3 Mon Sep 17 00:00:00 2001
From: Tobias Bruns <kontakt@tobias-bruns.de>
Date: Thu, 20 Mar 2025 10:16:06 +0100
Subject: [PATCH] OZG-7144 timestamp null safe cause of NPE in Test

---
 .../eingang/intelliform/DepositDataMapper.java       | 10 +++++++++-
 .../eingang/intelliform/DepositDataMapperTest.java   | 12 +++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java b/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
index 34e09920..93b4e696 100644
--- a/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
+++ b/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
@@ -26,7 +26,9 @@ package de.ozgcloud.eingang.intelliform;
 import static java.util.stream.Collectors.*;
 
 import java.io.IOException;
+import java.time.ZonedDateTime;
 import java.util.Collection;
+import java.util.GregorianCalendar;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -37,6 +39,7 @@ import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
+import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -190,7 +193,8 @@ class DepositDataMapper {
 	}
 
 	IntelliFormMetaData buildMetaData(DepositData depositData) {
-		var builder = IntelliFormMetaData.builder().origin(depositData.getTimestamp().toGregorianCalendar().toZonedDateTime());
+		var builder = IntelliFormMetaData.builder();
+		getOrigin(depositData).ifPresent(builder::origin);
 
 		depositData.getCustomParameters()
 				.forEach(entry -> builder.customParameter(IntelliFormMetaData.CUSTOM_PARAM_PREFIX + entry.key.toUpperCase(), entry.value));
@@ -198,4 +202,8 @@ class DepositDataMapper {
 		return builder.build();
 	}
 
+	Optional<ZonedDateTime> getOrigin(DepositData depositData) {
+		return Optional.ofNullable(depositData.getTimestamp()).map(XMLGregorianCalendar::toGregorianCalendar).map(GregorianCalendar::toZonedDateTime);
+	}
+
 }
diff --git a/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java b/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
index d79547b2..608c69ca 100644
--- a/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
+++ b/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
@@ -453,7 +453,7 @@ class DepositDataMapperTest {
 	}
 
 	@Nested
-	class TestCreateMetaData {
+	class TestBuildMetaData {
 
 		@Test
 		void shouldHaveOrigin() {
@@ -475,6 +475,16 @@ class DepositDataMapperTest {
 
 			assertThat(metaData.getEntry("CUSTOMPARAMETER_PARAM_KEY")).isEqualTo(DepositDataTestFactory.CUTOMPARA_VALUE);
 		}
+
+		@Test
+		void shouldHandleNullTimestamp() {
+			var depositData = DepositDataTestFactory.create();
+			depositData.setTimestamp(null);
+
+			var metaData = mapper.buildMetaData(depositData);
+
+			assertThat(metaData.getOrigin()).isNull();
+		}
 	}
 
 }
-- 
GitLab