diff --git a/pom.xml b/pom.xml index 38e27be005d52a64273c1b253fb90872d7149a6d..efa0749c1c0673eb0fcc771e31910132e56520a4 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ <parent> <groupId>de.ozgcloud.common</groupId> <artifactId>ozgcloud-common-parent</artifactId> - <version>4.9.0</version> + <version>4.11.0</version> </parent> <groupId>de.ozgcloud.eingang</groupId> @@ -44,8 +44,8 @@ <packaging>jar</packaging> <properties> - <eingang-manager.version>2.18.0</eingang-manager.version> - <formsolutions-semantik.version>2.18.0</formsolutions-semantik.version> + <eingang-manager.version>2.18.1</eingang-manager.version> + <formsolutions-semantik.version>2.18.1</formsolutions-semantik.version> <jaxb3-plugin.version>0.15.0</jaxb3-plugin.version> <xmlschema.version>2.3.0</xmlschema.version> diff --git a/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java b/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java index 1f7577426808fb799db0ff3292ad43898cf652c3..5d3f5c5c1b07eadcd409250c56aa99476990d115 100644 --- a/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java +++ b/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java @@ -31,7 +31,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; @@ -43,6 +43,7 @@ import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; @Component +@RequiredArgsConstructor class FormSolutionsRequestMapper { static final TypeReference<Map<String, Object>> VALUE_TYPE_REF = new TypeReference<Map<String, Object>>() { }; @@ -55,10 +56,8 @@ class FormSolutionsRequestMapper { public static final String FORMDATA_FIELD_POSTKORBHANDLE = "postkorbhandle"; static final String FORMDATA_FIELD_TRANSACTION_ID = "transactionId"; - @Autowired - private FormSolutionsAttachmentsMapper attachmentMapper; - @Autowired - private ObjectMapper objectMapper; + private final FormSolutionsAttachmentsMapper attachmentMapper; + private final ObjectMapper objectMapper; public FormData map(File jsonFile) { var eingang = mapEingang(jsonFile); diff --git a/src/main/java/de/ozgcloud/eingang/formsolutions/SemantikAdapterConfiguration.java b/src/main/java/de/ozgcloud/eingang/formsolutions/SemantikAdapterConfiguration.java deleted file mode 100644 index 82cef5387fb50abe6464c4ca4e776b2786673ba8..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/eingang/formsolutions/SemantikAdapterConfiguration.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2022 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.eingang.formsolutions; - -import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; -import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class SemantikAdapterConfiguration { - - @Bean - public EngineBasedSemantikAdapter engineBasedSemantikAdapter() { - return new FormSolutionsEngineBasedAdapter(); - } -} \ No newline at end of file diff --git a/src/main/java/de/ozgcloud/eingang/formsolutions/SendFormEndpoint.java b/src/main/java/de/ozgcloud/eingang/formsolutions/SendFormEndpoint.java index 3610ca6df42aa74792df1d458c0088c88289ae56..d00eea0b410bf83899af1b67c127466a27f8eef8 100644 --- a/src/main/java/de/ozgcloud/eingang/formsolutions/SendFormEndpoint.java +++ b/src/main/java/de/ozgcloud/eingang/formsolutions/SendFormEndpoint.java @@ -27,9 +27,10 @@ import java.io.File; import java.util.UUID; import java.util.function.Supplier; +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.logging.log4j.CloseableThreadContext; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ws.server.endpoint.annotation.Endpoint; import org.springframework.ws.server.endpoint.annotation.PayloadRoot; import org.springframework.ws.server.endpoint.annotation.RequestPayload; @@ -37,18 +38,16 @@ import org.springframework.ws.server.endpoint.annotation.ResponsePayload; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.eingang.semantik.SemantikAdapter; -import lombok.extern.log4j.Log4j2; @Endpoint @Log4j2 +@RequiredArgsConstructor public class SendFormEndpoint { public static final String JSON_FIELD = "json"; - @Autowired - private FormSolutionsRequestMapper requestMapper; - @Autowired - private SemantikAdapter semantikAdapter; + private final FormSolutionsRequestMapper requestMapper; + private final SemantikAdapter semantikAdapter; private static final String REQUEST_ID_KEY = "requestId"; diff --git a/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperITCase.java b/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperITCase.java index a77c02ad903a5d8f5df904033a731db9f74277ec..dbacda8a8aae670992e1084fd29bdc6ead0df799 100644 --- a/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperITCase.java +++ b/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperITCase.java @@ -24,18 +24,19 @@ package de.ozgcloud.eingang.formsolutions; import static de.ozgcloud.eingang.common.formdata.FormSolutionsTestFactory.*; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.io.InputStream; import java.util.List; import java.util.Map; +import lombok.SneakyThrows; import org.assertj.core.api.ObjectAssert; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.test.TestUtils; @@ -43,7 +44,7 @@ import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter; -import lombok.SneakyThrows; + @SpringBootTest @ActiveProfiles({ "local", "itcase" }) @@ -52,7 +53,7 @@ class FormSolutionsRequestMapperITCase { private static final String COMPONENTS = "components"; private static final String PANELS = "panels"; - @SpyBean + @MockitoSpyBean private FormSolutionsRequestMapper mapper; @Nested diff --git a/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java b/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java index bbae0375f29ff23f9c5b93ffcf0843c16762689c..419829e31cefee60423364da10038bc67511c403 100644 --- a/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java +++ b/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java @@ -23,19 +23,15 @@ */ package de.ozgcloud.eingang.formsolutions; -import static de.ozgcloud.eingang.common.formdata.FormSolutionsTestFactory.*; -import static de.ozgcloud.eingang.formsolutions.FormSolutionsRequestMapper.*; -import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - import java.io.File; import java.io.InputStream; import java.util.Collections; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.SneakyThrows; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -47,15 +43,19 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory; -import lombok.SneakyThrows; + +import static de.ozgcloud.eingang.common.formdata.FormSolutionsTestFactory.*; +import static de.ozgcloud.eingang.formsolutions.FormSolutionsRequestMapper.*; +import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapter.IDENTIFIER_KEY; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; class FormSolutionsRequestMapperTest { @@ -108,7 +108,7 @@ class FormSolutionsRequestMapperTest { @Test @SneakyThrows - void shouldHandleJsonException() throws JsonMappingException, JsonProcessingException { + void shouldHandleJsonException() throws JsonProcessingException { doThrow(JsonProcessingException.class).when(objectMapper).readValue(any(InputStream.class), eq(FormSolutionsEingang.class)); assertThatThrownBy(() -> mapper.mapEingang(simpleJsonFile)).isInstanceOf(TechnicalException.class); @@ -134,21 +134,21 @@ class FormSolutionsRequestMapperTest { void shouldContainPanelIdentifier() { var eingang = mapper.mapEingang(simpleJsonFile); - assertThat(getPanels(eingang).get(0)).containsEntry(IDENTIFIER_KEY, PANEL_ID); + assertThat(getPanels(eingang).getFirst()).containsEntry(IDENTIFIER_KEY, PANEL_ID); } @Test void shouldContainPanelComponets() { var eingang = mapper.mapEingang(simpleJsonFile); - assertThat(getPanels(eingang).get(0).get(COMPONENTS)).isNotNull(); + assertThat(getPanels(eingang).getFirst().get(COMPONENTS)).isNotNull(); } @Test void shouldContainTextComponets() { var eingang = mapper.mapEingang(simpleJsonFile); - assertThat(getComponents(eingang).get(0)) + assertThat(getComponents(eingang).getFirst()) .containsEntry(IDENTIFIER_KEY, COMPONENT_ID) .containsEntry(STRING_VALUE, COMPONENT_VALUE); } @@ -168,14 +168,14 @@ class FormSolutionsRequestMapperTest { void shouldContainGroup() { var eingang = mapper.mapEingang(nestedComponenetJsonFile); - assertThat(getComponents(eingang).get(0)).containsEntry(IDENTIFIER_KEY, OBJEKTGRUPPE_0); + assertThat(getComponents(eingang).getFirst()).containsEntry(IDENTIFIER_KEY, OBJEKTGRUPPE_0); } @Test void shouldContainDateField() { var eingang = mapper.mapEingang(nestedComponenetJsonFile); - assertThat(getNestedComponents(eingang).get(0)) + assertThat(getNestedComponents(eingang).getFirst()) .containsEntry(IDENTIFIER_KEY, DATE_COMPONENT_ID) .containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE); } @@ -184,12 +184,12 @@ class FormSolutionsRequestMapperTest { @SuppressWarnings("unchecked") private List<Map<String, Object>> getComponents(FormSolutionsEingang eingang) { - return (List<Map<String, Object>>) getPanels(eingang).get(0).get(COMPONENTS); + return (List<Map<String, Object>>) getPanels(eingang).getFirst().get(COMPONENTS); } @SuppressWarnings("unchecked") private List<Map<String, Object>> getNestedComponents(FormSolutionsEingang eingang) { - return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(eingang).get(0).get(COMPONENTS)).get(0).get(COMPONENTS); + return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(eingang).getFirst().get(COMPONENTS)).getFirst().get(COMPONENTS); } @SuppressWarnings("unchecked") diff --git a/src/test/java/de/ozgcloud/eingang/formsolutions/FormsolutionsITCase.java b/src/test/java/de/ozgcloud/eingang/formsolutions/FormsolutionsITCase.java index 58fff42aa45507c974b521813b3901e68f1d1af5..f3db3f6d8747b99621ddfab5e59334976991a8dd 100644 --- a/src/test/java/de/ozgcloud/eingang/formsolutions/FormsolutionsITCase.java +++ b/src/test/java/de/ozgcloud/eingang/formsolutions/FormsolutionsITCase.java @@ -23,12 +23,15 @@ */ package de.ozgcloud.eingang.formsolutions; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; import java.util.List; +import io.grpc.Channel; +import io.grpc.stub.CallStreamObserver; +import io.grpc.stub.ClientResponseObserver; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -38,9 +41,9 @@ import org.mockito.Mock; import org.mockito.verification.Timeout; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.util.ReflectionTestUtils; import de.ozgcloud.common.test.TestUtils; @@ -52,19 +55,16 @@ import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileResponse; import de.ozgcloud.vorgang.vorgang.GrpcCreateVorgangRequest; import de.ozgcloud.vorgang.vorgang.GrpcCreateVorgangResponse; import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; -import io.grpc.Channel; -import io.grpc.stub.CallStreamObserver; -import io.grpc.stub.ClientResponseObserver; @SpringBootTest @DirtiesContext @ActiveProfiles({ "local", "itcase" }) -public class FormsolutionsITCase { +class FormsolutionsITCase { @Autowired private SendFormEndpoint endpoint; - @MockBean + @MockitoBean private VorgangManagerServerResolver resolver; @Mock @@ -110,9 +110,9 @@ public class FormsolutionsITCase { void shouldContainZustaendigeStelle() { new Thread(() -> endpoint.receiveForm(request)).start(); - var request = getCreateVorgangRequest(); + var vorgangRequest = getCreateVorgangRequest(); - assertThat(request.getEingang().getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo("5678"); + assertThat(vorgangRequest.getEingang().getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo("5678"); } private GrpcCreateVorgangRequest getCreateVorgangRequest() { @@ -151,7 +151,7 @@ public class FormsolutionsITCase { var requests = getFileRequests(); - var contentType = requests.get(0).getMetadata().getContentType(); + var contentType = requests.getFirst().getMetadata().getContentType(); assertThat(contentType).isEqualTo("application/pdf"); } @@ -161,7 +161,7 @@ public class FormsolutionsITCase { var requests = getFileRequests(); - var size = requests.get(0).getMetadata().getSize(); + var size = requests.getFirst().getMetadata().getSize(); assertThat(size).isEqualTo(6788); } diff --git a/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java b/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java index 6cb2e26aeb6c724cd9ec4c102303467b7be75664..5ccfa9459ce6bfd236ec2d345082d5b924abef92 100644 --- a/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java +++ b/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java @@ -23,13 +23,15 @@ */ package de.ozgcloud.eingang.formsolutions; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import java.nio.file.Files; import java.util.Optional; +import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -39,33 +41,32 @@ import org.mockito.Captor; import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; import de.ozgcloud.eingang.router.VorgangRemoteService; -import lombok.SneakyThrows; @ActiveProfiles({ "local", "itcase" }) @SpringBootTest class SendFormEndpointITCase { - private final static String FILE_BASE_PATH = "classpath:formular/"; + private static final String FILE_BASE_PATH = "classpath:formular/"; - private final static String FORMULAR_JSON = "RequestJsonContent.json"; - private final static String FORMULAR_POSTFACH_ID = "51522620-03d2-4507-b1f0-08d86920efed"; + private static final String FORMULAR_JSON = "RequestJsonContent.json"; + private static final String FORMULAR_POSTFACH_ID = "51522620-03d2-4507-b1f0-08d86920efed"; @Autowired private ApplicationContext applicationContext; - @SpyBean + @MockitoSpyBean private SendFormEndpoint endpoint; - @MockBean + @MockitoBean private VorgangRemoteService vorgangRemoteService; @Captor