diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index c1c9559cf51e63f7e9c0e53898afed11eaf4c05c..a04e5464ba13ff4739cc6ad67e1d1990a861c8c0 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -55,7 +55,7 @@ <user-manager-interface.version>2.1.0</user-manager-interface.version> <bescheid-manager.version>1.14.1</bescheid-manager.version> <processor-manager.version>0.4.1</processor-manager.version> - <nachrichten-manager.version>2.9.0</nachrichten-manager.version> + <nachrichten-manager.version>2.10.0-SNAPSHOT</nachrichten-manager.version> <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> <notification-manager.version>2.8.0</notification-manager.version> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java index b6360403db1c64d915838671a4a7ab390d540a21..4c7bb459c80b6c4e5a3aa39a88afcad0d0ebf9aa 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandService.java @@ -22,13 +22,8 @@ package de.ozgcloud.vorgang.command; import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.URLConnection; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; import java.util.Base64; -import java.util.Collections; -import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -37,21 +32,15 @@ import java.util.stream.Stream; import jakarta.activation.MimetypesFileTypeMap; -import org.apache.commons.lang3.StringUtils; import org.apache.http.entity.ContentType; import org.springframework.stereotype.Service; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.nachrichten.postfach.AttachmentFile; import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; -import de.ozgcloud.nachrichten.postfach.PostfachAddress; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; -import de.ozgcloud.nachrichten.postfach.StringBasedIdentifier; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; -import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemMapper; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemService; -import de.ozgcloud.vorgang.callcontext.CallContext; -import de.ozgcloud.vorgang.callcontext.User; import de.ozgcloud.vorgang.files.FileService; import de.ozgcloud.vorgang.files.OzgFile; import de.ozgcloud.vorgang.files.UploadedFilesReference; @@ -71,108 +60,12 @@ class PersistPostfachNachrichtByCommandService implements PersistPostfachNachric static final String ITEM_NAME = "PostfachMail"; static final String ATTACHMENT_NAME = "PostfachAttachment"; - private final CommandService service; private final VorgangAttachedItemService attachedItemService; private final FileService fileService; @Override public void persistNachricht(Optional<String> userId, PostfachNachricht nachricht) { - var builder = CreateCommandRequest.builder() - .callContext(buildCallContext(userId)) - .vorgangId(nachricht.getVorgangId()); - - var request = StringUtils.isBlank(nachricht.getId()) ? buildPersistCommand(builder, nachricht) : buildUpdateCommand(builder, nachricht); - - service.createCommand(request); - } - - CreateCommandRequest buildPersistCommand(CreateCommandRequest.CreateCommandRequestBuilder builder, PostfachNachricht nachricht) { - return builder.order(Order.CREATE_ATTACHED_ITEM.name()) - .relationId(nachricht.getVorgangId()) - .bodyObject(buildItem(nachricht)).build(); - } - - CreateCommandRequest buildUpdateCommand(CreateCommandRequest.CreateCommandRequestBuilder builder, PostfachNachricht nachricht) { - return builder.order(Order.UPDATE_ATTACHED_ITEM.name()) - .relationId(nachricht.getId()) - .bodyObject(buildUpdateItem(nachricht)).build(); - } - - private CallContext buildCallContext(Optional<String> userId) { - var builder = CallContext.builder(); - userId.map(id -> User.builder().id(id).build()).ifPresent(builder::user); - - return builder.build(); - } - - private Map<String, Object> buildItem(PostfachNachricht nachricht) { - return Map.of( - VorgangAttachedItemMapper.PROPERTY_CLIENT, CLIENT, - VorgangAttachedItemMapper.PROPERTY_VORGANG_ID, nachricht.getVorgangId(), - VorgangAttachedItemMapper.PROPERTY_ITEM_NAME, ITEM_NAME, - VorgangAttachedItemMapper.PROPERTY_ITEM, buildNachrichtMap(nachricht)); - - } - - private Map<String, Object> buildUpdateItem(PostfachNachricht nachricht) { - return Map.of( - VorgangAttachedItemMapper.PROPERTY_CLIENT, CLIENT, - VorgangAttachedItemMapper.PROPERTY_ITEM, buildNachrichtMap(nachricht)); - - } - - Map<String, Object> buildNachrichtMap(PostfachNachricht nachricht) { - var result = new HashMap<>(Map.of( - PostfachNachricht.FIELD_VORGANG_ID, nachricht.getVorgangId(), - PostfachNachricht.FIELD_CREATED_AT, nachricht.getCreatedAt().format(DateTimeFormatter.ISO_DATE_TIME), - PostfachNachricht.FIELD_DIRECTION, nachricht.getDirection().name(), - PostfachNachricht.FIELD_REPLY_OPTION, nachricht.getReplyOption().name(), - PostfachNachricht.FIELD_SUBJECT, nachricht.getSubject(), - PostfachNachricht.FIELD_MAIL_BODY, nachricht.getMailBody(), - PostfachNachricht.FIELD_ATTACHMENTS, nachricht.getAttachments())); - - putIfNonNull(result, PostfachNachricht.FIELD_POSTFACH_ID, nachricht.getPostfachId()); - putIfNonNull(result, PostfachNachricht.FIELD_MESSAGE_ID, nachricht.getMessageId()); - putIfNonNull(result, PostfachNachricht.FIELD_CREATED_BY, nachricht.getCreatedBy()); - putIfNonNull(result, PostfachNachricht.FIELD_SENT_SUCCESSFUL, nachricht.getSentSuccessful()); - putIfNonNull(result, PostfachNachricht.FIELD_MESSAGE_CODE, nachricht.getMessageCode()); - putIfNonNull(result, PostfachNachricht.REFERENCED_NACHRICHT_FIELD, nachricht.getReferencedNachricht()); - putDateIfNonNull(result, PostfachNachricht.FIELD_SENT_AT, nachricht.getSentAt()); - - Optional.ofNullable(nachricht.getPostfachAddress()).map(this::buildPostfachAddressMap) - .ifPresent(postfachMaiMap -> result.put(PostfachNachricht.POSTFACH_ADDRESS_FIELD, postfachMaiMap)); - - return Collections.unmodifiableMap(result); - } - - private Map<String, Object> putIfNonNull(Map<String, Object> mapIn, String key, Object value) { - if (Objects.nonNull(value)) { - mapIn.put(key, value); - } - return mapIn; - } - - private Map<String, Object> putDateIfNonNull(Map<String, Object> mapIn, String key, Object value) { - if (Objects.nonNull(value)) { - mapIn.put(key, ((ZonedDateTime) value).format(DateTimeFormatter.ISO_DATE_TIME)); - } - return mapIn; - } - - private Map<String, Object> buildPostfachAddressMap(PostfachAddress postfachAddress) { - var resultMap = new HashMap<String, Object>(); - resultMap.put(PostfachAddress.IDENTIFIER_FIELD, buildPostfachAddressIdentifierMap(postfachAddress)); - resultMap.put(PostfachAddress.VERSION_FIELD, postfachAddress.getVersion()); - resultMap.put(PostfachAddress.TYPE_FIELD, postfachAddress.getType()); - Optional.ofNullable(postfachAddress.getServiceKontoType()).ifPresentOrElse( - serviceKontoType -> resultMap.put(PostfachAddress.SERVICEKONTO_TYPE_FIELD, serviceKontoType), - () -> LOG.warn("ServiceKontoType is null")); - return Collections.unmodifiableMap(resultMap); - } - - private Map<String, Object> buildPostfachAddressIdentifierMap(PostfachAddress postfachAddress) { - var identifier = (StringBasedIdentifier) postfachAddress.getIdentifier(); - return Map.of(PostfachNachricht.FIELD_POSTFACH_ID, identifier.getPostfachId()); + throw new UnsupportedOperationException("Not implemented."); } @Override diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidITCase.java index a85658f21505777e07cf1a862bbbcfdbdd83e3a5..deabb903e2e37c99c2e45d41c8d88006e0077764 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidITCase.java @@ -86,7 +86,6 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; "grpc.client.ozgcloud-command-manager.address=in-process:test", "grpc.client.vorgang-manager.address=in-process:test", "grpc.client.nachrichten-manager.address=in-process:test", - "grpc.client.pluto.address=in-process:test", "grpc.client.command-manager.address=in-process:test", "ozgcloud.feature.bescheid.enable-dummy-document-processor=true", }) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java index cf6ab1233d729c31002070698f877d7e3d0c809b..f2e9faf9246aa4f6da71c52133f278a26de1fb15 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachMailITCase.java @@ -71,10 +71,13 @@ import de.ozgcloud.vorgang.files.OzgFile; import io.grpc.stub.StreamObserver; @SpringBootTest(classes = { VorgangManagerServerApplication.class, OsiPostfachProperties.class }, properties = { + "grpc.server.inProcessName=test", + "grpc.server.port=-1", "ozgcloud.osi.postfach.proxyapi.url=http://localhost/ApiProxy/V1/Message", "ozgcloud.osi.postfach.proxyapi.key=1234", "ozgcloud.osi.postfach.proxyapi.realm=test-realm", - "ozgcloud.osi.postfach.notification.mail-from=test@local.host" + "ozgcloud.osi.postfach.notification.mail-from=test@local.host", + "grpc.client.ozgcloud-command-manager.address=in-process:test", }) @WithMockUser @DataITCase @@ -133,7 +136,7 @@ class PostfachMailITCase { callGrpcEndpoint(); - mockServer.verify(); + await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> mockServer.verify()); } @Nested @@ -144,6 +147,7 @@ class PostfachMailITCase { mockServerSendSuccess(); callGrpcEndpoint(); + var mails = await().atMost(60, TimeUnit.SECONDS) .until(PostfachMailITCase.this::callGrpcListEndpoint, PostfachMailITCase.this::hasAtLeastOneElement); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachMailByCommandServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachMailByCommandServiceITCase.java index 6f386a9017ddec6bc2e7dd1c452a997caf4e6379..ca948a0825554fb26818b1bd978bfbf0183c878e 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachMailByCommandServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachMailByCommandServiceITCase.java @@ -26,7 +26,6 @@ package de.ozgcloud.vorgang.command; import static org.assertj.core.api.Assertions.*; import java.util.Map; -import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -36,12 +35,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.security.test.context.support.WithMockUser; -import de.ozgcloud.command.Command; import de.ozgcloud.common.test.DataITCase; -import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.callcontext.UserTestFactory; import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; @@ -63,25 +59,6 @@ class PersistPostfachMailByCommandServiceITCase { persistedVorgang = mongoOperations.save(VorgangTestFactory.createWithOrganisationEinheitId("73").toBuilder().id(null).version(0).build()); } - @DisplayName("persist mail") - @Nested - class TestPersistMail { - - @BeforeEach - void initDatabase() { - mongoOperations.dropCollection(Command.COLLECTION_NAME); - } - - @Test - void shouldCreateCommand() { - service.persistNachricht(Optional.of(UserTestFactory.ID), - PostfachNachrichtTestFactory.createBuilder().vorgangId(persistedVorgang.getId()).build()); - - var commands = mongoOperations.findAll(Command.class); - assertThat(commands).hasSize(1); - } - } - @DisplayName("with existing postfach nachricht") @Nested class TestWithExistingPostfachNachricht { diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandServiceTest.java index 3384f06ff55b5146b18eed76d584e7dc8ae078d2..7075a16dbee0496c3b2663dc8111fe3ef1300098 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/PersistPostfachNachrichtByCommandServiceTest.java @@ -24,7 +24,6 @@ package de.ozgcloud.vorgang.command; import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -49,10 +48,8 @@ import de.ozgcloud.nachrichten.postfach.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; import de.ozgcloud.nachrichten.postfach.osi.MessageAttachmentTestFactory; import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; -import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemMapper; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemService; import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; -import de.ozgcloud.vorgang.callcontext.UserTestFactory; import de.ozgcloud.vorgang.files.FileId; import de.ozgcloud.vorgang.files.FileService; import de.ozgcloud.vorgang.files.OzgFile; @@ -64,119 +61,21 @@ class PersistPostfachNachrichtByCommandServiceTest { @InjectMocks private PersistPostfachNachrichtByCommandService service; @Mock - private CommandService commandService; - @Mock private VorgangAttachedItemService attachedItemService; @Mock private FileService fileService; - @DisplayName("Persist mail") + @DisplayName("Persist nachricht") @Nested - class TestPersistMail { - - @Captor - private ArgumentCaptor<CreateCommandRequest> requestCaptor; - - @Test - void shouldCallCommandService() { - callService(); - - verify(commandService).createCommand(notNull()); - } - - @Test - void shouldContainVorgangId() { - var request = callService(); - - assertThat(request.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } - - @Test - void shouldContainRelationInformations() { - var request = callService(); - - assertThat(request.getRelationId()).isEqualTo(MessageTestFactory.VORGANG_ID); - assertThat(request.getRelationVersion()).isNull(); - } + class TestPersistNachricht { @Test - void shouldHaveOrder() { - var request = callService(); - - assertThat(request.getOrder()).isEqualTo(Order.CREATE_ATTACHED_ITEM.name()); - } - - @Test - void shouldHaveCallContext() { - var request = callService(); - - assertThat(request.getCallContext()).isNotNull(); - assertThat(request.getCallContext().getUser().getId()).isEqualTo(UserTestFactory.ID); - } - - @Test - void shouldHaveVorgangAttachedItem() { - var request = callService(); - - assertThat(request.getBodyObject()) - .containsEntry(VorgangAttachedItemMapper.PROPERTY_VORGANG_ID, MessageTestFactory.VORGANG_ID) - .containsEntry(VorgangAttachedItemMapper.PROPERTY_CLIENT, "OzgCloud_NachrichtenManager") - .containsEntry(VorgangAttachedItemMapper.PROPERTY_ITEM_NAME, "PostfachMail") - .containsKey(VorgangAttachedItemMapper.PROPERTY_ITEM); - } - - @Test - void shouldNotAddUser() { - service.persistNachricht(Optional.empty(), PostfachNachrichtTestFactory.create()); - verify(commandService).createCommand(requestCaptor.capture()); - - assertThat(requestCaptor.getValue().getCallContext().getUser()).isNull(); - } - - private CreateCommandRequest callService() { - service.persistNachricht(Optional.of(UserTestFactory.ID), PostfachNachrichtTestFactory.createBuilder().id(null).build()); - verify(commandService).createCommand(requestCaptor.capture()); - - return requestCaptor.getValue(); - } - - @DisplayName("build mail map") - @Nested - class TestBuildMailMap { - - @Test - void shouldContainAllFieldsIgnoringId() { - var map = service.buildNachrichtMap(PostfachNachrichtTestFactory.createBuilder().id(null).build()); - - var mapWithoutId = PostfachNachrichtTestFactory.asMap(); - mapWithoutId.remove("id"); - - assertThat(map).containsAllEntriesOf(mapWithoutId); - } - - @Test - void shouldIgnoreEmptyMessageId() { - assertDoesNotThrow(() -> service.buildNachrichtMap(PostfachNachrichtTestFactory.createBuilder().messageId(null).build())); - } - - @Test - void shouldIgnoreEmptyCreatedBy() { - assertDoesNotThrow(() -> service.buildNachrichtMap(PostfachNachrichtTestFactory.createBuilder().createdBy(null).build())); - } - - @Test - void shouldHandleNullAsPostfachId() { - var postfachMail = PostfachNachrichtTestFactory.createBuilder().postfachId(null).build(); - - assertDoesNotThrow(() -> service.buildNachrichtMap(postfachMail)); - } - - @Test - void shouldProceedWithEmptyPostfachAddress() { - var postfachMail = PostfachNachrichtTestFactory.createBuilder().postfachAddress(null).build(); + void shouldThrowException() { + var postfachNachricht = PostfachNachrichtTestFactory.create(); + var userId = Optional.<String>empty(); - assertDoesNotThrow(() -> service.buildNachrichtMap(postfachMail)); - } + assertThatThrownBy(() -> service.persistNachricht(userId, postfachNachricht)) + .isInstanceOf(UnsupportedOperationException.class); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceFindQueryITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceFindQueryITCase.java index e5fcd28b7fe4eff5bbd198103ab8a3a676f9faa7..62a1e5ff733572ad745d2b05b0990a36a9292e25 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceFindQueryITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceFindQueryITCase.java @@ -37,8 +37,6 @@ class GrpcVorgangServiceFindQueryITCase { private static final String VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH = "ClientAttribute.OzgCloud_NachrichtenManager.hasNewPostfachNachricht"; - @Autowired - private VorgangHeaderRepository repository; @Autowired private MongoOperations mongoOperations; @@ -72,7 +70,8 @@ class GrpcVorgangServiceFindQueryITCase { GrpcQuery.newBuilder() .addExpressions(GrpcVorgangQueryExpression.newBuilder() .setOperator(GrpcQueryOperator.EXISTS) - .setPath("ClientAttribute.%s.nextWiedervorlageFrist".formatted(CriteriaUtil.DEFAULT_CLIENT)))).build(); + .setPath("ClientAttribute.%s.nextWiedervorlageFrist".formatted(CriteriaUtil.DEFAULT_CLIENT)))) + .build(); var result = vorgangServiceStub.findVorgang(request); @@ -108,8 +107,7 @@ class GrpcVorgangServiceFindQueryITCase { .addExpressions(GrpcVorgangQueryExpression.newBuilder() .setOperator(GrpcQueryOperator.LESS_THEN_OR_EQUAL_TO) .setPath("Vorgang." + Vorgang.MONGODB_FIELDNAME_CREATED_AT) - .setOperandStringValue(VorgangTestFactory.CREATED_AT.toString())) - ) + .setOperandStringValue(VorgangTestFactory.CREATED_AT.toString()))) .build(); var result = vorgangServiceStub.findVorgang(request);