diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java index f7c2600ff4cac30a5464e5db0967ae506d68f14e..6df32e72ef34ffea7b8eeedf601d29d1527cc7d9 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java @@ -30,9 +30,6 @@ import java.util.Set; import java.util.function.Predicate; import java.util.stream.Stream; -import jakarta.annotation.PostConstruct; -import jakarta.validation.Valid; - import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; @@ -46,6 +43,8 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException; import de.ozgcloud.vorgang.callcontext.CurrentUserService; +import jakarta.annotation.PostConstruct; +import jakarta.validation.Valid; import lombok.NonNull; import lombok.extern.log4j.Log4j2; @@ -54,8 +53,8 @@ import lombok.extern.log4j.Log4j2; @Validated class PostfachService { - static final Predicate<PostfachNachricht> IS_MUK_ANTWORT = nachricht -> StringUtils.isEmpty(nachricht.getVorgangId()) && StringUtils.isNotEmpty( - nachricht.getReferencedNachricht()); + static final Predicate<PostfachNachricht> IS_MUK_ANSWER = nachricht -> StringUtils.isEmpty(nachricht.getVorgangId()) && StringUtils.isNotEmpty( + nachricht.getReferencedNachricht()); static final Set<ReplyOption> REPLY_POSSIBLE_OPTION = EnumSet.of(ReplyOption.POSSIBLE, ReplyOption.MANDATORY); private static final Predicate<PostfachNachricht> IS_FROM_HUMAN_USER = nachricht -> !StringUtils.startsWith(nachricht.getCreatedBy(), "system"); private static final Set<String> POSTFACH_TYPES_WITH_ANTRAGSRAUM = Set.of("BayernId"); @@ -88,9 +87,9 @@ class PostfachService { public void saveDraft(String vorgangId, PostfachNachricht nachricht) { persistMail(userService.getUser().getUserId(), - nachricht.toBuilder().vorgangId(vorgangId) - .createdBy(userService.getUser().getUserId().orElse(null)) - .build()); + nachricht.toBuilder().vorgangId(vorgangId) + .createdBy(userService.getUser().getUserId().orElse(null)) + .build()); } public void sendMail(String commandId, String userId, @Valid PostfachNachricht mail) { @@ -100,15 +99,15 @@ class PostfachService { PostfachNachricht addMailSentInformation(PostfachNachricht mail, SendPostfachNachrichtResponse sendResponse) { return mail.toBuilder().sentAt(ZonedDateTime.now()).sentSuccessful(sendResponse.isSentSuccessful()) - .messageCode(sendResponse.getMessageCode().getMessageCode()) - .build(); + .messageCode(sendResponse.getMessageCode().getMessageCode()) + .build(); } void persistSentMail(@NonNull String userId, PostfachNachricht mail) { persistMail(Optional.of(userId), mail.toBuilder() - .direction(Direction.OUT) - .createdAt(ZonedDateTime.now().withNano(0)).createdBy(userId) - .build()); + .direction(Direction.OUT) + .createdAt(ZonedDateTime.now().withNano(0)).createdBy(userId) + .build()); } @@ -125,19 +124,18 @@ class PostfachService { } private void persistReceivedMail(PostfachNachricht nachricht) { - if (IS_MUK_ANTWORT.test(nachricht)) { - var persistedNachricht = getNachricht(nachricht.getReferencedNachricht()); - nachricht = nachricht.toBuilder().vorgangId(persistedNachricht.getVorgangId()).build(); + if (IS_MUK_ANSWER.test(nachricht)) { + nachricht = linkToVorgang(nachricht); } persistMail(Optional.empty(), nachricht); postfachRemoteService.deleteMessage(nachricht.getMessageId()); - } - PostfachNachricht getNachricht(String id) { - return mapper.fromMapToPostfachMail(persistingService.getById(id)); + PostfachNachricht linkToVorgang(PostfachNachricht nachricht) { + var persistedNachricht = mapper.fromMapToPostfachMail(persistingService.getById(nachricht.getReferencedNachricht())); + return nachricht.toBuilder().vorgangId(persistedNachricht.getVorgangId()).build(); } void persistMail(Optional<String> userId, PostfachNachricht mail) { @@ -220,8 +218,8 @@ class PostfachService { Map<String, Object> createResendPatchMap(SendPostfachNachrichtResponse sendResponse) { return Map.of(PostfachNachricht.FIELD_SENT_AT, ZonedDateTime.now().withNano(0).toString(), - PostfachNachricht.FIELD_SENT_SUCCESSFUL, sendResponse.isSentSuccessful(), - PostfachNachricht.FIELD_MESSAGE_CODE, sendResponse.getMessageCode().getMessageCode()); + PostfachNachricht.FIELD_SENT_SUCCESSFUL, sendResponse.isSentSuccessful(), + PostfachNachricht.FIELD_MESSAGE_CODE, sendResponse.getMessageCode().getMessageCode()); } private void patchMail(String postfachMailId, Map<String, Object> propertyMap) { diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java index e705bd9641d97c0303992be796df0cd9623a4901..bbd0a7960db399403af064c593b498dd42c0276c 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java @@ -22,6 +22,7 @@ */ package de.ozgcloud.nachrichten.postfach; +import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -155,7 +156,7 @@ class PostfachServiceTest { @Test void shouldAddMailSentInformation() { var postfachMail = service.addMailSentInformation(PostfachNachrichtTestFactory.createBuilder().sentAt(null).sentSuccessful(null).build(), - SendPostfachNachrichtResponseTestFactory.create()); + SendPostfachNachrichtResponseTestFactory.create()); assertThat(postfachMail.getSentAt()).isNotNull(); assertThat(postfachMail.getSentSuccessful()).isEqualTo(SendPostfachNachrichtResponseTestFactory.SENT_SUCCESSFUL); @@ -493,7 +494,7 @@ class PostfachServiceTest { assertThat(map).containsKey(PostfachNachricht.FIELD_SENT_AT); assertThat(ZonedDateTime.parse(map.get(PostfachNachricht.FIELD_SENT_AT).toString())).isCloseTo(ZonedDateTime.now(), - within(2, ChronoUnit.SECONDS)); + within(2, ChronoUnit.SECONDS)); } @Test @@ -508,7 +509,7 @@ class PostfachServiceTest { var map = service.createResendPatchMap(SendPostfachNachrichtResponseTestFactory.create()); assertThat(map).containsEntry(PostfachNachricht.FIELD_MESSAGE_CODE, - SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode()); + SendPostfachNachrichtResponseTestFactory.MESSAGE_CODE.getMessageCode()); } } @@ -594,7 +595,7 @@ class PostfachServiceTest { void mockService() { when(postfachRemoteService.getPostfachType()).thenReturn(PostfachTestFactory.POSTFACH_TYPE); doThrow(new PostfachException(MESSAGE, PostfachMessageCode.SEND_SUCCESSFUL_MESSAGE_CODE)).when(postfachRemoteService) - .sendMessage(any()); + .sendMessage(any()); } @Test @@ -796,41 +797,49 @@ class PostfachServiceTest { } @Nested - class TestSavingMukAntwort { + class TestSavingMukAnswer { private final String refId = ObjectId.get().toHexString(); - private PostfachNachricht antwort; - - @BeforeEach - void setup() { - antwort = PostfachNachrichtTestFactory.createBuilder().vorgangId(null).referencedNachricht(refId).build(); - } + private PostfachNachricht answer = PostfachNachrichtTestFactory.createBuilder().vorgangId(null).referencedNachricht(refId).build(); @Test - void shouldIdentifyAsAntwort() { - assertThat(PostfachService.IS_MUK_ANTWORT.test(antwort)).isTrue(); + void shouldIdentifyAsAnswer() { + var isMukAnswer = PostfachService.IS_MUK_ANSWER.test(answer); + + assertThat(isMukAnswer).isTrue(); } @Test - void shouldNotIdentifyAsAntwort() { - assertThat(PostfachService.IS_MUK_ANTWORT.test(PostfachNachrichtTestFactory.create())).isFalse(); + void shouldNotIdentifyAsAnswer() { + var isMukAnswer = PostfachService.IS_MUK_ANSWER.test(PostfachNachrichtTestFactory.create()); + + assertThat(isMukAnswer).isFalse(); } @Nested - class TestLinkingMukAntwortToVorgang { + class TestLinkingMukAnswerToVorgang { @BeforeEach void setup() { - antwort = PostfachNachrichtTestFactory.createBuilder().vorgangId(null).referencedNachricht(refId).build(); - when(service.isPostfachConfigured()).thenReturn(Boolean.TRUE); - when(postfachRemoteService.getAllMessages()).thenReturn(Stream.of(antwort)); + answer = PostfachNachrichtTestFactory.createBuilder().vorgangId(null).referencedNachricht(refId).build(); } @Test void shouldLoadPersistedNachricht() { + when(service.isPostfachConfigured()).thenReturn(Boolean.TRUE); + when(postfachRemoteService.getAllMessages()).thenReturn(Stream.of(answer)); when(persistingService.getById(anyString())).thenReturn(PostfachNachrichtTestFactory.asMap()); service.fetchAndPersistReplies(); - verify(service).getNachricht(anyString()); + verify(persistingService).getById(any()); + } + + @Test + void shouldSetVorgangId() { + when(persistingService.getById(anyString())).thenReturn(PostfachNachrichtTestFactory.asMap()); + + var linkedNachricht = service.linkToVorgang(answer); + + assertThat(linkedNachricht.getVorgangId()).isEqualTo(VORGANG_ID); } } } diff --git a/nachrichten-manager-server/src/test/resources/bayernid-test-enc.crt b/nachrichten-manager-server/src/test/resources/bayernid-test-enc.crt new file mode 100644 index 0000000000000000000000000000000000000000..fe04bc8d5ad148f0e84ca1c98160c111f3aeba5d --- /dev/null +++ b/nachrichten-manager-server/src/test/resources/bayernid-test-enc.crt @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDsTCCApmgAwIBAgIUdw/27be5+2vj+MhGtoJjDsMsdDEwDQYJKoZIhvcNAQEL +BQAwaDELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UEBwwITXVl +bmNoZW4xDzANBgNVBAoMBm1nbSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVz +ZUBtZ20tdHAuY29tMB4XDTI0MDExNjEyMjI0OVoXDTI1MDExNTEyMjI0OVowaDEL +MAkGA1UEBhMCREUxDzANBgNVBAgMBkJheWVybjERMA8GA1UEBwwITXVlbmNoZW4x +DzANBgNVBAoMBm1nbSB0cDEkMCIGCSqGSIb3DQEJARYVamVucy5yZWVzZUBtZ20t +dHAuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/HBBWBDSrEgd +wXkSy15V00EaVTyLgc4vh/JcDiGIYZSqmcMwBd+B1u36xbdBf/duEtCUymMNP48O +MjgFZtR6xn0meuR4NR6Ykn9mYGdU/GhldGuGv9XLAEAkVuTlo0H1QYyBS/6JwKQo +SsHDkJ3YwDwKcyOt7QtpSadRZjQEN3gDvWoRYjgXTxj2I1ovllmi0zOHsFi5PBIu +iPWUdJvBrHxpD/XVS9R/qzJpHPu3bjQ6UVRmhiZCUF7H5F/PQNwk+qXvjV0ooBeS +WWO5hywhk4OP4QEgbYMOSo20YukYX8TJEsum1pwIcQrw7kW4GyKaAycyRsa1fbM3 +tEkj+TiBKwIDAQABo1MwUTAdBgNVHQ4EFgQUfDL/6R33SJodsONCvxKy96AtU18w +HwYDVR0jBBgwFoAUfDL/6R33SJodsONCvxKy96AtU18wDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAQEA+PCnvSwKU+bArTCIg5lfrwONbzKkjvPUymDN +YX3oj1wVEN75hNf0RD7Rr0//ZYT3Rt0G193gjDcH1gbGIYhMLeGGkxEous2l3O+p +RIQRR+hprjr6HzF8IphaJy1RbDwyGsXyLcyOylPL4cX9IjUdhklHiLZusBq95LSy +w7hsCOAL2+vn816O7yv+28EWXXbnP2XEUjW36nxcZvR6oTJUplXyHRuuJJTsOxGR +NuXA3UVgNbkdm1HnoSGpnsGdUKsUFoEmEJkcSdQRwxeH21WzYGOZmKMcvx2gObaS +P8tafWh5z4Jx+Z7z5WP72Jt44/lnVjaV8aGo0KHXwgqQOtYftQ== +-----END CERTIFICATE----- diff --git a/nachrichten-manager-server/src/test/resources/bayernid-test-enc.key b/nachrichten-manager-server/src/test/resources/bayernid-test-enc.key new file mode 100644 index 0000000000000000000000000000000000000000..8d1c8b69c3fce7bea45c73efd06983e3c419a92f --- /dev/null +++ b/nachrichten-manager-server/src/test/resources/bayernid-test-enc.key @@ -0,0 +1 @@ +