Skip to content
Snippets Groups Projects
Commit e6abf5d0 authored by OZG-Cloud Team's avatar OZG-Cloud Team
Browse files

OZG-6748 KOP-2750 Reproduce file not found

parent 7cb4b9a4
Branches
Tags
No related merge requests found
......@@ -65,6 +65,7 @@
<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>
......@@ -134,6 +135,12 @@
<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>
......
......@@ -61,6 +61,15 @@
<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>
......
......@@ -2,27 +2,25 @@ 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.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import static org.grpcmock.GrpcMock.*;
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.Optional;
import java.util.function.Predicate;
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;
......@@ -32,31 +30,92 @@ 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({ "local", "itcase" })
@SpringBootTest(classes = Application.class)
@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)
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";
@MockBean
VorgangRemoteService vorgangRemoteService;
@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()));
}
@SpyBean
@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
SemantikAdapter semantikAdapter;
@Captor
ArgumentCaptor<FormData> formDataCaptor;
private FormData formData;
@Captor
ArgumentCaptor<Optional<String>> oeIdCaptor;
@Autowired
MantelantragZustaendigeStelleMapper mantelantragZustaendigeStelleMapper;
......@@ -64,8 +123,6 @@ public class MantelantragITCase {
@BeforeEach
void mock() {
clearInvocations(vorgangRemoteService);
doReturn(VORGANG_ID).when(vorgangRemoteService).createVorgang(any(FormData.class), any());
formData = prepareTestData();
mantelantragZustaendigeStelleMapper.init();
}
......@@ -89,8 +146,9 @@ public class MantelantragITCase {
void shouldCreateOneVorgang() {
semantikAdapter.processFormData(formData);
verify(vorgangRemoteService, times(1)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture());
assertThat(oeIdCaptor.getValue()).isEmpty();
var eingangs = captureEingangs();
assertThat(eingangs).hasSize(1);
assertThat(eingangs.getFirst().getZustaendigeStelle().getOrganisationseinheitenId()).isEmpty();
}
}
......@@ -107,8 +165,10 @@ public class MantelantragITCase {
void shouldCreateOneVorgang() {
semantikAdapter.processFormData(formData);
verify(vorgangRemoteService, times(1)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture());
assertThat(oeIdCaptor.getValue()).contains("123");
var eingangs = captureEingangs();
assertThat(eingangs).extracting(GrpcEingang::getZustaendigeStelle)
.extracting(GrpcZustaendigeStelle::getOrganisationseinheitenId)
.containsOnly("123");
}
}
......@@ -126,8 +186,10 @@ public class MantelantragITCase {
void shouldCreateTwoVorangsWithPartiallyMatchingZustaendigeStelle() {
semantikAdapter.processFormData(formData);
verify(vorgangRemoteService, times(2)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture());
assertThat(oeIdCaptor.getAllValues()).contains(Optional.of("123"), Optional.of("444"));
var eingangs = captureEingangs();
assertThat(eingangs).extracting(GrpcEingang::getZustaendigeStelle)
.extracting(GrpcZustaendigeStelle::getOrganisationseinheitenId)
.containsOnly("123", "444");
}
}
......@@ -145,8 +207,10 @@ public class MantelantragITCase {
void shouldCreateThreeVorgangs() {
semantikAdapter.processFormData(formData);
verify(vorgangRemoteService, times(3)).createVorgang(formDataCaptor.capture(), oeIdCaptor.capture());
assertThat(oeIdCaptor.getAllValues()).contains(Optional.of("123"), Optional.of("321"), Optional.of("444"));
var eingangs = captureEingangs();
assertThat(eingangs).extracting(GrpcEingang::getZustaendigeStelle)
.extracting(GrpcZustaendigeStelle::getOrganisationseinheitenId)
.containsOnly("123", "321", "444");
}
}
......@@ -175,6 +239,16 @@ 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());
......
......@@ -92,6 +92,11 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.grpcmock</groupId>
<artifactId>grpcmock-spring-boot</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment