diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java index 11ef0a2385acfb734221903f6b1c51770ba7d0cf..36634082bc191372c6ba846e3cf3b47f02154882 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java @@ -81,6 +81,7 @@ class BescheidEventListener { public static final Predicate<Command> IS_SEND_BESCHEID_COMMAND = command -> SEND_BESCHEID_ORDER.equals(command.getOrder()); private static final String IS_SEND_BESCHEID = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_SEND_BESCHEID_COMMAND.test(event.getSource())}"; + private static final String IS_SEND_BESCHEID_ORDER = "{T(de.ozgcloud.bescheid.BescheidEventListener).IS_SEND_BESCHEID_COMMAND.test(event.getCommand())}"; static final String VORGANG_ID_BODY_KEY = "vorgangId"; static final String BESCHEID_VOM_BODY_KEY = "bescheidVom"; @@ -191,7 +192,7 @@ class BescheidEventListener { return builder.build(); } - @EventListener(condition = IS_SEND_BESCHEID) + @EventListener(condition = IS_SEND_BESCHEID_ORDER) public void onBescheidSent(CommandExecutedEvent event) { runWithSecurityContext(event.getCommand(), this::setAntragBewilligung); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java index c7cf947305a114f2bec9c065a5d4b88212c48640..01523fc9b79f47b0fcf43987ff3771128570691d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -91,8 +91,7 @@ class BescheidService { public void sendBescheidManually(AttachedItem bescheidItem, Command parentCommand) { validateBescheidSendManually(bescheidItem, parentCommand.getRelationVersion()); var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId())); - var subCommands = buildSetBescheidSentSubCommands(bescheidItem, vorgang, getUserId()); - commandService.addSubCommands(buildCreateSubCommandsRequest(parentCommand.getId(), subCommands)); + addSubCommands(parentCommand.getId(), buildSetBescheidSentSubCommands(bescheidItem, vorgang, getUserId())); } void validateBescheidSendManually(AttachedItem bescheidItem, long version) { @@ -109,11 +108,7 @@ class BescheidService { var userId = getUserId(); var subCommands = buildSetBescheidSentSubCommands(bescheidItem, vorgang, userId); subCommands.add(buildSendPostfachNachrichtCommand(bescheidItem, vorgang.getServiceKonto(), userId)); - commandService.addSubCommands(buildCreateSubCommandsRequest(parentCommand.getId(), subCommands)); - } - - String getUserId() { - return userProfileService.getUserProfile().getId().toString(); + addSubCommands(parentCommand.getId(), subCommands); } public void validateBescheidSendPostfach(AttachedItem bescheidItem, long version) { @@ -122,10 +117,10 @@ class BescheidService { if (Bescheid.SendBy.NACHRICHT.notValue(sendBy)) { throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Expected is %s".formatted(sendBy, Bescheid.SendBy.NACHRICHT)); } - if (StringUtils.isBlank(getNachrichtSubject(bescheidItem))) { + if (getNachrichtSubject(bescheidItem).isEmpty()) { throw new TechnicalException("Bescheid has no nachricht subject"); } - if (StringUtils.isBlank(getNachrichtText(bescheidItem))) { + if (getNachrichtText(bescheidItem).isEmpty()) { throw new TechnicalException("Bescheid has no nachricht text"); } } @@ -143,32 +138,16 @@ class BescheidService { } } - FileId getBescheidFileId(AttachedItem bescheidItem) { - var bescheidDocument = attachedItemService.getItem(MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_BESCHEID_DOCUMENT)); - return FileId.from(MapUtils.getString(bescheidDocument.getItem(), Document.FIELD_DOCUMENT_FILE)); - } - - String getNachrichtSubject(AttachedItem bescheidItem) { - return MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_NACHRICHT_SUBJECT); - } - - String getNachrichtText(AttachedItem bescheidItem) { - return MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_NACHRICHT_TEXT); + Optional<String> getNachrichtSubject(AttachedItem bescheidItem) { + return Optional.ofNullable(MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_NACHRICHT_SUBJECT)).map(StringUtils::trimToNull); } - List<FileId> getAttachments(AttachedItem bescheidItem) { - var attachmentsObject = bescheidItem.getItem().get(Bescheid.FIELD_ATTACHMENTS); - if (attachmentsObject instanceof Collection<?> attachments) { - return attachments.stream().map(String::valueOf).map(FileId::from).toList(); - } - return getStringAsList(attachmentsObject); + Optional<String> getNachrichtText(AttachedItem bescheidItem) { + return Optional.ofNullable(MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_NACHRICHT_TEXT)).map(StringUtils::trimToNull); } - List<FileId> getStringAsList(Object attachmentsObject) { - if (attachmentsObject instanceof String attachment && StringUtils.isNotBlank(attachment)) { - return Collections.singletonList(FileId.from(attachment)); - } - return Collections.emptyList(); + String getUserId() { + return userProfileService.getUserProfile().getId().toString(); } List<OzgCloudCommand> buildSetBescheidSentSubCommands(AttachedItem bescheidItem, Vorgang vorgang, String userId) { @@ -222,13 +201,20 @@ class BescheidService { .build(); } - Map<String, Object> buildSendNachrichtCommandBody(AttachedItem bescheidItem, Map<String, Object> serviceKonto) { + Map<String, Object> buildPostfachAddress(Vorgang.PostfachAddress postfachAddress, String serviceKontoType) { + return Map.of(Vorgang.PostfachAddress.FIELD_TYPE, postfachAddress.getType(), + Vorgang.PostfachAddress.FIELD_VERSION, postfachAddress.getVersion(), + Vorgang.PostfachAddress.FIELD_IDENTIFIER, postfachAddress.getIdentifier(), + Vorgang.ServiceKonto.FIELD_SERVICEKONTO_TYPE, serviceKontoType); + } + + Map<String, Object> buildSendNachrichtCommandBody(AttachedItem bescheidItem, Map<String, Object> postfachAddress) { return Map.of( NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION, - NachrichtService.FIELD_SUBJECT, Optional.ofNullable(getNachrichtSubject(bescheidItem)).orElse(NachrichtService.SUBJECT), - NachrichtService.FIELD_MAIL_BODY, Optional.ofNullable(getNachrichtText(bescheidItem)).orElse(StringUtils.EMPTY), + NachrichtService.FIELD_SUBJECT, getNachrichtSubject(bescheidItem).orElse(NachrichtService.SUBJECT), + NachrichtService.FIELD_MAIL_BODY, getNachrichtText(bescheidItem).orElse(StringUtils.EMPTY), NachrichtService.FIELD_ATTACHMENTS, buildAttachments(bescheidItem), - Vorgang.ServiceKonto.FIELD_POSTFACH_ADDRESS, serviceKonto); + Vorgang.ServiceKonto.FIELD_POSTFACH_ADDRESS, postfachAddress); } @@ -236,11 +222,28 @@ class BescheidService { return Stream.concat(Stream.of(getBescheidFileId(bescheidItem)), getAttachments(bescheidItem).stream()).map(FileId::toString).toList(); } - Map<String, Object> buildPostfachAddress(Vorgang.PostfachAddress postfachAddress, String serviceKontoType) { - return Map.of(Vorgang.PostfachAddress.FIELD_TYPE, postfachAddress.getType(), - Vorgang.PostfachAddress.FIELD_VERSION, postfachAddress.getVersion(), - Vorgang.PostfachAddress.FIELD_IDENTIFIER, postfachAddress.getIdentifier(), - Vorgang.ServiceKonto.FIELD_SERVICEKONTO_TYPE, serviceKontoType); + FileId getBescheidFileId(AttachedItem bescheidItem) { + var bescheidDocument = attachedItemService.getItem(MapUtils.getString(bescheidItem.getItem(), Bescheid.FIELD_BESCHEID_DOCUMENT)); + return FileId.from(MapUtils.getString(bescheidDocument.getItem(), Document.FIELD_DOCUMENT_FILE)); + } + + List<FileId> getAttachments(AttachedItem bescheidItem) { + var attachmentsObject = bescheidItem.getItem().get(Bescheid.FIELD_ATTACHMENTS); + if (attachmentsObject instanceof Collection<?> attachments) { + return attachments.stream().map(String::valueOf).map(FileId::from).toList(); + } + return getStringAsList(attachmentsObject); + } + + List<FileId> getStringAsList(Object attachmentsObject) { + if (attachmentsObject instanceof String attachment && StringUtils.isNotBlank(attachment)) { + return Collections.singletonList(FileId.from(attachment)); + } + return Collections.emptyList(); + } + + void addSubCommands(String parentCommandId, List<OzgCloudCommand> subCommands) { + commandService.addSubCommands(buildCreateSubCommandsRequest(parentCommandId, subCommands)); } OzgCloudCreateSubCommandsRequest buildCreateSubCommandsRequest(String parentCommandId, List<OzgCloudCommand> subCommands) { diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index a04140c8749ecf574e63e3b8c5cae6178debfbac..24a67a215b953478b6bf2518432c37469eb94e42 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -35,7 +35,6 @@ import java.util.stream.Collectors; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -45,16 +44,17 @@ import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.BescheidManagerConfiguration; -import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; import de.ozgcloud.bescheid.common.freemarker.TemplateHandler; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.document.Document; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Log4j2 @Service +@RequiredArgsConstructor public class AttachedItemService { public static final String BESCHEID_ITEM_NAME = "Bescheid"; @@ -67,16 +67,10 @@ public class AttachedItemService { static final String DEFAULT_TEMPLATE_FILE = "bescheid.nachrichtTemplate.txt.ftlh"; @Qualifier(BescheidManagerConfiguration.COMMAND_SERVICE_NAME) - @Autowired - private OzgCloudCommandService commandService; - @Autowired - private VorgangAttachedItemRemoteService remoteService; - @Autowired - private CommandMapper commandMapper; - @Autowired - private CurrentUserService currentUserService; - @Autowired - private TemplateHandler templateHandler; + private final OzgCloudCommandService commandService; + private final VorgangAttachedItemRemoteService remoteService; + private final CommandMapper commandMapper; + private final TemplateHandler templateHandler; public Optional<AttachedItem> findBescheidItem(String vorgangId) { return remoteService.findBescheidDraft(vorgangId); diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java index 127daad5721a5542074e8e4b2488256f005a3634..98689c96ea25c66ffcfbe9cab54556b148b7fc65 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java @@ -1,23 +1,15 @@ package de.ozgcloud.bescheid.vorgang; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; -import de.ozgcloud.apilib.common.command.OzgCloudCommandService; -import de.ozgcloud.apilib.common.command.grpc.CommandMapper; import lombok.NonNull; +import lombok.RequiredArgsConstructor; @Service("bescheid_VorgangService") +@RequiredArgsConstructor public class VorgangService { - @Autowired - private VorgangRemoteService remoteService; - @Autowired - @Qualifier("bescheid_OzgCloudCommandService") - private OzgCloudCommandService commandService; - @Autowired - private CommandMapper commandMapper; + private final VorgangRemoteService remoteService; public Vorgang getById(@NonNull VorgangId id) { return remoteService.getById(id); diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java index 6697f5fe8687a7524464e3a2fb01b1f86ff4cd62..35dfda817f0d99f53b690476edde6528ce1f7035 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -5,11 +5,16 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; +import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -26,13 +31,22 @@ import org.mockito.Spy; import org.springframework.boot.info.BuildProperties; import org.springframework.test.util.ReflectionTestUtils; +import de.ozgcloud.apilib.common.command.OzgCloudCommand; +import de.ozgcloud.apilib.common.command.OzgCloudCommandService; +import de.ozgcloud.apilib.common.command.OzgCloudCreateSubCommandsRequest; +import de.ozgcloud.apilib.common.command.grpc.CommandMapper; +import de.ozgcloud.apilib.common.datatypes.GenericId; +import de.ozgcloud.apilib.user.OzgCloudUserId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; import de.ozgcloud.bescheid.attributes.ClientAttributeService; import de.ozgcloud.bescheid.common.user.UserProfile; import de.ozgcloud.bescheid.common.user.UserProfileService; +import de.ozgcloud.bescheid.common.user.UserProfileTestFactory; import de.ozgcloud.bescheid.nachricht.NachrichtService; +import de.ozgcloud.bescheid.vorgang.PostfachAddressTestFactory; import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory; import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; @@ -40,11 +54,14 @@ import de.ozgcloud.bescheid.vorgang.VorgangService; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.common.binaryfile.FileId; +import de.ozgcloud.common.datatype.StringBasedValue; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.document.DocumentTestFactory; class BescheidServiceTest { + private static final String USER_ID = "user-id"; + @Spy @InjectMocks private BescheidService service; @@ -52,19 +69,19 @@ class BescheidServiceTest { @Mock private VorgangService vorgangService; @Mock - private BescheidRemoteService remoteService; - @Mock private AttachedItemService attachedItemService; @Mock - private NachrichtService nachrichtService; - @Mock private UserProfileService userProfileService; @Mock - private UserProfile callContextUser; + private OzgCloudCommandService commandService; + @Mock + private CommandMapper commandMapper; @Mock private ClientAttributeService clientAttributeService; @Mock private BuildProperties buildProperties; + @Mock + private BescheidRemoteService remoteService; @BeforeEach void init() { @@ -110,11 +127,24 @@ class BescheidServiceTest { @Nested class TestSendBescheidManually { + private static final Vorgang VORGANG = VorgangTestFactory.create(); + + @Mock + private OzgCloudCommand subCommand; + + @Captor + private ArgumentCaptor<VorgangId> vorgangIdCaptor; + @Captor + private ArgumentCaptor<List<OzgCloudCommand>> subCommandsCaptor; + private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); @BeforeEach void init() { doNothing().when(service).validateBescheidSendManually(any(), anyLong()); + doNothing().when(service).addSubCommands(any(), any()); + doReturn(USER_ID).when(service).getUserId(); + when(vorgangService.getById(any())).thenReturn(VORGANG); } @Test @@ -125,14 +155,40 @@ class BescheidServiceTest { } @Test - void shouldCallSendBescheid() { + void shouldCallGetVorgang() { sendBescheid(); - verify(service).setBescheidSent(bescheidItem); + verify(vorgangService).getById(vorgangIdCaptor.capture()); + assertThat(vorgangIdCaptor.getValue()).hasToString(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldCallGetUserId() { + sendBescheid(); + + verify(service).getUserId(); + } + + @Test + void shouldCallBuildSetBescheidSentSubCommands() { + sendBescheid(); + + verify(service).buildSetBescheidSentSubCommands(bescheidItem, VORGANG, USER_ID); + } + + @Test + void shouldCallAddSubCommands() { + doReturn(List.of(subCommand)).when(service).buildSetBescheidSentSubCommands(any(), any(), any()); + + sendBescheid(); + + verify(service).addSubCommands(eq(CommandTestFactory.ID), subCommandsCaptor.capture()); + assertThat(subCommandsCaptor.getValue()).containsExactly(subCommand); } private void sendBescheid() { - service.sendBescheidManually(bescheidItem, AttachedItemTestFactory.VERSION); + var parentCommand = CommandTestFactory.createBuilder().relationVersion(AttachedItemTestFactory.VERSION).build(); + service.sendBescheidManually(bescheidItem, parentCommand); } } @@ -171,38 +227,41 @@ class BescheidServiceTest { @Nested class TestSendBescheidPostfachMail { - private AttachedItem bescheidItem; + private static final Vorgang.ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create(); + private static final Vorgang VORGANG = VorgangTestFactory.createBuilder().serviceKonto(SERVICE_KONTO).build(); + + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + @Mock - private AttachedItem bescheidSendItem; + private OzgCloudCommand setBescheidSentSubCommand; + @Mock + private OzgCloudCommand sendPostfachNachrichtSubCommand; @Captor private ArgumentCaptor<VorgangId> vorgangIdCaptor; + @Captor + private ArgumentCaptor<List<OzgCloudCommand>> subCommandsCaptor; @BeforeEach void init() { - var item = AttachedItemTestFactory.createBescheidItem(); - item.put(Bescheid.FIELD_SEND_BY, Bescheid.SendBy.NACHRICHT.name()); - bescheidItem = AttachedItemTestFactory.createBescheidBuilder().item(item).build(); - doNothing().when(service).validateBescheidSendPostfach(any(), anyLong()); - lenient().when(callContextUser.getId()).thenReturn(UserId.from("user-id")); - lenient().when(userProfileService.getUserProfile()).thenReturn(callContextUser); + doNothing().when(service).addSubCommands(any(), any()); + doReturn(USER_ID).when(service).getUserId(); + var subCommands = new ArrayList<OzgCloudCommand>(); + subCommands.add(setBescheidSentSubCommand); + doReturn(subCommands).when(service).buildSetBescheidSentSubCommands(any(), any(), any()); + doReturn(sendPostfachNachrichtSubCommand).when(service).buildSendPostfachNachrichtCommand(any(), any(), any()); + when(vorgangService.getById(any())).thenReturn(VORGANG); } @Test void shouldCallValidateBescheid() { - doReturn(BescheidTestFactory.create()).when(service).buildBescheid(any(), any()); - when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); - sendBescheid(); - verify(service).validateBescheidSendPostfach(bescheidItem, AttachedItemTestFactory.VERSION); + verify(service).validateBescheidSendPostfach(BESCHEID_ITEM, AttachedItemTestFactory.VERSION); } @Test void shouldCallVorgangService() { - doReturn(BescheidTestFactory.create()).when(service).buildBescheid(any(), any()); - when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); - sendBescheid(); verify(vorgangService).getById(vorgangIdCaptor.capture()); @@ -210,40 +269,37 @@ class BescheidServiceTest { } @Test - void shouldCallBuildBescheid() { - doReturn(BescheidTestFactory.create()).when(service).buildBescheid(any(), any()); - var serviceKonto = ServiceKontoTestFactory.create(); - var vorgang = VorgangTestFactory.createBuilder().serviceKonto(serviceKonto).build(); - doReturn(vorgang).when(vorgangService).getById(any()); - + void shouldCallGetUserId() { sendBescheid(); - verify(service).buildBescheid(bescheidItem, serviceKonto); + verify(service).getUserId(); } @Test - void shouldCallNachrichtService() { - var bescheid = BescheidTestFactory.create(); - doReturn(bescheid).when(service).buildBescheid(any(), any()); - when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); - + void shouldCallBuildSetBescheidSentSubCommands() { sendBescheid(); - verify(nachrichtService).sendNachricht(bescheid); + verify(service).buildSetBescheidSentSubCommands(BESCHEID_ITEM, VORGANG, USER_ID); } @Test - void shouldCallSendBescheid() { - doReturn(BescheidTestFactory.create()).when(service).buildBescheid(any(), any()); - when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); + void shouldCallBuildSendPostfachNachrichtCommand() { + sendBescheid(); + + verify(service).buildSendPostfachNachrichtCommand(BESCHEID_ITEM, SERVICE_KONTO, USER_ID); + } + @Test + void shouldCallAddSubCommands() { sendBescheid(); - verify(service).setBescheidSent(bescheidItem); + verify(service).addSubCommands(eq(CommandTestFactory.ID), subCommandsCaptor.capture()); + assertThat(subCommandsCaptor.getValue()).containsExactly(setBescheidSentSubCommand, sendPostfachNachrichtSubCommand); } private void sendBescheid() { - service.sendBescheidPostfachMail(bescheidItem, AttachedItemTestFactory.VERSION); + var parentCommand = CommandTestFactory.createBuilder().relationVersion(AttachedItemTestFactory.VERSION).build(); + service.sendBescheidPostfachMail(BESCHEID_ITEM, parentCommand); } } @@ -352,114 +408,6 @@ class BescheidServiceTest { } } - @Nested - class TestBuildBescheid { - - private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); - private static final Vorgang.ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create(); - private static final String CREATED_BY = "user-id"; - - @BeforeEach - void init() { - when(callContextUser.getId()).thenReturn(UserId.from(CREATED_BY)); - when(userProfileService.getUserProfile()).thenReturn(callContextUser); - doReturn(FileId.from(DocumentTestFactory.DOCUMENT_FILE)).when(service).getBescheidFileId(any()); - } - - @Test - void shouldSetVorgangId() { - var result = buildBescheid(); - - assertThat(result.getVorgangId()).hasToString(CommandTestFactory.VORGANG_ID); - } - - @Test - void shouldCallGetBewilligt() { - buildBescheid(); - - verify(service).getBewilligt(BESCHEID_ITEM); - } - - @Test - void shouldSetGenehmigt() { - doReturn(true).when(service).getBewilligt(any()); - - var result = buildBescheid(); - - assertThat(result.isGenehmigt()).isTrue(); - } - - @Test - void shouldCallGetAttachments() { - buildBescheid(); - - verify(service).getAttachments(BESCHEID_ITEM); - } - - @Test - void shouldSetAttachments() { - var expectedAttachments = List.of(FileId.from(AttachedItemTestFactory.ATTACHMENT)); - doReturn(expectedAttachments).when(service).getAttachments(any()); - - var result = buildBescheid(); - - assertThat(result.getAttachments()).containsExactlyElementsOf(expectedAttachments); - } - - @Test - void shouldCallGetBescheidFileId() { - buildBescheid(); - - verify(service).getBescheidFileId(BESCHEID_ITEM); - } - - @Test - void shouldSetBescheidFileId() { - var result = buildBescheid(); - - assertThat(result.getBescheidFileId()).hasToString(DocumentTestFactory.DOCUMENT_FILE); - } - - @Test - void shouldSetNachrichtSubject() { - var result = buildBescheid(); - - assertThat(result.getNachrichtSubject()).contains(AttachedItemTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldSetNachrichtText() { - var result = buildBescheid(); - - assertThat(result.getNachrichtText()).contains(AttachedItemTestFactory.NACHRICHT_TEXT); - } - - @Test - void shouldCallCurrentUserService() { - buildBescheid(); - - verify(userProfileService).getUserProfile(); - } - - @Test - void shouldSetCreatedBy() { - var result = buildBescheid(); - - assertThat(result.getCreatedBy()).hasToString(CREATED_BY); - } - - @Test - void shouldSetServiceKonto() { - var result = buildBescheid(); - - assertThat(result.getServiceKonto()).usingRecursiveComparison().isEqualTo(SERVICE_KONTO); - } - - private Bescheid buildBescheid() { - return service.buildBescheid(BESCHEID_ITEM, SERVICE_KONTO); - } - } - @Nested class TestGetAttachments { @@ -540,6 +488,33 @@ class BescheidServiceTest { } } + @Nested + class TestAddSubCommands { + + @Mock + private OzgCloudCommand subCommand; + @Mock + private OzgCloudCreateSubCommandsRequest createSubCommandsRequest; + + @Test + void shouldCallBuildCreateSubCommandsRequest() { + var subCommands = List.of(subCommand); + + service.addSubCommands(CommandTestFactory.ID, subCommands); + + verify(service).buildCreateSubCommandsRequest(CommandTestFactory.ID, subCommands); + } + + @Test + void shouldCallCommandService() { + doReturn(createSubCommandsRequest).when(service).buildCreateSubCommandsRequest(any(), any()); + + service.addSubCommands(CommandTestFactory.ID, List.of(subCommand)); + + verify(commandService).addSubCommands(createSubCommandsRequest); + } + } + @Nested class TestGetBescheidFileId { @@ -573,7 +548,7 @@ class BescheidServiceTest { var result = service.getNachrichtSubject(bescheidItem); - assertThat(result).isEqualTo(AttachedItemTestFactory.NACHRICHT_SUBJECT); + assertThat(result).contains(AttachedItemTestFactory.NACHRICHT_SUBJECT); } } @@ -587,49 +562,536 @@ class BescheidServiceTest { var result = service.getNachrichtText(bescheidItem); - assertThat(result).isEqualTo(AttachedItemTestFactory.NACHRICHT_TEXT); + assertThat(result).contains(AttachedItemTestFactory.NACHRICHT_TEXT); } } @Nested - class TestSendBescheid { + class TestGetUserId { - private final AttachedItem bescheidItem = AttachedItemTestFactory.createBescheid(); @Mock - private AttachedItem bescheidSendItem; + private UserProfile userProfile; + + @BeforeEach + void init() { + when(userProfileService.getUserProfile()).thenReturn(userProfile); + when(userProfile.getId()).thenReturn(UserProfileTestFactory.ID); + + } @Test - void shouldCallSetBescheidStatusSent() { - sendBescheid(); + void shouldCallGetUserProfile() { + service.getUserId(); - verify(attachedItemService).setBescheidSentStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); + verify(userProfileService).getUserProfile(); } @Test - void shouldCallBescheiden() { - sendBescheid(); + void shouldReturnUserId() { + var result = service.getUserId(); + + assertThat(result).isEqualTo(UserProfileTestFactory.ID.toString()); + } + } + + @Nested + class TestBuildSetBescheidSentCommands { + + @Mock + private AttachedItem bescheidItem; + @Mock + private Vorgang vorgang; + @Mock + private OzgCloudCommand vorgangBescheidenCommand; + @Mock + private OzgCloudCommand setBescheidSentStatusCommand; - verify(vorgangService).bescheiden(CommandTestFactory.VORGANG_ID); + @BeforeEach + void inti() { + doReturn(vorgangBescheidenCommand).when(service).buildVorgangBescheidenCommand(any()); + doReturn(setBescheidSentStatusCommand).when(service).buildSetBescheidSentStatusCommand(any(), any()); } @Test - void shouldCallRevertBescheidStatusSent() { - doThrow(new TechnicalException("error")).when(vorgangService).bescheiden(anyString()); + void shouldCallBuildVorgangBescheidenCommand() { + buildSetBescheidSentCommands(); + + verify(service).buildVorgangBescheidenCommand(vorgang); + } - assertThrows(TechnicalException.class, this::sendBescheid); + @Test + void shouldCallBuildSetBescheidSentStatusCommand() { + buildSetBescheidSentCommands(); - verify(attachedItemService).revertBescheidSendStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); + verify(service).buildSetBescheidSentStatusCommand(bescheidItem, USER_ID); } @Test - void shouldCallSetAntragResult() { - sendBescheid(); + void shouldReturnResult() { + var result = buildSetBescheidSentCommands(); - verify(service).setAntragBewilligung(bescheidItem); + assertThat(result).containsExactly(vorgangBescheidenCommand, setBescheidSentStatusCommand); } - private void sendBescheid() { - service.setBescheidSent(bescheidItem); + private List<OzgCloudCommand> buildSetBescheidSentCommands() { + return service.buildSetBescheidSentSubCommands(bescheidItem, vorgang, USER_ID); + } + } + + @Nested + class TestBuildVorgangBescheidenCommand { + + private static final OzgCloudVorgangId VORGANG_ID = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); + private static final StringBasedValue RELATION_ID = GenericId.from(VorgangTestFactory.ID.toString()); + + @BeforeEach + void init() { + when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(VORGANG_ID); + when(commandMapper.mapRelationId(anyString())).thenReturn(RELATION_ID); + } + + @Test + void shouldCallMapVorgangId() { + buildVorgangBescheidenCommand(); + + verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldSetVorgangId() { + var result = buildVorgangBescheidenCommand(); + + assertThat(result.getVorgangId()).isEqualTo(VORGANG_ID); + } + + @Test + void shouldCallMapRelationId() { + buildVorgangBescheidenCommand(); + + verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldSetRelationId() { + var result = buildVorgangBescheidenCommand(); + + assertThat(result.getRelationId()).isEqualTo(RELATION_ID); + } + + @Test + void shouldSetRelationVersion() { + var result = buildVorgangBescheidenCommand(); + + assertThat(result.getRelationVersion()).isEqualTo(VorgangTestFactory.VERSION); + } + + @Test + void shouldSetOrder() { + var result = buildVorgangBescheidenCommand(); + + assertThat(result.getOrder()).isEqualTo(BescheidService.VORGANG_BESCHEIDEN_ORDER); + } + + private OzgCloudCommand buildVorgangBescheidenCommand() { + return service.buildVorgangBescheidenCommand(VorgangTestFactory.create()); + } + } + + @Nested + class TestBuildSetBescheidSentStatusCommand { + + private static final StringBasedValue RELATION_ID = GenericId.from(VorgangTestFactory.ID.toString()); + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + + @BeforeEach + void init() { + when(commandMapper.mapRelationId(any())).thenReturn(RELATION_ID); + } + + @Test + void shouldCallMapRelationId() { + buildSetBescheidSentStatusCommand(); + + verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); + } + + @Test + void shouldSetRelationId() { + var result = buildSetBescheidSentStatusCommand(); + + assertThat(result.getRelationId()).isEqualTo(RELATION_ID); + } + + @Test + void shouldSetRelationVersion() { + var result = buildSetBescheidSentStatusCommand(); + + assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); + } + + @Test + void shouldSetOrder() { + var result = buildSetBescheidSentStatusCommand(); + + assertThat(result.getOrder()).isEqualTo(AttachedItemService.PATCH_ATTACHED_ITEM); + } + + @Test + void shouldSetPropertyId() { + var result = buildSetBescheidSentStatusCommand(); + + assertThat(result.getBodyObject()).containsEntry(AttachedItem.PROPERTY_ID, AttachedItemTestFactory.ID); + } + + @Test + void shouldCallBuildBescheidSentStatusItem() { + buildSetBescheidSentStatusCommand(); + + verify(service).buildBescheidSentStatusItem(USER_ID); + } + + @Test + void shouldSetPropertyItem() { + var itemMap = Map.of("key", "value"); + doReturn(itemMap).when(service).buildBescheidSentStatusItem(any()); + + var result = buildSetBescheidSentStatusCommand(); + + assertThat(result.getBodyObject()).containsEntry(AttachedItem.PROPERTY_ITEM, itemMap); + } + + private OzgCloudCommand buildSetBescheidSentStatusCommand() { + return service.buildSetBescheidSentStatusCommand(BESCHEID_ITEM, USER_ID); + } + } + + @Nested + class TestBuildBescheidSentStatusItem { + + @Test + void shouldSetStatus() { + var result = service.buildBescheidSentStatusItem(USER_ID); + + assertThat(result).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); + } + + @Test + void shouldCallBuildSentInfoMap() { + service.buildBescheidSentStatusItem(USER_ID); + + verify(service).buildSentInfoMap(USER_ID); + } + + @Test + void shouldSetSentInfo() { + var sentInfoMap = Map.of("key", "value"); + doReturn(sentInfoMap).when(service).buildSentInfoMap(any()); + + var result = service.buildBescheidSentStatusItem(USER_ID); + + assertThat(result).containsEntry(Bescheid.FIELD_SENT_INFO, sentInfoMap); + } + } + + @Nested + class TestBuildSentInfoMap { + + @Test + void shouldSetSentAt() { + var result = service.buildSentInfoMap(USER_ID); + + assertThat(getSentAt(result)).isCloseTo(ZonedDateTime.now(), within(1, ChronoUnit.SECONDS)); + } + + @Test + void shouldSetSentBy() { + var result = service.buildSentInfoMap(USER_ID); + + assertThat(result).containsEntry(Bescheid.FIELD_SENT_BY, USER_ID); + } + + private ZonedDateTime getSentAt(Map<String, Object> sentInfoMap) { + return ZonedDateTime.parse((String) sentInfoMap.get(Bescheid.FIELD_SENT_AT), DateTimeFormatter.ISO_DATE_TIME); + } + } + + @Nested + class TestBuildSendPostfachNachrichtCommand { + + private static final AttachedItem BESCHEID_ITEM = AttachedItemTestFactory.createBescheid(); + private static final Vorgang.PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create(); + private static final OzgCloudUserId OZG_CLOUD_USER_ID = OzgCloudUserId.from(USER_ID); + private static final Map<String, Object> OBJECT_MAP = Map.of("key", "value"); + private static final OzgCloudVorgangId VORGANG_ID = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); + private static final StringBasedValue RELATION_ID = GenericId.from(VorgangTestFactory.ID.toString()); + + @BeforeEach + void init() { + when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(VORGANG_ID); + when(commandMapper.mapRelationId(anyString())).thenReturn(RELATION_ID); + when(commandMapper.toOzgCloudUserId(anyString())).thenReturn(OZG_CLOUD_USER_ID); + doReturn(OBJECT_MAP).when(service).buildSendNachrichtCommandBody(any(), any()); + } + + @Test + void shouldCallBuildPostfachAddress() { + buildSendPostfachNachrichtCommand(); + + verify(service).buildPostfachAddress(POSTFACH_ADDRESS, ServiceKontoTestFactory.TYPE); + } + + @Test + void shouldCallBuildSenNachrichtCommandBody() { + var postfachAddressMap = Map.<String, Object>of("key", "value"); + doReturn(postfachAddressMap).when(service).buildPostfachAddress(any(), any()); + + buildSendPostfachNachrichtCommand(); + + verify(service).buildSendNachrichtCommandBody(BESCHEID_ITEM, postfachAddressMap); + } + + @Test + void shouldSetBodyObject() { + var result = buildSendPostfachNachrichtCommand(); + + assertThat(result.getBodyObject()).isSameAs(OBJECT_MAP); + } + + @Test + void shouldCallMapVorgangId() { + buildSendPostfachNachrichtCommand(); + + verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldSetVorgangId() { + var result = buildSendPostfachNachrichtCommand(); + + assertThat(result.getVorgangId()).isEqualTo(VORGANG_ID); + } + + @Test + void shouldCallMapRelationId() { + buildSendPostfachNachrichtCommand(); + + verify(commandMapper).mapRelationId(CommandTestFactory.VORGANG_ID); + } + + @Test + void shouldSetRelationId() { + var result = buildSendPostfachNachrichtCommand(); + + assertThat(result.getRelationId()).isEqualTo(RELATION_ID); + } + + @Test + void shouldSetOrder() { + var result = buildSendPostfachNachrichtCommand(); + + assertThat(result.getOrder()).isEqualTo(BescheidService.SEND_POSTFACH_NACHRICHT_ORDER); + } + + @Test + void shouldCallMapToOzgCloudUserId() { + buildSendPostfachNachrichtCommand(); + + verify(commandMapper).toOzgCloudUserId(USER_ID); + } + + @Test + void shouldSetCreatedBy() { + var result = buildSendPostfachNachrichtCommand(); + + assertThat(result.getCreatedBy()).isEqualTo(OZG_CLOUD_USER_ID); + } + + private OzgCloudCommand buildSendPostfachNachrichtCommand() { + var serviceKonto = ServiceKontoTestFactory.createBuilder().clearPostfachAddresses().postfachAddress(POSTFACH_ADDRESS).build(); + return service.buildSendPostfachNachrichtCommand(BESCHEID_ITEM, serviceKonto, USER_ID); + } + } + + @Nested + class TestBuildPostfachAddress { + + @Test + void shouldSetType() { + var result = buildPostfachAddress(); + + assertThat(result).containsEntry(Vorgang.PostfachAddress.FIELD_TYPE, PostfachAddressTestFactory.TYPE); + } + + @Test + void shouldSetVersion() { + var result = buildPostfachAddress(); + + assertThat(result).containsEntry(Vorgang.PostfachAddress.FIELD_VERSION, PostfachAddressTestFactory.VERSION); + } + + @Test + void shouldSetIdentifier() { + var result = buildPostfachAddress(); + + assertThat(result).extracting(Vorgang.PostfachAddress.FIELD_IDENTIFIER, MAP) + .containsEntry(NachrichtService.FIELD_POSTFACH_ID, PostfachAddressTestFactory.POSTFACH_ID); + } + + @Test + void shouldSetServicekontoType() { + var result = buildPostfachAddress(); + + assertThat(result).containsEntry(Vorgang.ServiceKonto.FIELD_SERVICEKONTO_TYPE, ServiceKontoTestFactory.TYPE); + } + + private Map<String, Object> buildPostfachAddress() { + return service.buildPostfachAddress(PostfachAddressTestFactory.create(), ServiceKontoTestFactory.TYPE); + } + } + + @Nested + class TestBuildSendNachrichtCommandBody { + + private static final Map<String, Object> SERVICE_KONTO_MAP = Map.of("key", "value"); + + @Mock + private AttachedItem bescheidItem; + + private Map<String, Object> buildSendNachrichtCommandBody() { + return service.buildSendNachrichtCommandBody(bescheidItem, SERVICE_KONTO_MAP); + } + + @Nested + class TestWithValuesFromBescheidItem { + + @BeforeEach + void init() { + doReturn(Optional.of(AttachedItemTestFactory.NACHRICHT_SUBJECT)).when(service).getNachrichtSubject(any()); + doReturn(Optional.of(AttachedItemTestFactory.NACHRICHT_TEXT)).when(service).getNachrichtText(any()); + doReturn(List.of(AttachedItemTestFactory.ATTACHMENT)).when(service).buildAttachments(any()); + } + + @Test + void shouldSetReplyOption() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).containsEntry(NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION); + } + + @Test + void shouldCallGetNachrichtSubject() { + buildSendNachrichtCommandBody(); + + verify(service).getNachrichtSubject(bescheidItem); + } + + @Test + void shouldSetSubject() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, AttachedItemTestFactory.NACHRICHT_SUBJECT); + } + + @Test + void shouldCallGetNachrichtText() { + buildSendNachrichtCommandBody(); + + verify(service).getNachrichtText(bescheidItem); + } + + @Test + void shouldSetMailBody() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, AttachedItemTestFactory.NACHRICHT_TEXT); + } + + @Test + void shouldCallBuildAttachments() { + buildSendNachrichtCommandBody(); + + verify(service).buildAttachments(bescheidItem); + } + + @Test + void shouldSetAttachments() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).extracting(NachrichtService.FIELD_ATTACHMENTS, LIST).containsExactly(AttachedItemTestFactory.ATTACHMENT); + } + + @Test + void shouldSetPostfachAddress() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).containsEntry(Vorgang.ServiceKonto.FIELD_POSTFACH_ADDRESS, SERVICE_KONTO_MAP); + } + } + + @Nested + class TestWithDefaultValues { + + @BeforeEach + void init() { + doReturn(Optional.empty()).when(service).getNachrichtSubject(any()); + doReturn(Optional.empty()).when(service).getNachrichtText(any()); + doReturn(Collections.emptyList()).when(service).buildAttachments(any()); + } + + @Test + void shouldSetSubject() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, NachrichtService.SUBJECT); + } + + @Test + void shouldSetMailBody() { + var result = buildSendNachrichtCommandBody(); + + assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, StringUtils.EMPTY); + } + } + } + + @Nested + class TestBuildAttachments { + + private static final String BESCHEID_FILE_ID = "bescheid-file-id"; + private static final String ATTACHMENT_FILE_ID = "attachment-file-id"; + + @Mock + private AttachedItem bescheidItem; + + @BeforeEach + void init() { + doReturn(FileId.from(BESCHEID_FILE_ID)).when(service).getBescheidFileId(any()); + doReturn(List.of(FileId.from(ATTACHMENT_FILE_ID))).when(service).getAttachments(any()); + } + + @Test + void shouldCallGetBescheidFileId() { + buildAttachments(); + + verify(service).getBescheidFileId(bescheidItem); + } + + @Test + void shouldCallGetAttachments() { + buildAttachments(); + + verify(service).getAttachments(bescheidItem); + } + + @Test + void shouldReturnAllAttachments() { + var result = buildAttachments(); + + assertThat(result).containsExactly(BESCHEID_FILE_ID, ATTACHMENT_FILE_ID); + } + + private List<String> buildAttachments() { + return service.buildAttachments(bescheidItem); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java index 726edcf3e90a969633d5f3caf885298c65334776..9f4272fed782bba1aef9ea7236c4430752002e88 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java @@ -28,15 +28,12 @@ import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.time.ZonedDateTime; -import java.time.temporal.ChronoUnit; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -61,8 +58,6 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.Bescheid.SendBy; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; -import de.ozgcloud.bescheid.common.callcontext.CallContextUser; -import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; import de.ozgcloud.bescheid.common.freemarker.TemplateHandler; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; @@ -86,8 +81,6 @@ class AttachedItemServiceTest { @Mock private VorgangAttachedItemRemoteService remoteService; @Mock - private CurrentUserService currentUserService; - @Mock private TemplateHandler templateHandler; @Nested @@ -1039,257 +1032,6 @@ class AttachedItemServiceTest { } } - @Nested - class TestSetBescheidSentStatus { - - private static final Map<String, Object> BODY_OBJECT_MAP = Map.of("key", "value"); - - @Mock - private OzgCloudCommand command; - - @BeforeEach - void init() { - doReturn(BODY_OBJECT_MAP).when(service).buildBescheidSentStatusBodyObject(any()); - } - - @Test - void shouldCallBuildPatchBescheidCommand() { - setBescheidStatusSent(); - - verify(service).buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, BODY_OBJECT_MAP); - } - - @Test - void shouldCallCommandService() { - doReturn(command).when(service).buildPatchBescheidCommand(any(), anyLong(), any()); - - setBescheidStatusSent(); - - verify(commandService).createAndWaitUntilDone(command); - } - - private void setBescheidStatusSent() { - service.setBescheidSentStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); - } - } - - @Nested - class TestBuildBescheidSentStatusBodyObject { - - @Test - void shouldSetId() { - var result = service.buildBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ID, AttachedItemTestFactory.ID); - } - - @Test - void shouldCallBuildBescheidSentStatusItem() { - service.buildBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - - verify(service).buildBescheidSentStatusItem(); - } - - @Test - void shouldSetBescheidBodyObject() { - var expectedItemMap = Map.of("key", "value"); - doReturn(expectedItemMap).when(service).buildBescheidSentStatusItem(); - - var result = service.buildBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM, expectedItemMap); - } - - } - - @Nested - class TestBuildBescheidSentStatusItem { - - @Test - void shouldSetStatus() { - var result = service.buildBescheidSentStatusItem(); - - assertThat(result).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name()); - } - } - - @Nested - class TestBuildSentInfoMap { - - @Test - void shouldSetSentAt() { - var result = service.buildSentInfoMap(); - - assertThat(getSentAt(result)).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS)); - } - - @Test - void shouldCallGetUser() { - service.buildSentInfoMap(); - - verify(currentUserService).findUser(); - } - - @Test - void shouldSetSentBy() { - var userId = "user-id"; - doReturn(userId).when(service).getUserId(); - - var result = service.buildSentInfoMap(); - - assertThat(result).containsEntry(Bescheid.FIELD_SENT_BY, userId); - } - - private ZonedDateTime getSentAt(Map<String, Object> sentInfo) { - return ZonedDateTime.parse(MapUtils.getString(sentInfo, Bescheid.FIELD_SENT_AT)); - } - } - - @Nested - class TestGetUserId { - - @Mock - private CallContextUser callContextUser; - - @Test - void shouldCallFindUser() { - service.getUserId(); - - verify(currentUserService).findUser(); - } - - @Test - void shouldCallGetUserIdOnCallContexUser() { - when(currentUserService.findUser()).thenReturn(Optional.of(callContextUser)); - - service.getUserId(); - - verify(callContextUser).getUserId(); - } - - @Test - void shouldReturnUserId() { - var expectedUserId = "user-id"; - when(callContextUser.getUserId()).thenReturn(Optional.of(expectedUserId)); - when(currentUserService.findUser()).thenReturn(Optional.of(callContextUser)); - - var result = service.getUserId(); - - assertThat(result).isEqualTo(expectedUserId); - } - - @Test - void shouldReturnEmptyWhenNoUserFound() { - var result = service.getUserId(); - - assertThat(result).isEmpty(); - } - - @Test - void shouldReturnEmptyWhenNoUserIdFound() { - when(currentUserService.findUser()).thenReturn(Optional.of(callContextUser)); - - var result = service.getUserId(); - - assertThat(result).isEmpty(); - } - } - - @Nested - class TestRevertBescheidStatusSent { - - private static final Map<String, Object> BODY_OBJECT_MAP = Map.of("key", "value"); - - @Mock - private OzgCloudCommand command; - - @Test - void shouldCallBuildRevertBescheidSentStatusBodyObject() { - revertBescheidStatusSent(); - - verify(service).buildRevertBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - } - - @Test - void shouldCallBuildPatchBescheidCommand() { - doReturn(BODY_OBJECT_MAP).when(service).buildRevertBescheidSentStatusBodyObject(any()); - - revertBescheidStatusSent(); - - verify(service).buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, BODY_OBJECT_MAP); - } - - @Test - void shouldCallCommandService() { - doReturn(command).when(service).buildPatchBescheidCommand(any(), anyLong(), any()); - - revertBescheidStatusSent(); - - verify(commandService).createAndWaitUntilDone(command); - } - - private void revertBescheidStatusSent() { - service.revertBescheidSendStatus(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION); - } - - } - - @Nested - class TestBuildRevertBescheidSentStatusBodyObject { - - @Test - void shouldSetId() { - var result = service.buildRevertBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ID, AttachedItemTestFactory.ID); - } - - @Test - void shouldCallBuildRevertBescheidSentStatusItem() { - service.buildRevertBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - - verify(service).buildRevertBescheidSentStatusItem(); - } - - @Test - void shouldSetBescheidBodyObject() { - var expectedItemMap = Map.of("key", "value"); - doReturn(expectedItemMap).when(service).buildRevertBescheidSentStatusItem(); - - var result = service.buildRevertBescheidSentStatusBodyObject(AttachedItemTestFactory.ID); - - assertThat(result).containsEntry(AttachedItem.PROPERTY_ITEM, expectedItemMap); - } - } - - @Nested - class TestBuildRevertBescheidSentStatusItem { - - @Test - void shouldCallBuildItemMap() { - service.buildRevertBescheidSentStatusItem(); - - verify(service).buildItemMap(Bescheid.Status.DRAFT); - } - - @Test - void shouldReturnResultsOfBuildItemMap() { - var expectedItemMap = new HashMap<String, Object>(Map.of("key", "value")); - doReturn(expectedItemMap).when(service).buildItemMap(any()); - - var result = service.buildRevertBescheidSentStatusItem(); - - assertThat(result).containsEntry("key", "value"); - } - - @Test - void shouldSetSentInfoNull() { - var result = service.buildRevertBescheidSentStatusItem(); - - assertThat(result).containsEntry(Bescheid.FIELD_SENT_INFO, null); - } - } - @Nested class TestBuildItemMap { @@ -1301,54 +1043,6 @@ class AttachedItemServiceTest { } } - @Nested - class TestBuildPatchBescheidCommand { - - private static final Map<String, Object> BODY_OBJECT_MAP = Map.of("key", "value"); - - @Test - void shouldCallRelationIdMapper() { - buildPatchBescheidCommand(); - - verify(commandMapper).mapRelationId(AttachedItemTestFactory.ID); - } - - @Test - void shouldSetRelationId() { - var expectedId = GenericId.from(AttachedItemTestFactory.ID); - when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - - var result = buildPatchBescheidCommand(); - - assertThat(result.getRelationId()).isEqualTo(expectedId); - } - - @Test - void shouldSetRelationVersion() { - var result = buildPatchBescheidCommand(); - - assertThat(result.getRelationVersion()).isEqualTo(AttachedItemTestFactory.VERSION); - } - - @Test - void shouldSetOrder() { - var result = buildPatchBescheidCommand(); - - assertThat(result.getOrder()).isEqualTo(AttachedItemService.PATCH_ATTACHED_ITEM); - } - - @Test - void shouldSetBodyObject() { - var result = buildPatchBescheidCommand(); - - assertThat(result.getBodyObject()).isSameAs(BODY_OBJECT_MAP); - } - - private OzgCloudCommand buildPatchBescheidCommand() { - return service.buildPatchBescheidCommand(AttachedItemTestFactory.ID, AttachedItemTestFactory.VERSION, BODY_OBJECT_MAP); - } - } - @Nested class TestFindAllBescheid { diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java index f18ffbc9d6851d39b9dfe8676d98f7676013dbe5..5974a286fb170a9c04db124f1b80220f84d66496 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java @@ -1,12 +1,9 @@ package de.ozgcloud.bescheid.nachricht; import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.util.List; -import java.util.Map; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -16,21 +13,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import de.ozgcloud.apilib.common.command.OzgCloudCommand; -import de.ozgcloud.apilib.common.command.OzgCloudCommandService; -import de.ozgcloud.apilib.common.command.grpc.CommandMapper; -import de.ozgcloud.apilib.common.datatypes.GenericId; -import de.ozgcloud.apilib.user.OzgCloudUserId; -import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; -import de.ozgcloud.bescheid.Bescheid; import de.ozgcloud.bescheid.BescheidTestFactory; -import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; import de.ozgcloud.bescheid.common.freemarker.TemplateHandler; -import de.ozgcloud.bescheid.vorgang.PostfachAddressTestFactory; -import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory; -import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; -import de.ozgcloud.common.errorhandling.TechnicalException; class NachrichtServiceTest { @@ -41,10 +26,6 @@ class NachrichtServiceTest { @Mock private NachrichtRemoteService remoteService; @Mock - private OzgCloudCommandService commandService; - @Mock - private CommandMapper commandMapper; - @Mock private TemplateHandler templateHandler; @Nested @@ -126,225 +107,4 @@ class NachrichtServiceTest { assertThat(message).isEqualTo("FROM_TEMPLATE"); } } - - @Nested - class TestSendNachricht { - - @Mock - private OzgCloudCommand ozgCloudCommand; - - @BeforeEach - void init() { - doReturn(ozgCloudCommand).when(service).buildSendBescheidCommand(any()); - } - - @Test - void shouldCallBuildBescheidCommand() { - var bescheid = BescheidTestFactory.create(); - - service.sendNachricht(bescheid); - - verify(service).buildSendBescheidCommand(bescheid); - } - - @Test - void shouldCallCommandService() { - service.sendNachricht(BescheidTestFactory.create()); - - verify(commandService).createAndWaitUntilDone(ozgCloudCommand); - } - - } - - @Nested - class TestBuildSendBescheidCommand { - - private static final Map<String, Object> bodyObject = Map.of("key", "value"); - private final Bescheid bescheid = BescheidTestFactory.create(); - - @BeforeEach - void init() { - doReturn(bodyObject).when(service).buildSendNachrichtCommandBody(any()); - } - - @Test - void shouldCallVorgangIdMapper() { - buildCommand(); - - verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString()); - } - - @Test - void shouldSetVorgangId() { - var vorgangId = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); - when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(vorgangId); - - var result = buildCommand(); - - assertThat(result.getVorgangId()).isEqualTo(vorgangId); - } - - @Test - void shouldCallMapRelationId() { - buildCommand(); - - verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString()); - } - - @Test - void shouldSetRelationId() { - var relationId = GenericId.from("relation-id"); - when(commandMapper.mapRelationId(anyString())).thenReturn(relationId); - - var result = buildCommand(); - - assertThat(result.getRelationId()).isEqualTo(relationId); - } - - @Test - void shouldSetOrder() { - var result = buildCommand(); - - assertThat(result.getOrder()).isEqualTo(NachrichtService.SEND_POSTFACH_NACHRICHT_ORDER); - } - - @Test - void shouldCallCreatedBy() { - buildCommand(); - - verify(commandMapper).toOzgCloudUserId(BescheidTestFactory.CREATED_BY.toString()); - } - - @Test - void shouldSetCreatedBy() { - var userId = OzgCloudUserId.from(BescheidTestFactory.CREATED_BY.toString()); - when(commandMapper.toOzgCloudUserId(anyString())).thenReturn(userId); - - var result = buildCommand(); - - assertThat(result.getCreatedBy()).isEqualTo(userId); - } - - @Test - void shouldCallBuildSendNachrichtCommandBody() { - buildCommand(); - - verify(service).buildSendNachrichtCommandBody(bescheid); - } - - @Test - void shouldSetBodyObject() { - var result = buildCommand(); - - assertThat(result.getBodyObject()).isEqualTo(bodyObject); - } - - private OzgCloudCommand buildCommand() { - return service.buildSendBescheidCommand(bescheid); - } - } - - @Nested - class TestBuildSendNachrichtCommandBody { - - private final Bescheid bescheid = BescheidTestFactory.create(); - - @Test - void shouldCallBuildPostfachAddress() { - service.buildSendNachrichtCommandBody(bescheid); - - verify(service).buildPostfachAddress(bescheid); - } - - @Test - void shouldSetPostfachAddress() { - var postfachAddressMap = Map.<String, Object>of("key", "value"); - doReturn(postfachAddressMap).when(service).buildPostfachAddress(any()); - - var result = service.buildSendNachrichtCommandBody(bescheid); - - assertThat(result).containsEntry(Vorgang.ServiceKonto.FIELD_POSTFACH_ADDRESS, postfachAddressMap); - } - - @Test - void shouldSetReplyOption() { - var result = service.buildSendNachrichtCommandBody(bescheid); - - assertThat(result).containsEntry(NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION); - } - - @Test - void shouldSetSubject() { - var result = service.buildSendNachrichtCommandBody(bescheid); - - assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, BescheidTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldSetMailBody() { - var result = service.buildSendNachrichtCommandBody(bescheid); - - assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, BescheidTestFactory.NACHRICHT_TEXT); - } - - @Test - void shouldSetAttachments() { - var result = service.buildSendNachrichtCommandBody(bescheid); - - assertThat(result).containsEntry(NachrichtService.FIELD_ATTACHMENTS, - List.of(BescheidTestFactory.BESCHEID_FILE_ID, AttachedItemTestFactory.ATTACHMENT)); - } - } - - @Nested - class TestBuildPostfachAddress { - - @Test - void shouldCallGetAddress() { - var bescheid = BescheidTestFactory.create(); - - service.buildPostfachAddress(bescheid); - - verify(service).getAddress(bescheid); - } - - @Test - void shouldThrowExceptionIfNoServiceKonto() { - doReturn(Optional.empty()).when(service).getAddress(any()); - var bescheid = BescheidTestFactory.create(); - - assertThrows(TechnicalException.class, () -> service.buildPostfachAddress(bescheid)); - } - - @Test - void shouldSetAddressType() { - var result = service.buildPostfachAddress(BescheidTestFactory.create()); - - assertThat(result).containsEntry(Vorgang.PostfachAddress.FIELD_TYPE, PostfachAddressTestFactory.TYPE); - } - - @Test - void shouldSetAddressVersion() { - var result = service.buildPostfachAddress(BescheidTestFactory.create()); - - assertThat(result).containsEntry(Vorgang.PostfachAddress.FIELD_VERSION, PostfachAddressTestFactory.VERSION); - } - - @Test - void shouldSetAddressIdentifier() { - var result = service.buildPostfachAddress(BescheidTestFactory.create()); - - assertThat(result).extracting(Vorgang.PostfachAddress.FIELD_IDENTIFIER, MAP) - .containsEntry(NachrichtService.FIELD_POSTFACH_ID, PostfachAddressTestFactory.POSTFACH_ID); - } - - @Test - void shouldSetServiceKontoType() { - var result = service.buildPostfachAddress(BescheidTestFactory.create()); - - assertThat(result).containsEntry(Vorgang.ServiceKonto.FIELD_SERVICEKONTO_TYPE, ServiceKontoTestFactory.TYPE); - } - - } - } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java index 2b9d8d0b29fe167ee61096bc63833e5cab8b8d65..cc93692c7831628dd87ada5bf0cf21f2250b5bb4 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java @@ -11,12 +11,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import de.ozgcloud.apilib.common.command.OzgCloudCommand; -import de.ozgcloud.apilib.common.command.OzgCloudCommandService; -import de.ozgcloud.apilib.common.command.grpc.CommandMapper; -import de.ozgcloud.apilib.common.datatypes.GenericId; -import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; - class VorgangServiceTest { @Spy @@ -25,10 +19,6 @@ class VorgangServiceTest { @Mock private VorgangRemoteService remoteService; - @Mock - private OzgCloudCommandService commandService; - @Mock - private CommandMapper commandMapper; @Nested class TestGetById { @@ -54,99 +44,4 @@ class VorgangServiceTest { assertThat(result).isEqualTo(vorgang); } } - - @Nested - class TestBescheiden { - - private final static Vorgang VORGANG = VorgangTestFactory.create(); - - @Mock - private OzgCloudCommand ozgCloudCommand; - - @BeforeEach - void init() { - doReturn(VORGANG).when(service).getById(any(VorgangId.class)); - } - - @Test - void shouldCallGetBeyId() { - service.bescheiden(VorgangTestFactory.ID.toString()); - - verify(service).getById(VorgangTestFactory.ID); - } - - @Test - void shouldCallBuildBescheidenCommand() { - service.bescheiden(VorgangTestFactory.ID.toString()); - - verify(service).buildVorgangBescheidenCommand(VORGANG); - } - - @Test - void shouldCallCommandService() { - // doReturn(ozgCloudCommand).when(service).buildVorgangBescheidenCommand(any()); - - service.bescheiden(VorgangTestFactory.ID.toString()); - - verify(commandService).createAndWaitUntilDone(ozgCloudCommand); - } - } - - @Nested - class TestBuildBescheidenCommand { - - private final static Vorgang VORGANG = VorgangTestFactory.create(); - - @Test - void shouldCallCommandMapperToOzgCloudVorgangId() { - service.buildVorgangBescheidenCommand(VORGANG); - - verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString()); - } - - @Test - void shouldSetVorgangId() { - var expectedId = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString()); - when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedId); - - var result = service.buildVorgangBescheidenCommand(VORGANG); - - assertThat(result.getVorgangId()).isEqualTo(expectedId); - } - - @Test - void shouldCallCommandMapperMapRelationId() { - service.buildVorgangBescheidenCommand(VORGANG); - - verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString()); - } - - @Test - void shouldSetRelationId() { - var expectedId = GenericId.from(VorgangTestFactory.ID.toString()); - when(commandMapper.mapRelationId(any())).thenReturn(expectedId); - - var result = service.buildVorgangBescheidenCommand(VORGANG); - - assertThat(result.getRelationId()).isEqualTo(expectedId); - } - - @Test - void shouldSetRelationVersion() { - var expectedVersion = VORGANG.getVersion(); - - var result = service.buildVorgangBescheidenCommand(VORGANG); - - assertThat(result.getRelationVersion()).isEqualTo(expectedVersion); - } - - @Test - void shouldSetOrder() { - var expectedOrder = VorgangService.VORGANG_BESCHEIDEN; - - var result = service.buildVorgangBescheidenCommand(VORGANG); - - assertThat(result.getOrder()).isEqualTo(expectedOrder); - } - } }