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 5964b4cefa41a0563722c002c599f07ccdd6514f..15999aefcb8a5542fb96f1826dd27b9123288307 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 d189c43a0706cbc6aec1f1cff5cab0c65d156763..5249212400e77f7a6a1b2c3913d185363fc441be 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 {