diff --git a/Jenkinsfile b/Jenkinsfile index 767cdebd95090867d4deffa17679f5aa3003d245..2bc7a8258c780f62608db6611c63f8899183a7a2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -85,7 +85,6 @@ pipeline { } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { sh 'mvn --no-transfer-progress -s $MAVEN_SETTINGS -DskipTests deploy -Dmaven.wagon.http.retryHandler.count=3' - // sh "mvn -s $MAVEN_SETTINGS versions:revert" } } } diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 0f7d64c45be81fd4a74e0ccc903d3fd5a4a895d8..bd10da5fa4d69478e1a1455cb46e0cbd5569619c 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -5,19 +5,19 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath /> </parent> <groupId>de.ozgcloud.bescheid</groupId> <artifactId>bescheid-manager</artifactId> <name>OZG-Cloud Bescheid Manager</name> - <version>1.15.0-SNAPSHOT</version> + <version>1.16.0-SNAPSHOT</version> <properties> <vorgang-manager.version>2.9.0</vorgang-manager.version> <nachrichten-manager.version>2.9.0</nachrichten-manager.version> - <api-lib.version>0.11.0-SNAPSHOT</api-lib.version> + <api-lib.version>0.11.0</api-lib.version> </properties> <dependencies> 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 8fd50e588aabbf6f67f6af76b760657750e40f3f..ada68e5d7b3dcc83dd1aeacc8998ba32b8702820 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java @@ -44,7 +44,6 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.binaryfile.BinaryFileService; import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; import de.ozgcloud.bescheid.common.user.UserProfileService; -import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; @@ -94,14 +93,12 @@ class BescheidEventListener { private final BescheidService service; private final BinaryFileService fileService; - private final NachrichtService nachrichtService; private final AttachedItemService attachedItemService; private final DocumentService documentService; private final ApplicationEventPublisher eventPublisher; private final CurrentUserService userService; private final UserProfileService userProfileService; - private final BescheidFeatureProperties bescheidFeatureProperties; @EventListener(condition = IS_CREATE_BESCHEID) public void onCreateBescheidCommand(CommandCreatedEvent event) { @@ -109,12 +106,6 @@ class BescheidEventListener { } void doCreateBescheid(Command command) { - if (bescheidFeatureProperties.isKielHackathonRoute()) { - var bescheid = doCreateBescheidBiz(command); - nachrichtService.createNachrichtDraft(bescheid); - eventPublisher.publishEvent(new BescheidCreatedEvent(command)); - return; - } var createdItemId = attachedItemService.createBescheidDraft(command); eventPublisher.publishEvent(new BescheidCreatedEvent(command, createdItemId)); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidFeatureProperties.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidFeatureProperties.java deleted file mode 100644 index 1b0011890ab72654176613f9dfd31ec1eb41fdc8..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidFeatureProperties.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -package de.ozgcloud.bescheid; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -import lombok.Getter; -import lombok.Setter; - -@Configuration -@ConfigurationProperties(prefix = "ozgcloud.feature.bescheid") -@Getter -@Setter -public class BescheidFeatureProperties { - - private boolean storeAsDocument = false; - - private boolean kielHackathonRoute = false; -} 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 aa027989797574f34930c1249e922d370029d2da..fb010f5dff17f3406354455944fab3a4f168be2c 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -26,7 +26,6 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItem; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; import de.ozgcloud.bescheid.attributes.ClientAttributeService; import de.ozgcloud.bescheid.common.user.UserProfileService; -import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.Vorgang; import de.ozgcloud.bescheid.vorgang.VorgangId; import de.ozgcloud.bescheid.vorgang.VorgangService; @@ -43,10 +42,19 @@ import lombok.extern.log4j.Log4j2; class BescheidService { private static final String ERROR_MESSAGE_NO_SERVICE = "No Bescheid Endpoint is configured."; + static final String VORGANG_BESCHEIDEN_ORDER = "VORGANG_BESCHEIDEN"; static final String SUBCOMMANDS_EXECUTION_MODE = "PARALLEL"; static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT"; + static final String FIELD_POSTFACH_ID = "postfachId"; + static final String FIELD_REPLY_OPTION = "replyOption"; + static final String REPLY_OPTION = "FORBIDDEN"; + static final String FIELD_SUBJECT = "subject"; + static final String FIELD_MAIL_BODY = "mailBody"; + static final String FIELD_ATTACHMENTS = "attachments"; + static final String SUBJECT = "Ihr Bescheid zum Antrag"; + private final VorgangService vorgangService; private final AttachedItemService attachedItemService; private final UserProfileService userProfileService; @@ -210,10 +218,10 @@ class BescheidService { Map<String, Object> buildSendNachrichtCommandBody(AttachedItem bescheidItem, Map<String, Object> postfachAddress) { return Map.of( - NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION, - NachrichtService.FIELD_SUBJECT, getNachrichtSubject(bescheidItem).orElse(NachrichtService.SUBJECT), - NachrichtService.FIELD_MAIL_BODY, getNachrichtText(bescheidItem).orElse(StringUtils.EMPTY), - NachrichtService.FIELD_ATTACHMENTS, buildAttachments(bescheidItem), + FIELD_REPLY_OPTION, REPLY_OPTION, + FIELD_SUBJECT, getNachrichtSubject(bescheidItem).orElse(SUBJECT), + FIELD_MAIL_BODY, getNachrichtText(bescheidItem).orElse(StringUtils.EMPTY), + FIELD_ATTACHMENTS, buildAttachments(bescheidItem), Vorgang.ServiceKonto.FIELD_POSTFACH_ADDRESS, postfachAddress); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/Nachricht.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/Nachricht.java deleted file mode 100644 index 1f352d1d9efab6714236d1fbd00b01b33c1ea0dc..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/Nachricht.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import java.time.ZonedDateTime; - -import de.ozgcloud.bescheid.UserId; -import de.ozgcloud.bescheid.vorgang.Vorgang; -import de.ozgcloud.bescheid.vorgang.VorgangId; -import de.ozgcloud.common.binaryfile.FileId; -import lombok.Builder; -import lombok.Getter; -import lombok.NonNull; - -@Getter -@Builder -public class Nachricht { - - private NachrichtId id; - private VorgangId vorgangId; - - @NonNull - private String subject; - @NonNull - private String mailBody; - - private FileId bescheidFileId; - - @NonNull - private UserId createdBy; - @Builder.Default - private ZonedDateTime createdAt = ZonedDateTime.now(); - - private Vorgang.PostfachAddress postfachAddress; -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtId.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtId.java deleted file mode 100644 index b8fd29a9345542580177104549207a731e2c7139..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtId.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import de.ozgcloud.common.datatype.StringBasedValue; - -public class NachrichtId extends StringBasedValue { - - NachrichtId(String nachrichtId) { - super(nachrichtId); - } - - public static NachrichtId from(String nachrichtId) { - return new NachrichtId(nachrichtId); - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtMapper.java deleted file mode 100644 index 45bba2af3b3d076f92ed3b114fccd601a52ea2b4..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtMapper.java +++ /dev/null @@ -1,55 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import org.mapstruct.CollectionMappingStrategy; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.ReportingPolicy; - -import de.ozgcloud.bescheid.UserId; -import de.ozgcloud.bescheid.vorgang.Vorgang; -import de.ozgcloud.common.binaryfile.FileId; -import de.ozgcloud.nachrichten.postfach.GrpcPostfachNachricht; -import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; -import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; - -@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, // - nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.ERROR, uses = { GrpcObjectMapper.class }) -public interface NachrichtMapper { - - @Mapping(target = "createdAtBytes", ignore = true) - @Mapping(target = "mergePostfachAddress", ignore = true) - @Mapping(target = "mergeFrom", ignore = true) - @Mapping(target = "clearField", ignore = true) - @Mapping(target = "clearOneof", ignore = true) - @Mapping(target = "mergeUnknownFields", ignore = true) - @Mapping(target = "idBytes", ignore = true) - @Mapping(target = "mailBodyBytes", ignore = true) - @Mapping(target = "replyOptionBytes", ignore = true) - @Mapping(target = "subjectBytes", ignore = true) - @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "allFields", ignore = true) - - @Mapping(target = "id", ignore = true) - @Mapping(target = "attachmentList", source = "bescheidFileId") - @Mapping(target = "replyOption", constant = "FORBIDDEN") - GrpcPostfachNachricht mapToGrpc(Nachricht nachricht); - - @Mapping(target = "mergeFrom", ignore = true) - @Mapping(target = "clearField", ignore = true) - @Mapping(target = "clearOneof", ignore = true) - @Mapping(target = "mergeIdentifier", ignore = true) - @Mapping(target = "mergeUnknownFields", ignore = true) - @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "versionBytes", ignore = true) - @Mapping(target = "allFields", ignore = true) - GrpcPostfachAddress mapAddress(Vorgang.PostfachAddress address); - - default String mapToString(FileId fileId) { - return fileId.toString(); - } - - default String mapToString(UserId userId) { - return userId.toString(); - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtRemoteService.java deleted file mode 100644 index 594c6eb77ab84ffa026550f5fa4c0c65b1f1b698..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtRemoteService.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import de.ozgcloud.nachrichten.postfach.GrpcSaveNachrichtDraftRequest; -import de.ozgcloud.nachrichten.postfach.PostfachServiceGrpc.PostfachServiceBlockingStub; -import io.grpc.ClientInterceptor; -import net.devh.boot.grpc.client.inject.GrpcClient; - -@Service -class NachrichtRemoteService { - - @GrpcClient("nachrichten-manager") - private PostfachServiceBlockingStub serviceStub; - - @Autowired - private NachrichtMapper mapper; - - @Autowired - private ClientInterceptor bescheidCallContextInterceptor; - - public void saveDraft(Nachricht nachricht) { - serviceStub.withInterceptors(bescheidCallContextInterceptor) - .saveNachrichtDraft(buildRequest(nachricht)); - } - - GrpcSaveNachrichtDraftRequest buildRequest(Nachricht nachricht) { - return GrpcSaveNachrichtDraftRequest.newBuilder() - .setVorgangId(nachricht.getVorgangId().toString()) - .setNachricht(mapper.mapToGrpc(nachricht)) - .build(); - } -} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java deleted file mode 100644 index 4c3655447451ffdd42a19676c0f9216259b16d3c..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java +++ /dev/null @@ -1,70 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import java.util.Objects; -import java.util.Optional; - -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 de.ozgcloud.bescheid.Bescheid; -import de.ozgcloud.bescheid.common.freemarker.TemplateHandler; -import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress; -import lombok.extern.log4j.Log4j2; - -@Service -@Log4j2 -public class NachrichtService { - - public static final String FIELD_POSTFACH_ID = "postfachId"; - public static final String FIELD_REPLY_OPTION = "replyOption"; - public static final String REPLY_OPTION = "FORBIDDEN"; - public static final String FIELD_SUBJECT = "subject"; - public static final String FIELD_MAIL_BODY = "mailBody"; - public static final String FIELD_ATTACHMENTS = "attachments"; - public static final String SUBJECT = "Ihr Bescheid zum Antrag"; - - @Autowired - private NachrichtRemoteService remoteService; - @Autowired - @Qualifier("bescheid_OzgCloudCommandService") - private OzgCloudCommandService commandService; - @Autowired - private CommandMapper commandMapper; - @Autowired - private TemplateHandler templateHandler; - - - private static final String TEMPLATE_FILE = "bescheid.nachrichtTemplate.txt.ftlh"; - - public void createNachrichtDraft(Bescheid bescheid) { - buildNachricht(bescheid).ifPresentOrElse(remoteService::saveDraft, () -> LOG.warn("No ServiceKonto given on Vorgang.")); - } - - Optional<Nachricht> buildNachricht(Bescheid bescheid) { - return getAddress(bescheid).map(address -> Nachricht.builder() - .vorgangId(bescheid.getVorgangId()) - .postfachAddress(address) - .subject(bescheid.getNachrichtSubject().orElse(SUBJECT)) - .mailBody(buildMessage(bescheid)) - .createdBy(bescheid.getCreatedBy()) - .bescheidFileId(bescheid.getBescheidFileId()) - .build()); - } - - String buildMessage(Bescheid bescheid) { - return bescheid.getNachrichtText() - .orElseGet(() -> templateHandler.fillTemplate(TEMPLATE_FILE, bescheid)); - } - - Optional<PostfachAddress> getAddress(Bescheid bescheid) { - var serviceKonto = bescheid.getServiceKonto(); - if (Objects.nonNull(serviceKonto)) { - return Optional.of(serviceKonto.getPostfachAddresses().get(0)); - } - return Optional.empty(); - } - -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java index 6347a9570ea12e841e2c6231ed798394daf809d2..a4c77b54a873cf167eb1ce027467114391322744 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java @@ -33,8 +33,6 @@ class BescheidEventListenerITCase { private ApplicationEventPublisher publisher; @SpyBean private BescheidEventListener listener; - @Autowired - private BescheidFeatureProperties bescheidFeatureProperties; @MockBean private BescheidService service; @@ -62,16 +60,11 @@ class BescheidEventListenerITCase { private final Command command = CommandTestFactory.createBuilder().order(BescheidEventListener.CREATE_BESCHEID_ORDER).build(); - @BeforeEach - void init() { - bescheidFeatureProperties.setKielHackathonRoute(true); - } - @Test void shouldCallService() { publisher.publishEvent(CommandCreatedEventTestFactory.withCommand(command)); - verify(service).createBescheid(any()); + verify(attachedItemService).createBescheidDraft(command); } @Test diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java index 1940fb2bf4294d0d48bfab82be1b5550d7986c00..ba29a266aeb99969217d43cee2a15a485b12718a 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java @@ -32,7 +32,6 @@ import de.ozgcloud.bescheid.common.freemarker.TemplateHandler; 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.command.Command; import de.ozgcloud.command.CommandCreatedEventTestFactory; import de.ozgcloud.command.CommandExecutedEvent; @@ -55,12 +54,8 @@ class BescheidEventListenerTest { @Mock private BinaryFileService fileService; @Mock - private NachrichtService nachrichtService; - @Mock private AttachedItemService attachedItemService; @Mock - private BescheidFeatureProperties featureProperties; - @Mock private DocumentService documentService; @Mock @@ -105,77 +100,36 @@ class BescheidEventListenerTest { @Captor private ArgumentCaptor<BescheidCreatedEvent> eventCaptor; - @Nested - class TestKielConfigured { - - @BeforeEach - void init() { - when(featureProperties.isKielHackathonRoute()).thenReturn(true); - } - - @Test - void shouldCallDoCreateBescheidBiz() { - listener.doCreateBescheid(COMMAND); - - verify(listener).doCreateBescheidBiz(COMMAND); - verify(attachedItemService, never()).createBescheidDraft(any()); - } - - @Test - void shouldCallNachrichtService() { - var bescheid = BescheidTestFactory.create(); - doReturn(bescheid).when(listener).doCreateBescheidBiz(any()); - - listener.doCreateBescheid(COMMAND); - - verify(nachrichtService).createNachrichtDraft(bescheid); - } - - @Test - void shouldPublishBescheidCreatedEvent() { - listener.doCreateBescheid(COMMAND); + @Test + void shouldCallCreateBescheidDraft() { + listener.doCreateBescheid(COMMAND); - verify(eventPublisher).publishEvent(eventCaptor.capture()); - assertThat(eventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID); - } + verify(attachedItemService).createBescheidDraft(COMMAND); } - @Nested - class TestNotKielConfigured { - - @Test - void shouldCallCreateBescheidDraft() { - listener.doCreateBescheid(COMMAND); - - verify(attachedItemService).createBescheidDraft(COMMAND); - verify(listener, never()).doCreateBescheidBiz(any()); - } - - @Test - @DisplayName("should publish BescheidCreatedEvent after creating BescheidDraft") - void shouldPublishBescheidCreatedEventWithCommand() { - var createdResource = "item-id"; - when(attachedItemService.createBescheidDraft(any())).thenReturn(createdResource); + @Test + @DisplayName("should publish BescheidCreatedEvent after creating BescheidDraft") + void shouldPublishBescheidCreatedEventWithCommand() { + var createdResource = "item-id"; + when(attachedItemService.createBescheidDraft(any())).thenReturn(createdResource); - listener.doCreateBescheid(COMMAND); + listener.doCreateBescheid(COMMAND); - verify(eventPublisher).publishEvent(eventCaptor.capture()); - assertThat(eventCaptor.getValue().getCommand()).isSameAs(COMMAND); - } + verify(eventPublisher).publishEvent(eventCaptor.capture()); + assertThat(eventCaptor.getValue().getCommand()).isSameAs(COMMAND); + } - @Test - @DisplayName("should publish BescheidCreatedEvent with created resource") - void shouldPublishBescheidCreatedEventWithCreatedResource() { - var createdResource = "item-id"; - when(attachedItemService.createBescheidDraft(any())).thenReturn(createdResource); + @Test + @DisplayName("should publish BescheidCreatedEvent with created resource") + void shouldPublishBescheidCreatedEventWithCreatedResource() { + var createdResource = "item-id"; + when(attachedItemService.createBescheidDraft(any())).thenReturn(createdResource); - listener.doCreateBescheid(COMMAND); + listener.doCreateBescheid(COMMAND); - verify(eventPublisher).publishEvent(eventCaptor.capture()); - assertThat(eventCaptor.getValue().getCreatedResource()).isEqualTo(createdResource); - } + verify(eventPublisher).publishEvent(eventCaptor.capture()); + assertThat(eventCaptor.getValue().getCreatedResource()).isEqualTo(createdResource); } - } @Nested 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 6db0af2e5937ab0084001a0727e0be54689ddac6..c810b402d1b51e1b1cea5017f3fcaf7530c1d690 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -1,6 +1,7 @@ package de.ozgcloud.bescheid; import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.InstanceOfAssertFactories.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -45,7 +46,6 @@ 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; @@ -930,7 +930,7 @@ class BescheidServiceTest { var result = buildPostfachAddress(); assertThat(result).extracting(Vorgang.PostfachAddress.FIELD_IDENTIFIER, MAP) - .containsEntry(NachrichtService.FIELD_POSTFACH_ID, PostfachAddressTestFactory.POSTFACH_ID); + .containsEntry(BescheidService.FIELD_POSTFACH_ID, PostfachAddressTestFactory.POSTFACH_ID); } @Test @@ -971,7 +971,7 @@ class BescheidServiceTest { void shouldSetReplyOption() { var result = buildSendNachrichtCommandBody(); - assertThat(result).containsEntry(NachrichtService.FIELD_REPLY_OPTION, NachrichtService.REPLY_OPTION); + assertThat(result).containsEntry(BescheidService.FIELD_REPLY_OPTION, BescheidService.REPLY_OPTION); } @Test @@ -985,7 +985,7 @@ class BescheidServiceTest { void shouldSetSubject() { var result = buildSendNachrichtCommandBody(); - assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, AttachedItemTestFactory.NACHRICHT_SUBJECT); + assertThat(result).containsEntry(BescheidService.FIELD_SUBJECT, AttachedItemTestFactory.NACHRICHT_SUBJECT); } @Test @@ -999,7 +999,7 @@ class BescheidServiceTest { void shouldSetMailBody() { var result = buildSendNachrichtCommandBody(); - assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, AttachedItemTestFactory.NACHRICHT_TEXT); + assertThat(result).containsEntry(BescheidService.FIELD_MAIL_BODY, AttachedItemTestFactory.NACHRICHT_TEXT); } @Test @@ -1013,7 +1013,7 @@ class BescheidServiceTest { void shouldSetAttachments() { var result = buildSendNachrichtCommandBody(); - assertThat(result).extracting(NachrichtService.FIELD_ATTACHMENTS, LIST).containsExactly(AttachedItemTestFactory.ATTACHMENT); + assertThat(result).extracting(BescheidService.FIELD_ATTACHMENTS, LIST).containsExactly(AttachedItemTestFactory.ATTACHMENT); } @Test @@ -1038,14 +1038,14 @@ class BescheidServiceTest { void shouldSetSubject() { var result = buildSendNachrichtCommandBody(); - assertThat(result).containsEntry(NachrichtService.FIELD_SUBJECT, NachrichtService.SUBJECT); + assertThat(result).containsEntry(BescheidService.FIELD_SUBJECT, BescheidService.SUBJECT); } @Test void shouldSetMailBody() { var result = buildSendNachrichtCommandBody(); - assertThat(result).containsEntry(NachrichtService.FIELD_MAIL_BODY, StringUtils.EMPTY); + assertThat(result).containsEntry(BescheidService.FIELD_MAIL_BODY, StringUtils.EMPTY); } } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/GrpcPostfachNachrichtTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/GrpcPostfachNachrichtTestFactory.java deleted file mode 100644 index c42e9fb32e68ea5a86de3e41e682927c87d77019..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/GrpcPostfachNachrichtTestFactory.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import de.ozgcloud.nachrichten.postfach.GrpcPostfachNachricht; - -public class GrpcPostfachNachrichtTestFactory { - - public static final GrpcPostfachNachricht create() { - return createBuilder().build(); - } - - public static final GrpcPostfachNachricht.Builder createBuilder() { - return GrpcPostfachNachricht.newBuilder() - .setCreatedAt(NachrichtTestFactory.CREATED_AT.toString()) - .setMailBody(NachrichtTestFactory.MAIL_BODY) - .setSubject(NachrichtTestFactory.SUBJECT); - } -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtMapperTest.java deleted file mode 100644 index ac7a466e044dcd7e0c5a95b3a0f1f6e1332e1230..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtMapperTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mapstruct.factory.Mappers; -import org.mockito.InjectMocks; - -class NachrichtMapperTest { - - @InjectMocks - private NachrichtMapper mapper = Mappers.getMapper(NachrichtMapper.class);; - - @Nested - class TestMapToGrpc { - @Test - void shouldMapNachricht() { - var mapped = mapper.mapToGrpc(NachrichtTestFactory.create()); - - assertThat(mapped).usingRecursiveComparison() - .ignoringFields("replyOption_", "memoizedHashCode") - .isEqualTo(GrpcPostfachNachrichtTestFactory.create()); - } - - @Test - void shouldIgnoreMissingFileId() { - var mapped = mapper.mapToGrpc(NachrichtTestFactory.createBuilder().bescheidFileId(null).build()); - - assertThat(mapped.getAttachmentList()).isEmpty(); - } - - @Test - void shouldSetReplyOption() { - var mapped = mapper.mapToGrpc(NachrichtTestFactory.create()); - - assertThat(mapped.getReplyOption()).isEqualTo("FORBIDDEN"); - } - - @Test - void shouldNotMapId() { - var mapped = mapper.mapToGrpc(NachrichtTestFactory.create()); - - assertThat(mapped.getId()).isEmpty(); - } - } - -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtRemoteServiceTest.java deleted file mode 100644 index fb796252a7f562a824b4f1b1e9dd1a323e7fc8ed..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtRemoteServiceTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; -import de.ozgcloud.nachrichten.postfach.GrpcPostfachNachricht; - -class NachrichtRemoteServiceTest { - - @InjectMocks - private NachrichtRemoteService remoteService; - - @Mock - private NachrichtMapper mapper; - - @Nested - class TestSaveDarft { - @Nested - class BuildRequest { - private Nachricht nachricht = NachrichtTestFactory.create(); - private GrpcPostfachNachricht grpcNachricht = GrpcPostfachNachrichtTestFactory.create(); - - @BeforeEach - void initMocks() { - when(mapper.mapToGrpc(any())).thenReturn(grpcNachricht); - } - - @Test - void shouldCallMapper() { - remoteService.buildRequest(nachricht); - - verify(mapper).mapToGrpc(nachricht); - } - - @Test - void shouldSetNachricht() { - var request = remoteService.buildRequest(nachricht); - - assertThat(request.getNachricht()).isSameAs(grpcNachricht); - } - - @Test - void shouldSetVorgangId() { - var request = remoteService.buildRequest(nachricht); - - assertThat(request.getVorgangId()).isEqualTo(VorgangTestFactory.ID.toString()); - } - } - } - -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java deleted file mode 100644 index 47a6694e656de4082a3bdaf7d2e3e799793636f1..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceITCase.java +++ /dev/null @@ -1,36 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; - -import de.ozgcloud.apilib.common.command.OzgCloudCommandService; -import de.ozgcloud.apilib.common.command.grpc.CommandMapper; -import de.ozgcloud.bescheid.BescheidTestFactory; -import de.ozgcloud.common.test.ITCase; - -@ITCase -class NachrichtServiceITCase { - - @Autowired - private NachrichtService service; - @MockBean - private OzgCloudCommandService commandService; - @MockBean - private CommandMapper commandMapper; - - @DisplayName("Build message") - @Nested - class TestBuildMessage { - @Test - void shouldBuildMessage() { - var message = service.buildMessage(BescheidTestFactory.create()); - - assertThat(message).isNotBlank(); - } - } -} \ No newline at end of file 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 deleted file mode 100644 index 5974a286fb170a9c04db124f1b80220f84d66496..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtServiceTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.Optional; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.bescheid.BescheidTestFactory; -import de.ozgcloud.bescheid.common.freemarker.TemplateHandler; -import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; - -class NachrichtServiceTest { - - @Spy - @InjectMocks - private NachrichtService service; - - @Mock - private NachrichtRemoteService remoteService; - @Mock - private TemplateHandler templateHandler; - - @Nested - class TestCreateNachrichtDraft { - - private final Nachricht nachricht = NachrichtTestFactory.create(); - - @Test - void shouldCallRemoteService() { - doReturn(Optional.of(nachricht)).when(service).buildNachricht(any()); - - service.createNachrichtDraft(BescheidTestFactory.create()); - - verify(remoteService).saveDraft(nachricht); - } - - @Nested - class BuildNachricht { - - @BeforeEach - void init() { - doReturn(NachrichtTestFactory.MAIL_BODY).when(service).buildMessage(any()); - } - - @Test - void shouldFillMailBody() { - var nachricht = service.buildNachricht(BescheidTestFactory.create()).get(); - - assertThat(nachricht.getMailBody()).isEqualTo(NachrichtTestFactory.MAIL_BODY); - } - - @Test - void shouldSetSubject() { - var nachricht = service.buildNachricht(BescheidTestFactory.create()).get(); - - assertThat(nachricht.getSubject()).isEqualTo(BescheidTestFactory.NACHRICHT_SUBJECT); - } - - @Test - void shouldSetDefaultSubject() { - var bescheid = BescheidTestFactory.createBuilder().nachrichtSubject(Optional.empty()).build(); - - var nachricht = service.buildNachricht(bescheid).get(); - - assertThat(nachricht.getSubject()).isEqualTo(NachrichtService.SUBJECT); - } - - @Test - void shouldSetUser() { - var nachricht = service.buildNachricht(BescheidTestFactory.create()).get(); - - assertThat(nachricht.getCreatedBy()).isEqualTo(BescheidTestFactory.CREATED_BY); - } - - @Test - void shouldSetVorgangId() { - var nachricht = service.buildNachricht(BescheidTestFactory.create()).get(); - - assertThat(nachricht.getVorgangId()).isEqualTo(VorgangTestFactory.ID); - } - } - } - - @Nested - class TestBuildMessage { - @Test - void shouldUseTextFromBescheid() { - var message = service.buildMessage(BescheidTestFactory.create()); - - assertThat(message).isEqualTo(BescheidTestFactory.NACHRICHT_TEXT); - } - - @Test - void shouldUseDefaultTemplate() { - doReturn("FROM_TEMPLATE").when(templateHandler).fillTemplate(any(), any()); - - var message = service.buildMessage(BescheidTestFactory.createBuilder().nachrichtText(Optional.empty()).build()); - - assertThat(message).isEqualTo("FROM_TEMPLATE"); - } - } -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtTestFactory.java deleted file mode 100644 index a82751dcc7ac14b7ba16a677d2fd2ad3476e73a9..0000000000000000000000000000000000000000 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/nachricht/NachrichtTestFactory.java +++ /dev/null @@ -1,32 +0,0 @@ -package de.ozgcloud.bescheid.nachricht; - -import java.time.ZonedDateTime; -import java.util.UUID; - -import de.ozgcloud.bescheid.UserId; -import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; - -public class NachrichtTestFactory { - - public static final NachrichtId ID = NachrichtId.from(UUID.randomUUID().toString()); - - public static final String SUBJECT = "subject of message"; - public static final String MAIL_BODY = "Lorem ipsum"; - - public static final UserId CREATED_BY = UserId.from(UUID.randomUUID().toString()); - public static final ZonedDateTime CREATED_AT = ZonedDateTime.now().withNano(0); - - public static Nachricht create() { - return createBuilder().build(); - } - - public static Nachricht.NachrichtBuilder createBuilder() { - return Nachricht.builder() - .id(ID) - .vorgangId(VorgangTestFactory.ID) - .subject(SUBJECT) - .mailBody(MAIL_BODY) - .createdBy(CREATED_BY) - .createdAt(CREATED_AT); - } -} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java index 7f7ef749025025cc565b4b04b6a5db8183eb3fb1..5d01a8b7573c16643a61e602ff06bc94aa0cd155 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/PostfachAddressTestFactory.java @@ -26,12 +26,13 @@ package de.ozgcloud.bescheid.vorgang; import java.util.Map; import java.util.UUID; -import de.ozgcloud.bescheid.nachricht.NachrichtService; import de.ozgcloud.bescheid.vorgang.Vorgang.PostfachAddress.PostfachAddressBuilder; public class PostfachAddressTestFactory { public static final String POSTFACH_ID = UUID.randomUUID().toString(); + public static final String FIELD_POSTFACH_ID = "postfachId"; + public static final int TYPE = 1; public static final String VERSION = "1.0"; @@ -43,6 +44,6 @@ public class PostfachAddressTestFactory { return Vorgang.PostfachAddress.builder() .type(TYPE) .version(VERSION) - .identifier(Map.of(NachrichtService.FIELD_POSTFACH_ID, POSTFACH_ID)); + .identifier(Map.of(FIELD_POSTFACH_ID, POSTFACH_ID)); } } diff --git a/pom.xml b/pom.xml index 1b9b61485236e8343cc4790763c73dde40c7512f..0a20e3d2ec89a89d6e7103b2e53461e7447187ba 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager</name> <packaging>pom</packaging> diff --git a/vorgang-manager-base/pom.xml b/vorgang-manager-base/pom.xml index 01a891cafa5c98d4a5bf87091817403b5c6a9f88..7b7dee119eeb34d56968792c0c3930487b9c2cde 100644 --- a/vorgang-manager-base/pom.xml +++ b/vorgang-manager-base/pom.xml @@ -6,13 +6,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath /> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-base</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager Base</name> diff --git a/vorgang-manager-command/pom.xml b/vorgang-manager-command/pom.xml index 1427d6e703f39962af7b6136e3319e01c87022e2..7d14579dc40eaa46841c7593ca57835504aeff36 100644 --- a/vorgang-manager-command/pom.xml +++ b/vorgang-manager-command/pom.xml @@ -4,13 +4,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath/> </parent> <groupId>de.ozgcloud.command</groupId> <artifactId>command-manager</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Command Manager</name> <properties> diff --git a/vorgang-manager-interface/pom.xml b/vorgang-manager-interface/pom.xml index c64435edbd2a453b7b75be55b0647d46ac6d644b..1b23a9b26060e4215164dea88a39c6d4006130c4 100644 --- a/vorgang-manager-interface/pom.xml +++ b/vorgang-manager-interface/pom.xml @@ -30,13 +30,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath/> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-interface</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager gRPC Interface</name> <description>Interface (gRPC) for Vorgang Manager Server</description> diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index 7f5afda4442c835adad94df03609ac5ec3a608ad..943e8bddc6fb6c184fbf885a7b450c0f980a8fbd 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -32,13 +32,13 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath /> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-server</artifactId> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <name>OZG-Cloud Vorgang Manager Server</name> <description>Server Implementierung des VorgangManagers</description> @@ -53,11 +53,11 @@ <zufi-manager-interface.version>1.0.0</zufi-manager-interface.version> <user-manager-interface.version>2.1.0</user-manager-interface.version> - <bescheid-manager.version>1.15.0-SNAPSHOT</bescheid-manager.version> + <bescheid-manager.version>1.16.0-SNAPSHOT</bescheid-manager.version> <processor-manager.version>0.4.1</processor-manager.version> - <nachrichten-manager.version>2.10.0-SNAPSHOT</nachrichten-manager.version> + <nachrichten-manager.version>2.10.0</nachrichten-manager.version> <ozgcloud-starter.version>0.10.0</ozgcloud-starter.version> - <notification-manager.version>2.8.0</notification-manager.version> + <notification-manager.version>2.9.0</notification-manager.version> <collaboration-manager.version>0.1.0-SNAPSHOT</collaboration-manager.version> <zip.version>2.11.1</zip.version> diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M011_SetDefaultCollaborationLevel.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M011_SetDefaultCollaborationLevel.java new file mode 100644 index 0000000000000000000000000000000000000000..b87ca0ed026919f0c81ea26687e1eae8f82efdd5 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/migration/M011_SetDefaultCollaborationLevel.java @@ -0,0 +1,39 @@ +package de.ozgcloud.vorgang.common.migration; + +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; + +import io.mongock.api.annotations.ChangeUnit; +import io.mongock.api.annotations.Execution; +import io.mongock.api.annotations.RollbackExecution; + +@ChangeUnit(id = "2024-07-29 17:30:00 OZG-6259", order = "M011", author = "mkuester", runAlways = true) +public class M011_SetDefaultCollaborationLevel { // NOSONAR + + private static final String VORGANG_COLLECTION = "vorgang"; + + static final String HEADER_FIELD = "header"; + static final String COLLABORATION_LEVEL_FIELD = "collaborationLevel"; + static final String HEADER_COLLABORATION_LEVEL_FIELD = HEADER_FIELD + "." + COLLABORATION_LEVEL_FIELD; + private static final int DEFAULT_COLLABORATION_LEVEL = 0; + + @Execution + public void doMigration(MongoTemplate template) { + template.updateMulti(createFilterQuery(), createUpdate(), VORGANG_COLLECTION); + } + + private Query createFilterQuery() { + return new Query(Criteria.where(HEADER_COLLABORATION_LEVEL_FIELD).exists(false)); + } + + private Update createUpdate() { + return new Update().set(HEADER_COLLABORATION_LEVEL_FIELD, DEFAULT_COLLABORATION_LEVEL); + } + + @RollbackExecution + public void rollback() { + // kein rollback implementiert + } +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M011_SetDefaultCollaborationLevelITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M011_SetDefaultCollaborationLevelITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..9b5b8b9a499aaf17baf73c073dbf0f75ef7cc694 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/migration/M011_SetDefaultCollaborationLevelITCase.java @@ -0,0 +1,142 @@ +package de.ozgcloud.vorgang.common.migration; + +import static org.assertj.core.api.Assertions.*; + +import org.bson.Document; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Query; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.common.test.DataITCase; + +@DataITCase +class M011_SetDefaultCollaborationLevelITCase { + + private final M011_SetDefaultCollaborationLevel migration = new M011_SetDefaultCollaborationLevel(); + + private final String nameField = "name"; + private final String nameFieldValue = LoremIpsum.getInstance().getWords(1); + + private final String organisationsEinheitField = "organisationsEinheitId"; + private final String organisationsEinheitFieldValue = LoremIpsum.getInstance().getWords(1); + + @Autowired + private MongoTemplate template; + @Autowired + private MigrationDbTestUtils dbTestUtils; + + @DisplayName("Do migration") + @Nested + class TestDoMigration { + + @BeforeEach + void mock() { + dbTestUtils.dropVorgangCollection(); + } + + @DisplayName("on missing collaboration level") + @Nested + class TestOnMissingCollaborationLevel { + + @BeforeEach + void initVorgang() { + dbTestUtils.saveVorgang(createVorgangWithName()); + } + + @Test + void shouldSetDefaultCollaborationLevel() { + migration.doMigration(template); + + assertThat(getVorgangHeader()).containsEntry(M011_SetDefaultCollaborationLevel.COLLABORATION_LEVEL_FIELD, 0); + } + + @Test + void shouldKeepVorgangData() { + migration.doMigration(template); + + assertThat(getVorgang()).containsEntry(nameField, nameFieldValue); + } + + @Test + void shouldKeepHeaderData() { + migration.doMigration(template); + + assertThat(getVorgangHeader()).containsEntry(organisationsEinheitField, + organisationsEinheitFieldValue); + } + } + + @DisplayName("on existing collaboration level") + @Nested + class TestOnExistingCollaborationLevel { + + @BeforeEach + void initVorgang() { + dbTestUtils.saveVorgang(createVorgangWithCollaborationLevel()); + } + + @Test + void shouldKeepCollaborationLevel() { + migration.doMigration(template); + + assertThat(getVorgangHeader()).containsEntry(M011_SetDefaultCollaborationLevel.COLLABORATION_LEVEL_FIELD, 1); + } + + @Test + void shouldKeepVorgangData() { + migration.doMigration(template); + + assertThat(getVorgang()).containsEntry(nameField, nameFieldValue); + } + + @Test + void shouldKeepHeaderData() { + migration.doMigration(template); + + assertThat(getVorgangHeader()).containsEntry(organisationsEinheitField, + organisationsEinheitFieldValue); + } + } + + private Document createVorgangWithCollaborationLevel() { + var vorgang = createVorgangWithName(); + vorgang.append(M011_SetDefaultCollaborationLevel.HEADER_FIELD, createHeaderWithCollaborationLevel()); + return vorgang; + } + + private Document createHeaderWithCollaborationLevel() { + var header = createHeaderWithOrganisationsEinheitId(); + header.append(M011_SetDefaultCollaborationLevel.COLLABORATION_LEVEL_FIELD, 1); + return header; + } + + private Document createVorgangWithName() { + var vorgang = new Document(); + vorgang.append(nameField, nameFieldValue); + vorgang.append(M011_SetDefaultCollaborationLevel.HEADER_FIELD, createHeaderWithOrganisationsEinheitId()); + return vorgang; + } + + private Document createHeaderWithOrganisationsEinheitId() { + var header = new Document(); + header.append(organisationsEinheitField, organisationsEinheitFieldValue); + return header; + } + + private Document getVorgangHeader() { + return (Document) getVorgang().get(M011_SetDefaultCollaborationLevel.HEADER_FIELD); + } + + private Document getVorgang() { + var vorgaenge = dbTestUtils.findVorgang(new Query()); + assertThat(vorgaenge).hasSize(1); + return vorgaenge.get(0); + } + } +} \ No newline at end of file diff --git a/vorgang-manager-utils/pom.xml b/vorgang-manager-utils/pom.xml index 8e78361b0e1cae1ecef07ee4a41cf1e1ed1b0315..c65c6998164b07007eff874d6ec6bd307c31733f 100644 --- a/vorgang-manager-utils/pom.xml +++ b/vorgang-manager-utils/pom.xml @@ -30,14 +30,14 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-dependencies</artifactId> - <version>4.3.0</version> + <version>4.3.1</version> <relativePath/> </parent> <groupId>de.ozgcloud.vorgang</groupId> <artifactId>vorgang-manager-utils</artifactId> <name>OZG-Cloud Vorgang Manager Utils</name> - <version>2.11.0-SNAPSHOT</version> + <version>2.12.0-SNAPSHOT</version> <properties> <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version>