From f9fbedbe8e80b50571b564bd379488fe252abba4 Mon Sep 17 00:00:00 2001
From: OZG-Cloud Team <noreply@ozg-sh.de>
Date: Tue, 28 May 2024 15:32:29 +0200
Subject: [PATCH] OZG-5412 intelliform-adapter: Fix duplicate key

---
 .../intelliform/DepositDataMapper.java        | 11 ++++---
 .../intelliform/DepositDataMapperTest.java    | 30 +++++++++++++++++++
 2 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
index 5964b4ce..15999aef 100644
--- a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
+++ b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/DepositDataMapper.java
@@ -25,6 +25,7 @@ package de.ozgcloud.eingang.intelliform;
 
 import java.io.IOException;
 import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -90,12 +91,14 @@ class DepositDataMapper {
 				.build();
 	}
 
-	private Map<String, IncomingFile> mapDepositAttachmentsToIncomingFiles(DepositData depositData) {
+	Map<String, IncomingFile> mapDepositAttachmentsToIncomingFiles(DepositData depositData) {
 		return depositData.getAttachments()
 				.stream()
-				.collect(
-						Collectors.toMap(Attachment::getId, this::mapAttachmentToIncomingFile)
-				);
+				.collect(Collectors.toMap(
+						Attachment::getId,
+						this::mapAttachmentToIncomingFile,
+						(u, v) -> v,
+						LinkedHashMap::new));
 	}
 
 	IncomingFile mapAttachmentToIncomingFile(Attachment attachment) {
diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
index d189c43a..52492124 100644
--- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
+++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/DepositDataMapperTest.java
@@ -136,6 +136,36 @@ class DepositDataMapperTest {
 
 	}
 
+	@DisplayName("map deposit attachments to incoming files")
+	@Nested
+	class TestMapDepositAttachmentsToIncomingFiles {
+		@DisplayName("should keep entry order")
+		@Test
+		void shouldKeepEntryOrder() {
+			var depositData = DepositDataTestFactory.create(ATTACHMENTS);
+
+			var incomingFileMap = mapper.mapDepositAttachmentsToIncomingFiles(depositData);
+
+			var keys = incomingFileMap.keySet().stream().toList();
+			assertThat(keys).containsExactly(XML_ATTACHMENT_ID, PDF_ATTACHMENT_ID, PNG_ATTACHMENT_ID);
+		}
+
+		@DisplayName("should keep last entry for duplicate key")
+		@Test
+		void shouldKeepLastEntryForDuplicateKey() {
+			var depositData = DepositDataTestFactory.create(List.of(
+					AttachmentTestFactory.createXmlDaten(),
+					AttachmentTestFactory.createPdf(),
+					AttachmentTestFactory.createXmlDaten()
+			));
+
+			var incomingFileMap = mapper.mapDepositAttachmentsToIncomingFiles(depositData);
+
+			var keys = incomingFileMap.keySet().stream().toList();
+			assertThat(keys).containsExactly(XML_ATTACHMENT_ID, PDF_ATTACHMENT_ID);
+		}
+	}
+
 	@DisplayName("map attachment to incoming file")
 	@Nested
 	class TestMapAttachmentToIncomingFile {
-- 
GitLab