Skip to content
Snippets Groups Projects
Commit f86178cd authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-6362-Antworten-aus-dem-MUK-einem-Vorgang-zuordnen'...

Merge pull request 'OZG-6362-Antworten-aus-dem-MUK-einem-Vorgang-zuordnen' (#23) from OZG-6362-Antworten-aus-dem-MUK-einem-Vorgang-zuordnen into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/nachrichten-manager/pulls/23


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents 15055bed 8af5fc18
No related branches found
No related tags found
No related merge requests found
/* /*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den * Copyright (c) 2024. Das Land Schleswig-Holstein
* Ministerpräsidenten des Landes Schleswig-Holstein * vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei * Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* *
* Lizenziert unter der EUPL, Version 1.2 oder - sobald * Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden - * diese von der Europäischen Kommission genehmigt wurden -
...@@ -31,9 +30,6 @@ import java.util.Set; ...@@ -31,9 +30,6 @@ import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Stream; import java.util.stream.Stream;
import jakarta.annotation.PostConstruct;
import jakarta.validation.Valid;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisher;
...@@ -47,6 +43,8 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; ...@@ -47,6 +43,8 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption; import de.ozgcloud.nachrichten.postfach.PostfachNachricht.ReplyOption;
import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException; import de.ozgcloud.nachrichten.postfach.osi.OsiPostfachServerProcessException;
import de.ozgcloud.vorgang.callcontext.CurrentUserService; import de.ozgcloud.vorgang.callcontext.CurrentUserService;
import jakarta.annotation.PostConstruct;
import jakarta.validation.Valid;
import lombok.NonNull; import lombok.NonNull;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -55,14 +53,13 @@ import lombok.extern.log4j.Log4j2; ...@@ -55,14 +53,13 @@ import lombok.extern.log4j.Log4j2;
@Validated @Validated
class PostfachService { class PostfachService {
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 Predicate<PostfachNachricht> IS_FROM_HUMAN_USER = nachricht -> !StringUtils.startsWith(nachricht.getCreatedBy(), "system");
private static final Set<String> POSTFACH_TYPES_WITH_ANTRAGSRAUM = Set.of("BayernId"); private static final Set<String> POSTFACH_TYPES_WITH_ANTRAGSRAUM = Set.of("BayernId");
@Autowired(required = false) @Autowired(required = false)
private PostfachRemoteService postfachRemoteService; private PostfachRemoteService postfachRemoteService;
static final Set<ReplyOption> REPLY_POSSIBLE_OPTION = EnumSet.of(ReplyOption.POSSIBLE, ReplyOption.MANDATORY);
@Autowired @Autowired
private PostfachNachrichtMapper mapper; private PostfachNachrichtMapper mapper;
...@@ -127,11 +124,20 @@ class PostfachService { ...@@ -127,11 +124,20 @@ class PostfachService {
} }
private void persistReceivedMail(PostfachNachricht nachricht) { private void persistReceivedMail(PostfachNachricht nachricht) {
if (IS_MUK_ANSWER.test(nachricht)) {
nachricht = linkToVorgang(nachricht);
}
persistMail(Optional.empty(), nachricht); persistMail(Optional.empty(), nachricht);
postfachRemoteService.deleteMessage(nachricht.getMessageId()); postfachRemoteService.deleteMessage(nachricht.getMessageId());
} }
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) { void persistMail(Optional<String> userId, PostfachNachricht mail) {
persistingService.persistNachricht(userId, mail); persistingService.persistNachricht(userId, mail);
...@@ -246,5 +252,4 @@ class PostfachService { ...@@ -246,5 +252,4 @@ class PostfachService {
} }
block.run(); block.run();
} }
} }
\ No newline at end of file
/* /*
* Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den * Copyright (c) 2024. Das Land Schleswig-Holstein
* Ministerpräsidenten des Landes Schleswig-Holstein * vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei * Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
* *
* Lizenziert unter der EUPL, Version 1.2 oder - sobald * Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden - * diese von der Europäischen Kommission genehmigt wurden -
...@@ -23,6 +22,7 @@ ...@@ -23,6 +22,7 @@
*/ */
package de.ozgcloud.nachrichten.postfach; package de.ozgcloud.nachrichten.postfach;
import static de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*; import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
...@@ -34,6 +34,7 @@ import java.util.UUID; ...@@ -34,6 +34,7 @@ import java.util.UUID;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
...@@ -65,24 +66,23 @@ import nl.altindag.log.LogCaptor; ...@@ -65,24 +66,23 @@ import nl.altindag.log.LogCaptor;
class PostfachServiceTest { class PostfachServiceTest {
static final String COMMAND_ID = UUID.randomUUID().toString();
static final String USER_ID = UUID.randomUUID().toString();
@Spy @Spy
@InjectMocks @InjectMocks
private PostfachService service; private PostfachService service;
@Mock @Mock
private PostfachRemoteService postfachRemoteService; private PostfachRemoteService postfachRemoteService;
@Mock @Mock
private PersistPostfachNachrichtService persistingService; private PersistPostfachNachrichtService persistingService;
@Spy @Spy
private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class); private PostfachNachrichtMapper mapper = Mappers.getMapper(PostfachNachrichtMapper.class);
@Mock @Mock
private ClientAttributeService clientAttributeService; private ClientAttributeService clientAttributeService;
@Mock @Mock
private MessageAttachmentService messageAttachmentService; private MessageAttachmentService messageAttachmentService;
@Mock @Mock
private ApplicationEventPublisher publisher; private ApplicationEventPublisher publisher;
@Mock @Mock
private CurrentUserService userService; private CurrentUserService userService;
@Spy @Spy
...@@ -90,9 +90,6 @@ class PostfachServiceTest { ...@@ -90,9 +90,6 @@ class PostfachServiceTest {
@Spy @Spy
private Optional<InfoManagerService> infomanagerService = Optional.of(mock(InfoManagerService.class)); private Optional<InfoManagerService> infomanagerService = Optional.of(mock(InfoManagerService.class));
static final String COMMAND_ID = UUID.randomUUID().toString();
static final String USER_ID = UUID.randomUUID().toString();
@Nested @Nested
class TestSaveDraft { class TestSaveDraft {
...@@ -313,6 +310,10 @@ class PostfachServiceTest { ...@@ -313,6 +310,10 @@ class PostfachServiceTest {
@Mock @Mock
private PostfachNachricht mail; private PostfachNachricht mail;
private Optional<PostfachNachricht> adjustMail() {
return service.adjustMail(mail);
}
@Nested @Nested
class TestReplaceBody { class TestReplaceBody {
...@@ -336,10 +337,6 @@ class PostfachServiceTest { ...@@ -336,10 +337,6 @@ class PostfachServiceTest {
assertThat(result).isPresent().get().extracting(PostfachNachricht::getMailBody).isEqualTo(expectedMailBody); assertThat(result).isPresent().get().extracting(PostfachNachricht::getMailBody).isEqualTo(expectedMailBody);
} }
} }
private Optional<PostfachNachricht> adjustMail() {
return service.adjustMail(mail);
}
} }
} }
...@@ -715,7 +712,7 @@ class PostfachServiceTest { ...@@ -715,7 +712,7 @@ class PostfachServiceTest {
@Nested @Nested
class TestGetPostfachs { class TestGetPostfachs {
private Postfach postfach = PostfachTestFactory.create(); private final Postfach postfach = PostfachTestFactory.create();
@Test @Test
void shouldCallBuildPostfach() { void shouldCallBuildPostfach() {
...@@ -798,4 +795,48 @@ class PostfachServiceTest { ...@@ -798,4 +795,48 @@ class PostfachServiceTest {
} }
} }
} }
@Nested
class TestSavingMukAnswer {
private final String refId = ObjectId.get().toHexString();
private PostfachNachricht answer = PostfachNachrichtTestFactory.createBuilder().vorgangId(null).referencedNachricht(refId).build();
@Test
void shouldIdentifyAsAnswer() {
var isMukAnswer = PostfachService.IS_MUK_ANSWER.test(answer);
assertThat(isMukAnswer).isTrue();
}
@Test
void shouldNotIdentifyAsAnswer() {
var isMukAnswer = PostfachService.IS_MUK_ANSWER.test(PostfachNachrichtTestFactory.create());
assertThat(isMukAnswer).isFalse();
}
@Nested
class TestLinkingMukAnswerToVorgang {
@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(persistingService).getById(any());
}
@Test
void shouldSetVorgangId() {
when(persistingService.getById(anyString())).thenReturn(PostfachNachrichtTestFactory.asMap());
var linkedNachricht = service.linkToVorgang(answer);
assertThat(linkedNachricht.getVorgangId()).isEqualTo(VORGANG_ID);
}
}
}
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment