diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteITCase.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..82679dbc38a283bed73689e1e2d3d93d85fe1b7e --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaRemoteITCase.java @@ -0,0 +1,163 @@ +package de.ozgcloud.eingang.xta; + +import static org.assertj.core.api.Assertions.*; +import static org.grpcmock.GrpcMock.*; + +import java.util.List; + +import org.grpcmock.springboot.AutoConfigureGrpcMock; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +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.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.ActiveProfiles; + +import de.ozgcloud.eingang.Application; +import de.ozgcloud.eingang.semantik.SemantikAdapter; +import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc; +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.VorgangServiceGrpc; +import lombok.RequiredArgsConstructor; + +@Disabled("real live test - do only activate for manual testing (will empty XTA-E mailbox)") +@SpringBootTest(classes = { + Application.class, + XtaRemoteITCase.ActivateXTARunnerConfig.class, + XtaRemoteITCase.ActivateXTARunnerConfig.class +}, properties = { "ozgcloud.xta.server.name=LI33-0005", + "ozgcloud.xta.server.address=LI33-0005:3000", + "ozgcloud.xta.server.protocol=https", + "ozgcloud.xta.keystore.file=file:./KOP_SH_KIEL_DEV.p12", + "ozgcloud.xta.keystore.password=geheim" // replace this with real password +}) +@ActiveProfiles({ "itcase" }) +@AutoConfigureGrpcMock(name = "vorgang-manager-itcase", useInProcessServer = true) +class XtaRemoteITCase { + + @Autowired + private XtaRunner runner; + + @DisplayName("run get xta messages") + @Nested + class TestRunGetXtaMessages { + @BeforeEach + void setup() { + // Mock 'start vorgang creation' + stubFor( + unaryMethod(VorgangServiceGrpc.getStartCreationMethod()) + .willReturn(GrpcCreateVorgangResponse.getDefaultInstance()) + ); + // Mock 'upload binary files' + stubFor( + clientStreamingMethod(BinaryFileServiceGrpc.getUploadBinaryFileAsStreamMethod()) + .willReturn(GrpcUploadBinaryFileResponse.getDefaultInstance()) + ); + // Mock 'finish vorgang creation' + stubFor( + unaryMethod(VorgangServiceGrpc.getFinishCreationMethod()) + .willReturn(GrpcFinishCreationResponse.getDefaultInstance()) + ); + } + + @AfterEach + void teardown() { + resetMappings(); + } + + @DisplayName("should have representations") + @Test + void shouldHaveRepresentations() { + runner.runGetXtaMessages(); + + var eingangRequests = captureEingangRequests(); + + eingangRequests.forEach(eingang -> + assertThat(eingang.getNumberOfRepresentations()).isGreaterThanOrEqualTo(2) + ); + + } + + @DisplayName("should have postfach id") + @Test + void shouldHavePostfachId() { + runner.runGetXtaMessages(); + + var eingangRequests = captureEingangRequests(); + + eingangRequests.forEach(eingang -> { + var serviceKonto = eingang + .getHeader() + .getServiceKonto(); + assertThat(serviceKonto).isNotNull(); + var postfachId = serviceKonto + .getPostfachAddresses(0) + .getIdentifier() + .getProperty(0) + .getValue(0); + assertThat(postfachId).hasSameSizeAs("4dd01647-b9d9-4775-1b50-08da3d83800a"); + } + ); + } + + @DisplayName("should have organistationseinheit ID") + @Test + void shouldHaveOrganistationseinheitId() { + runner.runGetXtaMessages(); + + var eingangRequests = captureEingangRequests(); + + eingangRequests.forEach(eingang -> { + var organisationseinheitId = eingang.getZustaendigeStelle() + .getOrganisationseinheitenId(); + assertThat(organisationseinheitId).isNotEmpty(); + }); + + } + + @DisplayName("should have vorgang nummer") + @Test + void shouldHaveVorgangNummer() { + runner.runGetXtaMessages(); + + var eingangRequests = captureEingangRequests(); + + eingangRequests.forEach(eingang -> { + var vorgangNummer = eingang + .getHeader() + .getVorgangNummer(); + assertThat(vorgangNummer).hasSize(9); + }); + } + + private List<GrpcEingang> captureEingangRequests() { + return capturedRequestsFor( + calledMethod(VorgangServiceGrpc.getStartCreationMethod()) + ) + .getFirst() + .requests() + .stream().map(GrpcCreateVorgangRequest::getEingang) + .toList(); + } + } + + @RequiredArgsConstructor + static class ActivateXTARunnerConfig { + private final XtaService service; + private final SemantikAdapter semantikAdapter; + + @Bean + XtaRunner xtaRunner() { + return new XtaRunner(service, semantikAdapter); + } + } + +}