diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java index 247277431b87bdb7fa32e063f090e427db734f6a..6fdcbf203b8b0387fb9bc7c99cb56ca425ef3a41 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/ArchiveManagerConfiguration.java @@ -58,7 +58,6 @@ public class ArchiveManagerConfiguration { public static final String CALL_CONTEXT_PROVIDER_NAME = "archive_CallContextProvider"; public static final String CALL_CONTEXT_MAPPER_NAME = "archive_CallContextMapper"; - public static final String CLIENT_ATTRIBUTE_SERVICE_NAME = "archive_ClientAttributeService"; public static final String OZGCLOUD_CLIENT_ATTRIBUTE_SERVICE_NAME = "archive_OzgCloudClientAttributeService"; public static final String KOMMENTAR_SERVICE_NAME = "archive_KommentarService"; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java index d2577b63c32cc92f7336fe28838f564bacc7ffec..a9f8f1597ecea5baf104af9ec71cd9df88ed9157 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveEventListener.java @@ -34,7 +34,6 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.stereotype.Component; import de.ozgcloud.archive.ArchiveManagerConfiguration; -import de.ozgcloud.archive.attributes.ClientAttributeService; import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.callcontext.CurrentUserService; import de.ozgcloud.archive.common.command.CommandService; @@ -69,13 +68,12 @@ class ArchiveEventListener { @Qualifier(ArchiveManagerConfiguration.CURRENT_USER_SERVICE_NAME) // NOSONAR private final CurrentUserService currentUserService; - @Qualifier(ArchiveManagerConfiguration.CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR - private final ClientAttributeService clientAttributeService; - @Qualifier(ArchiveManagerConfiguration.VORGANG_SERVICE_NAME) // NOSONAR private final VorgangService vorgangService; private final ApplicationEventPublisher eventPublisher; + + @Qualifier(ArchiveManagerConfiguration.COMMAND_SERVICE_NAME) // NOSONAR private final CommandService commandService; private final ArchiveService archiveService; @@ -85,7 +83,7 @@ class ArchiveEventListener { } void doLockVorgang(Command command) { - clientAttributeService.setVorgangArchiving(command.getVorgangId()); + archiveService.setVorgangArchiving(command.getVorgangId()); vorgangService.lockVorgang(command); } diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java index 5f2bdc23c35bde490aefe329f1a12db1799b4eb6..63fca7efddfabb6dd7e6e108b5b6abc8aea1084e 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/archivierung/ArchiveService.java @@ -7,8 +7,15 @@ import java.util.UUID; import jakarta.activation.DataHandler; import jakarta.activation.FileDataSource; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; +import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; +import de.ozgcloud.archive.ArchiveManagerConfiguration; +import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.archive.export.ExportService; import de.ozgcloud.command.Command; @@ -20,8 +27,25 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor class ArchiveService { + public static final String ATTRIBUTE_NAME_ANTRAG_ARCHIVING = "ARCHIVING"; private final XtaService xtaService; private final ExportService exportService; + @Qualifier(ArchiveManagerConfiguration.OZGCLOUD_CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR + private final OzgCloudClientAttributeService ozgCloudAttributesService; + private final OzgCloudVorgangIdMapper vorgangIdMapper; + + public void setVorgangArchiving(String vorgangId) { + ozgCloudAttributesService.setClientAttribute(buildBooleanClientAttribute(true), vorgangIdMapper.fromString(vorgangId)); + } + + OzgCloudBooleanClientAttribute buildBooleanClientAttribute(boolean isArchiving) { + return OzgCloudBooleanClientAttribute.builder() + .clientName(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME) + .access(OzgCloudAccessPermission.READ_ONLY) + .attributeName(ATTRIBUTE_NAME_ANTRAG_ARCHIVING) + .value(isArchiving) + .build(); + } public void archiveVorgang(Command command) { xtaService.sendXdomeaFile(buildXdomeaXtaFile(command.getVorgangId())); diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java deleted file mode 100644 index 21d24f804eb7d430b399243e9af5baaa8affecb8..0000000000000000000000000000000000000000 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/attributes/ClientAttributeService.java +++ /dev/null @@ -1,61 +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.archive.attributes; - -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; - -import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; -import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; -import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; -import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; -import de.ozgcloud.archive.ArchiveManagerConfiguration; -import de.ozgcloud.archive.common.callcontext.CallContextUser; -import lombok.RequiredArgsConstructor; - -@Service(ArchiveManagerConfiguration.CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR -@RequiredArgsConstructor -public class ClientAttributeService { - - public static final String ATTRIBUTE_NAME_ANTRAG_ARCHIVING = "ARCHIVING"; - - @Qualifier(ArchiveManagerConfiguration.OZGCLOUD_CLIENT_ATTRIBUTE_SERVICE_NAME) // NOSONAR - private final OzgCloudClientAttributeService ozgCloudAttributesService; - - private final OzgCloudVorgangIdMapper vorgangIdMapper; - - public void setVorgangArchiving(String vorgangId) { - ozgCloudAttributesService.setClientAttribute(buildBooleanClientAttribute(true), vorgangIdMapper.fromString(vorgangId)); - } - - OzgCloudBooleanClientAttribute buildBooleanClientAttribute(boolean isArchiving) { - return OzgCloudBooleanClientAttribute.builder() - .clientName(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME) - .access(OzgCloudAccessPermission.READ_ONLY) - .attributeName(ATTRIBUTE_NAME_ANTRAG_ARCHIVING) - .value(isArchiving) - .build(); - } - -} diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java index 4648346324ae981c197dcab385fa5d7422fcc69d..2e8379ee8653f773140c170fa5e453d706b0c9b0 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveEventListenerTest.java @@ -40,7 +40,6 @@ import org.mockito.Spy; import org.springframework.context.ApplicationEventPublisher; import org.springframework.security.core.context.SecurityContext; -import de.ozgcloud.archive.attributes.ClientAttributeService; import de.ozgcloud.archive.common.callcontext.CurrentUserService; import de.ozgcloud.archive.common.command.CommandService; import de.ozgcloud.archive.common.errorhandling.TimeoutException; @@ -63,8 +62,6 @@ class ArchiveEventListenerTest { @Mock private CurrentUserService currentUserService; @Mock - private ClientAttributeService clientAttributeService; - @Mock private VorgangService vorgangService; @Mock private ApplicationEventPublisher eventPublisher; @@ -103,7 +100,7 @@ class ArchiveEventListenerTest { void shouldCallSetVorgangArchiving() { doLockVorgang(); - verify(clientAttributeService).setVorgangArchiving(CommandTestFactory.VORGANG_ID); + verify(archiveService).setVorgangArchiving(CommandTestFactory.VORGANG_ID); } @Test diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java index bd22a5275dec77debc1b81754701caa196ee7b6a..4e1213a6c62b4966f2d1299ef6fa42b02dff2db5 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/ArchiveServiceTest.java @@ -17,11 +17,18 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedConstruction; import org.mockito.Spy; +import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; +import de.ozgcloud.apilib.client_attribute.OzgCloudClientAttributeService; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; +import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.archive.export.ExportService; import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; @@ -42,6 +49,76 @@ class ArchiveServiceTest { private ExportService exportService; @Mock private XtaService xtaService; + @Mock + private OzgCloudClientAttributeService ozgCloudAttributesService; + @Mock + private OzgCloudVorgangIdMapper vorgangIdMapper; + + @Nested + class TestSetVorgangArchiving { + + @Test + void shouldBuildBooleanClientAttribute() { + setVorgangArchiving(); + + verify(service).buildBooleanClientAttribute(true); + } + + @Test + void shouldCallVorgangIdMapper() { + setVorgangArchiving(); + + verify(vorgangIdMapper).fromString(VorgangWithEingangTestFactory.ID); + } + + @Test + void shouldSetClientAttribute() { + var attribute = OzgCloudBooleanClientAttributeTestFactory.create(); + doReturn(attribute).when(service).buildBooleanClientAttribute(true); + when(vorgangIdMapper.fromString(VorgangWithEingangTestFactory.ID)).thenReturn(OzgCloudVorgangId.from(VorgangWithEingangTestFactory.ID)); + + setVorgangArchiving(); + + verify(ozgCloudAttributesService).setClientAttribute(attribute, OzgCloudVorgangId.from(VorgangWithEingangTestFactory.ID)); + } + + private void setVorgangArchiving() { + service.setVorgangArchiving(VorgangWithEingangTestFactory.ID); + } + } + + @Nested + class TestBuildBooleanClientAttribute { + + @Test + void shouldSetClientName() { + var attribute = service.buildBooleanClientAttribute(false); + + assertThat(attribute.getClientName()).isEqualTo(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME); + } + + @Test + void shouldSetAccess() { + var attribute = service.buildBooleanClientAttribute(false); + + assertThat(attribute.getAccess()).isEqualTo(OzgCloudAccessPermission.READ_ONLY); + } + + @Test + void shouldSetAttributeName() { + var attribute = service.buildBooleanClientAttribute(false); + + assertThat(attribute.getAttributeName()).isEqualTo(ArchiveService.ATTRIBUTE_NAME_ANTRAG_ARCHIVING); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldSetValue(boolean isArchiving) { + var attribute = service.buildBooleanClientAttribute(isArchiving); + + assertThat(attribute.getValue()).isEqualTo(isArchiving); + } + } @Nested class TestArchiveVorgang { diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..954b23b8ace8a76a6951b1e091d090c8c233fee9 --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/archivierung/OzgCloudBooleanClientAttributeTestFactory.java @@ -0,0 +1,29 @@ +package de.ozgcloud.archive.archivierung; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.apilib.client_attribute.OzgCloudAccessPermission; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute; +import de.ozgcloud.apilib.client_attribute.OzgCloudBooleanClientAttribute.OzgCloudBooleanClientAttributeBuilder; +import de.ozgcloud.archive.common.callcontext.CallContextUserTestFactory; + +public class OzgCloudBooleanClientAttributeTestFactory { + + private static final boolean VALUE = true; + private static final String ATTRIBUTE_NAME = LoremIpsum.getInstance().getWords(1); + private static final OzgCloudAccessPermission ACCESS = OzgCloudAccessPermission.READ_ONLY; + private static final String CLIENT_NAME = CallContextUserTestFactory.CLIENT_NAME; + + public static OzgCloudBooleanClientAttribute create() { + return createBuilder().build(); + } + + private static OzgCloudBooleanClientAttributeBuilder<?, ?> createBuilder() { + return OzgCloudBooleanClientAttribute.builder() + .clientName(CLIENT_NAME) + .access(ACCESS) + .attributeName(ATTRIBUTE_NAME) + .value(VALUE); + } + +}