diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index df3d8156aa9ba4e2fce017a55f79fe257d80fe98..8f1a2a9b9b7e9e07bb4bdce3240f6a9e75082e91 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -16,7 +16,6 @@ <properties> <vorgang-manager.version>2.17.0-SNAPSHOT</vorgang-manager.version> - <nachrichten-manager.version>2.9.0</nachrichten-manager.version> <nachrichten-manager.version>2.14.0-SNAPSHOT</nachrichten-manager.version> <document-manager.version>1.0.0-SNAPSHOT</document-manager.version> <api-lib.version>0.13.0-SNAPSHOT</api-lib.version> diff --git a/vorgang-manager-server/lombok.config b/vorgang-manager-server/lombok.config index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..a06fa130e8af26b659f2d3a0cb1114cd966a9b0e 100644 --- a/vorgang-manager-server/lombok.config +++ b/vorgang-manager-server/lombok.config @@ -27,4 +27,5 @@ lombok.log.slf4j.flagUsage = ERROR lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException -lombok.addLombokGeneratedAnnotation = true \ No newline at end of file +lombok.addLombokGeneratedAnnotation = true +lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier \ No newline at end of file diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index befeabf44fbf36f8a0a910a59bdb267bfb596592..da1d4cc8fce14c3291d29f10b9c0c2b6499228f1 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -60,7 +60,7 @@ <notification-manager.version>2.12.0-SNAPSHOT</notification-manager.version> <collaboration-manager.version>0.4.0-SNAPSHOT</collaboration-manager.version> - <zip.version>2.11.1</zip.version> + <zip.version>2.11.5</zip.version> <jsoup.version>1.15.3</jsoup.version> <mongock.version>5.3.4</mongock.version> <testcontainer.version>1.17.3</testcontainer.version> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java index bb28f0f25b66a1cc2d6065009c4df9b259270fa4..7a246482ed04591f236090b75f878ecec3e7f8c8 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/errorhandling/ExceptionHandler.java @@ -49,7 +49,7 @@ public class ExceptionHandler { @GrpcExceptionHandler public StatusException handleNotFoundException(NotFoundException e) { - LOG.error(ERROR_MESSAGE, e); + LOG.warn(ERROR_MESSAGE, e); return createStatusException(buildNotFoundStatus(e), buildMetadata(e)); } @@ -112,7 +112,7 @@ public class ExceptionHandler { public StatusException handleNotFoundException(de.ozgcloud.apilib.common.errorhandling.NotFoundException e) { var exceptionId = createExceptionId(); var messageWithExceptionId = ExceptionUtil.formatMessageWithExceptionId(e.getMessage(), exceptionId); - LOG.error("Grpc internal server error: {}", messageWithExceptionId, e); + LOG.warn("Grpc internal server error: {}", messageWithExceptionId, e); var status = Status.NOT_FOUND.withDescription(messageWithExceptionId).withCause(e.getCause()); return createStatusException(status, buildMetadata(exceptionId)); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java index 3424a6f908f5386f5c98f0fab87a926b5a6bf3d4..f5cdfdeda15cc7c695484d67a8d3735ba212b317 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumITCase.java @@ -21,9 +21,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.gridfs.GridFsTemplate; +import org.springframework.security.saml2.core.Saml2Error; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.annotation.DirtiesContext; +import com.google.protobuf.ByteString; + import de.ozgcloud.apilib.common.errorhandling.NotFoundException; import de.ozgcloud.common.test.DataITCase; import de.ozgcloud.common.test.TestUtils; @@ -33,13 +37,17 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; import de.ozgcloud.nachrichten.postfach.osi.ReplyOption; import de.ozgcloud.vorgang.VorgangManagerServerApplication; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem.VorgangAttachedItemBuilder; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; +import de.ozgcloud.vorgang.files.GridFsTestFactory; +import de.ozgcloud.vorgang.files.OzgFileTestFactory; import de.ozgcloud.vorgang.servicekonto.PostfachAddressTestFactory; import de.ozgcloud.vorgang.servicekonto.ServiceKonto; import de.ozgcloud.vorgang.servicekonto.ServiceKontoTestFactory; import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangHeadTestFactory; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; +import io.grpc.stub.CallStreamObserver; import io.grpc.stub.StreamObserver; @SpringBootTest(classes = { VorgangManagerServerApplication.class }, properties = { @@ -53,6 +61,7 @@ import io.grpc.stub.StreamObserver; "grpc.client.command-manager.address=in-process:antragraumitcase", "grpc.client.info-manager.address=in-process:antragraumitcase", "grpc.client.vorgang-manager.address=in-process:antragraumitcase", + "grpc.client.file-manager.address=in-process:antragraumitcase" }) @WithMockUser @DataITCase @@ -63,6 +72,8 @@ class AntragraumITCase { private AntragraumGrpcService grpcService; @Autowired private MongoOperations mongoOperations; + @Autowired + private GridFsTemplate gridFsTemplate; @MockBean private Saml2Decrypter decrypter; @@ -73,6 +84,8 @@ class AntragraumITCase { void prepareDatabase() { mongoOperations.dropCollection(Vorgang.COLLECTION_NAME); mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); + mongoOperations.dropCollection("fs.files"); + mongoOperations.dropCollection("fs.chunks"); } @DisplayName("Find rueckfragen") @@ -87,7 +100,8 @@ class AntragraumITCase { @BeforeEach void mock() { - when(decrypter.decryptPostfachId(any())).thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); when(verifier.verify(any())).thenReturn(Collections.emptyList()); } @@ -101,10 +115,12 @@ class AntragraumITCase { @BeforeEach void prepareDatabase() { vorgangTrustLevel3 = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME); - mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel3.getId()), VorgangAttachedItem.COLLECTION_NAME); + mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel3.getId()), + VorgangAttachedItem.COLLECTION_NAME); vorgangTrustLevel2 = mongoOperations.save(createVorgang(TrustLevel.LEVEL_2), Vorgang.COLLECTION_NAME); - mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel2.getId()), VorgangAttachedItem.COLLECTION_NAME); + mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgangTrustLevel2.getId()), + VorgangAttachedItem.COLLECTION_NAME); } @Test @@ -141,7 +157,8 @@ class AntragraumITCase { @BeforeEach void prepareDatabase() { var vorgang = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME); - mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgang.getId()), VorgangAttachedItem.COLLECTION_NAME); + mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(vorgang.getId()), + VorgangAttachedItem.COLLECTION_NAME); } @Test @@ -180,14 +197,15 @@ class AntragraumITCase { private List<GrpcRueckfrageHead> findRueckfragen() { grpcService.findRueckfragen( - GrpcFindRueckfrageRequestTestFactory.createBuilder().setSamlToken(TestUtils.loadTextFile("SamlResponse.xml")).build(), + GrpcFindRueckfrageRequestTestFactory.createBuilder() + .setSamlToken(TestUtils.loadTextFile("SamlResponse.xml")).build(), responseObserver); verify(responseObserver, timeout(30000)).onNext(captor.capture()); return captor.getValue().getRueckfrageHeadList(); } } - @DisplayName("Ger rueckfrage") + @DisplayName("Get rueckfrage") @Nested class TestGetRueckfrage { @@ -202,17 +220,19 @@ class AntragraumITCase { @BeforeEach void prepareDatabase() { - savedVorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(), Vorgang.COLLECTION_NAME); + savedVorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build(), + Vorgang.COLLECTION_NAME); vorgangAttachedItem = mongoOperations.save(createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()), VorgangAttachedItem.COLLECTION_NAME); when(verifier.verify(any())).thenReturn(Collections.emptyList()); - when(decrypter.decryptTrustLevel(any())).thenReturn("STORK-QAA-Level-1"); + when(decrypter.decryptTrustLevel(any())).thenReturn(ServiceKontoTestFactory.TRUST_LEVEL); } @Test void shouldReturnOnMatchingPostfachId() { - when(decrypter.decryptPostfachId(any())).thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); var request = GrpcGetRueckfrageRequestTestFactory.createBuilder() .setId(vorgangAttachedItem.getId()) .setSamlToken(TestUtils.loadTextFile("SamlResponse.xml")) @@ -239,11 +259,260 @@ class AntragraumITCase { } } + @Nested + class TestGetAttachmentMetadata { + + private static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml"); + + @Mock + private StreamObserver<GrpcGetAttachmentMetadataResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcGetAttachmentMetadataResponse> captor; + + private VorgangAttachedItem vorgangAttachedItem; + private VorgangAttachedItem vorgangAttachedItemDifferentAttachment; + private String fileId; + + @BeforeEach + void prepareDatabase() { + fileId = gridFsTemplate.store(GridFsTestFactory.createUpload()).toString(); + var savedVorgang = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME); + vorgangAttachedItem = mongoOperations.save( + createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId(), fileId), + VorgangAttachedItem.COLLECTION_NAME); + vorgangAttachedItemDifferentAttachment = mongoOperations.save( + createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()), + VorgangAttachedItem.COLLECTION_NAME); + } + + @Test + void shouldSendMetadata() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentMetadataRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + var expectedMetadata = GrpcFileMetadata.newBuilder() + .setContentType(OzgFileTestFactory.CONTENT_TYPE) + .setName(OzgFileTestFactory.NAME) + .setSize(OzgFileTestFactory.CONTENT.length) + .build(); + + grpcService.getAttachmentMetadata(request, responseObserver); + + verify(responseObserver, timeout(30000)).onNext(captor.capture()); + assertThat(captor.getValue().getFileMetadata()).isEqualTo(expectedMetadata); + } + + @Test + void shouldFailDueToInvalidToken() { + when(verifier.verify(any())).thenReturn(List.of(new Saml2Error("invalid_signature", "Signature missing"))); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentMetadataRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + + assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver)) + .isInstanceOf(SecurityException.class) + .hasMessageContaining("Signature missing") + .hasMessageContaining("invalid_signature"); + + } + + @Test + void shouldFailDueIncorrectPostfachId() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())).thenReturn("wrong ID"); + var request = GrpcGetAttachmentMetadataRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + + assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver)) + .isInstanceOf(NotFoundException.class) + .hasMessageContaining("PostfachNachricht") + .hasMessageContaining(vorgangAttachedItem.getId()); + } + + @Test + void shouldFailDueToTrustLevelTooLow() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_2.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentMetadataRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + + assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver)) + .isInstanceOf(NotFoundException.class) + .hasMessageContaining("PostfachNachricht") + .hasMessageContaining(vorgangAttachedItem.getId()); + } + + @Test + void shouldFailDueToFileIdNotInPostfachNachricht() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentMetadataRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItemDifferentAttachment.getId()) + .setFileId(fileId) + .build(); + + assertThatThrownBy(() -> grpcService.getAttachmentMetadata(request, responseObserver)) + .isInstanceOf(NotFoundException.class) + .hasMessageContaining("PostfachNachricht") + .hasMessageContaining(vorgangAttachedItemDifferentAttachment.getId()); + } + + } + + @Nested + class TestGetAttachmentContent { + + private static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml"); + + @Mock + private CallStreamObserver<GrpcGetAttachmentContentResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcGetAttachmentContentResponse> captor; + + private VorgangAttachedItem vorgangAttachedItem; + private VorgangAttachedItem vorgangAttachedItemDifferentAttachment; + private String fileId; + + @BeforeEach + void prepareDatabase() { + fileId = gridFsTemplate.store(GridFsTestFactory.createUpload()).toString(); + var savedVorgang = mongoOperations.save(createVorgang(TrustLevel.LEVEL_3), Vorgang.COLLECTION_NAME); + vorgangAttachedItem = mongoOperations.save( + createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId(), fileId), + VorgangAttachedItem.COLLECTION_NAME); + vorgangAttachedItemDifferentAttachment = mongoOperations.save( + createPostfachNachrichtVorgangAttachedItem(savedVorgang.getId()), + VorgangAttachedItem.COLLECTION_NAME); + } + + @BeforeEach + void mockObserver() { + when(responseObserver.isReady()).thenReturn(true); + doAnswer(invocation -> { + ((Runnable) invocation.getArgument(0)).run(); + return null; + }).when(responseObserver).setOnReadyHandler(any()); + } + + @Test + void shouldSendContent() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentContentRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + var expectedContent = ByteString.copyFrom(OzgFileTestFactory.CONTENT); + + grpcService.getAttachmentContent(request, responseObserver); + + verify(responseObserver, timeout(30000)).onNext(captor.capture()); + assertThat(captor.getValue().getFileContent()).isEqualTo(expectedContent); + } + + @Test + void shouldFailDueToInvalidToken() { + when(verifier.verify(any())).thenReturn(List.of(new Saml2Error("invalid_signature", "Signature missing"))); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentContentRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + + grpcService.getAttachmentContent(request, responseObserver); + + verify(responseObserver, never()).onNext(any()); + + } + + @Test + void shouldFailDueIncorrectPostfachId() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())).thenReturn("wrong ID"); + var request = GrpcGetAttachmentContentRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + + grpcService.getAttachmentContent(request, responseObserver); + + verify(responseObserver, never()).onNext(any()); + } + + @Test + void shouldFailDueToTrustLevelTooLow() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_2.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentContentRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItem.getId()) + .setFileId(fileId) + .build(); + + grpcService.getAttachmentContent(request, responseObserver); + + verify(responseObserver, never()).onNext(any()); + } + + @Test + void shouldFailDueToFileIdNotInPostfachNachricht() { + when(verifier.verify(any())).thenReturn(Collections.emptyList()); + when(decrypter.decryptTrustLevel(any())).thenReturn(TrustLevel.LEVEL_3.getValue()); + when(decrypter.decryptPostfachId(any())) + .thenReturn(PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE); + var request = GrpcGetAttachmentContentRequest.newBuilder() + .setSamlToken(SAML_TOKEN) + .setNachrichtId(vorgangAttachedItemDifferentAttachment.getId()) + .setFileId(fileId) + .build(); + + grpcService.getAttachmentContent(request, responseObserver); + + verify(responseObserver, never()).onNext(any()); + } + } + private Vorgang createVorgang(TrustLevel trustLevel) { return VorgangTestFactory.createBuilder() .id(null) .version(0) - .header(VorgangHeadTestFactory.createBuilder().serviceKonto(createBayernIdServiceKonto(trustLevel)).build()) + .header(VorgangHeadTestFactory.createBuilder().serviceKonto(createBayernIdServiceKonto(trustLevel)) + .build()) .build(); } @@ -251,15 +520,30 @@ class AntragraumITCase { return ServiceKontoTestFactory.createBuilder().type("BAYERN_ID").trustLevel(trustLevel.getValue()).build(); } + private VorgangAttachedItem createPostfachNachrichtVorgangAttachedItem(String vorgangId, String fileId) { + return createPostfachNachrichtVorgangAttachedItemBuilder(vorgangId) + .item(createBayernIdPostfachNachrichtItem(vorgangId, fileId)) + .build(); + } + private VorgangAttachedItem createPostfachNachrichtVorgangAttachedItem(String vorgangId) { + return createPostfachNachrichtVorgangAttachedItemBuilder(vorgangId).build(); + } + + private VorgangAttachedItemBuilder createPostfachNachrichtVorgangAttachedItemBuilder(String vorgangId) { return VorgangAttachedItemTestFactory.createBuilder() .id(null) .version(0) .vorgangId(vorgangId) .itemName("PostfachMail") .client("OzgCloud_NachrichtenManager") - .item(createBayernIdPostfachNachrichtItem(vorgangId)) - .build(); + .item(createBayernIdPostfachNachrichtItem(vorgangId)); + } + + private Map<String, Object> createBayernIdPostfachNachrichtItem(String vorgangId, String fileId) { + var nachrichtItem = createBayernIdPostfachNachrichtItem(vorgangId); + nachrichtItem.put("attachments", List.of(fileId)); + return nachrichtItem; } private Map<String, Object> createBayernIdPostfachNachrichtItem(String vorgangId) { @@ -271,7 +555,8 @@ class AntragraumITCase { PostfachAddress.TYPE_FIELD, 0, PostfachAddress.VERSION_FIELD, 1, PostfachAddress.IDENTIFIER_FIELD, - Map.of(PostfachAddress.FIELD_POSTFACH_ID, PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE), + Map.of(PostfachAddress.FIELD_POSTFACH_ID, + PostfachAddressTestFactory.STRING_BASED_IDENTIFIER_POSTFACH_ID_VALUE), PostfachAddress.SERVICEKONTO_TYPE_FIELD, "BAYERN_ID")); return nachrichtItem; }