diff --git a/pom.xml b/pom.xml index 0a7a5bd184a4a38bebdbc4a8ab427f1465484eca..e8c8ec64c40f1795975863be8bc7a4fe76ef4549 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,6 @@ <jaxb2-plugin.version>0.15.2</jaxb2-plugin.version> <jaxb3-plugin.version>0.15.0</jaxb3-plugin.version> <mojo-jaxb2-plugin.version>3.1.0</mojo-jaxb2-plugin.version> - <grpcmock.version>0.13.0</grpcmock.version> </properties> <dependencyManagement> @@ -135,12 +134,6 @@ <type>test-jar</type> <scope>test</scope> </dependency> - <dependency> - <groupId>org.grpcmock</groupId> - <artifactId>grpcmock-spring-boot</artifactId> - <version>${grpcmock.version}</version> - <scope>test</scope> - </dependency> </dependencies> </dependencyManagement> diff --git a/semantik-adapter/pom.xml b/semantik-adapter/pom.xml index 1b88eb4cd3a10839f277a1e4d52526eaf9b9e408..18c5fe1bb8ace2afd5e890daf9196ed782046a29 100644 --- a/semantik-adapter/pom.xml +++ b/semantik-adapter/pom.xml @@ -61,15 +61,6 @@ <type>test-jar</type> <scope>test</scope> </dependency> - <dependency> - <groupId>org.grpcmock</groupId> - <artifactId>grpcmock-spring-boot</artifactId> - </dependency> - <dependency> - <groupId>de.ozgcloud.vorgang</groupId> - <artifactId>vorgang-manager-interface</artifactId> - <scope>test</scope> - </dependency> </dependencies> <build> diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java index 68276370784ab74c52ed506b1e75345f9c042b09..e80eeca2598ef00dc45d827401744d80eb10ba4c 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java @@ -2,25 +2,27 @@ package de.ozgcloud.eingang.semantik.formbased.mantelantrag; import static de.ozgcloud.eingang.common.formdata.FormDataTestFactory.*; import static org.assertj.core.api.Assertions.*; -import static org.grpcmock.GrpcMock.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.util.Collections; import java.util.List; -import java.util.function.Predicate; +import java.util.Optional; -import org.grpcmock.interceptors.CapturedRequest; -import org.grpcmock.springboot.AutoConfigureGrpcMock; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; 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.mockito.ArgumentCaptor; +import org.mockito.Captor; 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.test.context.ActiveProfiles; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; @@ -30,92 +32,31 @@ import de.ozgcloud.common.test.TestUtils; import de.ozgcloud.eingang.Application; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; +import de.ozgcloud.eingang.router.VorgangRemoteService; import de.ozgcloud.eingang.semantik.SemantikAdapter; import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapterITCase; -import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileRequest; -import de.ozgcloud.vorgang.grpc.binaryFile.GrpcUploadBinaryFileResponse; -import de.ozgcloud.vorgang.vorgang.GrpcCreateVorgangRequest; -import de.ozgcloud.vorgang.vorgang.GrpcCreateVorgangResponse; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; -import de.ozgcloud.vorgang.vorgang.GrpcFinishCreationResponse; -import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; -import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc; import lombok.SneakyThrows; -@ActiveProfiles({ "itcase" }) -@SpringBootTest(classes = Application.class, properties = { - "ozgcloud.adapter.targetVorgangManagerName=itcase", - "grpc.client.vorgang-manager-itcase.address=in-process:vorgang-manager-itcase", - "grpc.client.vorgang-manager-itcase.negotiationType=PLAINTEXT", -}) -@AutoConfigureGrpcMock(name = "vorgang-manager-itcase", useInProcessServer = true) +@ActiveProfiles({ "local", "itcase" }) +@SpringBootTest(classes = Application.class) public class MantelantragITCase { private static final String FILE_NAME_XDOMEA = "mantelantrag/4620-EH6C_b3c9168a-6ae9-4361-8b2f-6837bb341021_Geschaeftsgang.Geschaeftsgang.0201.xml"; private static final String FILE_NAME_MANTELANTRAG = "mantelantrag/4620-EH6C_7d703670-15b6-42b2-8cd1-88a7e4c494b9_Antrag_Max_Mustermann_SGBXII.xml"; - @BeforeEach - void setup() { - mockStartVorgangCreation(); - mockUploadBinaryFiles(); - mockFinishVorgangCreation(); - } - - private void mockStartVorgangCreation() { - stubFor( - unaryMethod(VorgangServiceGrpc.getStartCreationMethod()) - .willReturn(GrpcCreateVorgangResponse.getDefaultInstance())); - } - - private void mockUploadBinaryFiles() { - stubFor( - clientStreamingMethod(BinaryFileServiceGrpc.getUploadBinaryFileAsStreamMethod()) - .willReturn(GrpcUploadBinaryFileResponse.getDefaultInstance())); - } - - private void mockFinishVorgangCreation() { - stubFor( - unaryMethod(VorgangServiceGrpc.getFinishCreationMethod()) - .willReturn(GrpcFinishCreationResponse.getDefaultInstance())); - } + @MockBean + VorgangRemoteService vorgangRemoteService; - @AfterEach - void teardown() { - try { - expectOneVorgangCreateAndFinishCall(); - expectTwoUploadCallsForXmlRepresentations(); - } finally { - resetMappings(); - } - } - - private void expectOneVorgangCreateAndFinishCall() { - verifyThat( - calledMethod(VorgangServiceGrpc.getStartCreationMethod()) - .withRequest(GrpcCreateVorgangRequest::hasEingang), - times(1)); - verifyThat( - calledMethod(VorgangServiceGrpc.getFinishCreationMethod()), - times(1)); - } - - private void expectTwoUploadCallsForXmlRepresentations() { - Predicate<GrpcUploadBinaryFileRequest> hasXMLContentType = request -> request.hasMetadata() && request - .getMetadata() - .getContentType() - .contains("xml"); - verifyThat( - calledMethod(BinaryFileServiceGrpc.getUploadBinaryFileAsStreamMethod()) - .withRequestsContaining(hasXMLContentType), - times(2)); - } - - @Autowired + @SpyBean SemantikAdapter semantikAdapter; + @Captor + ArgumentCaptor<FormData> formDataCaptor; private FormData formData; + @Captor + ArgumentCaptor<Optional<String>> oeIdCaptor; + @Autowired MantelantragZustaendigeStelleMapper mantelantragZustaendigeStelleMapper; @@ -123,6 +64,8 @@ public class MantelantragITCase { @BeforeEach void mock() { + clearInvocations(vorgangRemoteService); + doReturn(VORGANG_ID).when(vorgangRemoteService).createVorgang(any(FormData.class), any()); formData = prepareTestData(); mantelantragZustaendigeStelleMapper.init(); } @@ -146,9 +89,8 @@ public class MantelantragITCase { void shouldCreateOneVorgang() { semantikAdapter.processFormData(formData); - var eingangs = captureEingangs(); - assertThat(eingangs).hasSize(1); - assertThat(eingangs.getFirst().getZustaendigeStelle().getOrganisationseinheitenId()).isEmpty(); + verify(vorgangRemoteService, times(1)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getValue()).isEmpty(); } } @@ -165,10 +107,8 @@ public class MantelantragITCase { void shouldCreateOneVorgang() { semantikAdapter.processFormData(formData); - var eingangs = captureEingangs(); - assertThat(eingangs).extracting(GrpcEingang::getZustaendigeStelle) - .extracting(GrpcZustaendigeStelle::getOrganisationseinheitenId) - .containsOnly("123"); + verify(vorgangRemoteService, times(1)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getValue()).contains("123"); } } @@ -186,10 +126,8 @@ public class MantelantragITCase { void shouldCreateTwoVorangsWithPartiallyMatchingZustaendigeStelle() { semantikAdapter.processFormData(formData); - var eingangs = captureEingangs(); - assertThat(eingangs).extracting(GrpcEingang::getZustaendigeStelle) - .extracting(GrpcZustaendigeStelle::getOrganisationseinheitenId) - .containsOnly("123", "444"); + verify(vorgangRemoteService, times(2)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getAllValues()).contains(Optional.of("123"), Optional.of("444")); } } @@ -207,10 +145,8 @@ public class MantelantragITCase { void shouldCreateThreeVorgangs() { semantikAdapter.processFormData(formData); - var eingangs = captureEingangs(); - assertThat(eingangs).extracting(GrpcEingang::getZustaendigeStelle) - .extracting(GrpcZustaendigeStelle::getOrganisationseinheitenId) - .containsOnly("123", "321", "444"); + verify(vorgangRemoteService, times(3)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture()); + assertThat(oeIdCaptor.getAllValues()).contains(Optional.of("123"), Optional.of("321"), Optional.of("444")); } } @@ -239,16 +175,6 @@ public class MantelantragITCase { return FormData.builder().representations(List.of(xdomeaFile, mantelantragFile)).build(); } - private List<GrpcEingang> captureEingangs() { - return capturedRequestsFor( - calledMethod(VorgangServiceGrpc.getStartCreationMethod())) - .stream() - .map(CapturedRequest::requests) - .flatMap(List::stream) - .map(GrpcCreateVorgangRequest::getEingang) - .toList(); - } - @SneakyThrows private long getFileSize(String fileName) { Path filePath = Path.of(FormSolutionsEngineBasedAdapterITCase.class.getClassLoader().getResource(fileName).toURI()); diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml index 20aea7aa8aa90ed1c38c4c4f2f430ee774b83cad..e96fb6c3dd46267839a27a0e6c9b19dea237b91d 100644 --- a/xta-adapter/pom.xml +++ b/xta-adapter/pom.xml @@ -92,11 +92,6 @@ <type>test-jar</type> <scope>test</scope> </dependency> - <dependency> - <groupId>org.grpcmock</groupId> - <artifactId>grpcmock-spring-boot</artifactId> - <scope>test</scope> - </dependency> </dependencies> <build>