diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentGrpcServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentGrpcServiceITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..95720de7ca399b35508f54d47da2550cb858dadd --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentGrpcServiceITCase.java @@ -0,0 +1,110 @@ +/* + * 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.document; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.Map; +import java.util.Optional; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +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.data.mongodb.core.MongoOperations; +import org.springframework.test.annotation.DirtiesContext; + +import de.ozgcloud.bescheid.common.callcontext.CallContextUser; +import de.ozgcloud.bescheid.common.callcontext.CurrentUserService; +import de.ozgcloud.common.test.DataITCase; +import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceBlockingStub; +import de.ozgcloud.vorgang.VorgangManagerServerApplication; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem; +import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory; +import io.grpc.StatusRuntimeException; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@SpringBootTest(classes = VorgangManagerServerApplication.class, properties = { + "grpc.server.inProcessName=test", + "grpc.server.port=-1", + "grpc.client.vorgang-manager.address=in-process:test", + "grpc.client.inProcess.address=in-process:test", +}) +@DataITCase +@DirtiesContext +class DocumentGrpcServiceITCase { + + @GrpcClient("inProcess") + private DocumentServiceBlockingStub documentServiceStub; + + @Autowired + private MongoOperations mongoOperations; + + @MockBean + private CurrentUserService currentUserService; + @Mock + private CallContextUser callContextUser; + + @BeforeEach + void init() { + mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME); + when(currentUserService.findUser()).thenReturn(Optional.of(callContextUser)); + when(currentUserService.getUser()).thenReturn(callContextUser); + } + + @Test + void shouldGetDocument() { + var documentId = saveDocument(); + + var response = documentServiceStub.getDocument(GrpcGetDocumentRequest.newBuilder().setId(documentId).build()); + + assertThat(response.hasDocument()).isTrue(); + } + + @Test + void shouldThrowExceptionWhenDocumentNotFound() { + saveDocument(); + var request = GrpcGetDocumentRequest.newBuilder().setId("not-found").build(); + + Assertions.assertThrows(StatusRuntimeException.class, () -> documentServiceStub.getDocument(request)); + } + + private String saveDocument() { + var document = VorgangAttachedItemTestFactory.createBuilder() + .id(null) + .version(0) + .itemName(DocumentService.DOCUMENT_ITEM_NAME) + .item(Map.of( + Document.FIELD_DOCUMENT_TYPE, DocumentService.DOCUMENT_TYPE, + Document.FIELD_DOCUMENT_FILE, "file-id", + Document.FIELD_NACHRICHT_TEXT, "nachricht-text", + Document.FIELD_NACHRICHT_SUBJECT, "nachricht-subject")) + .build(); + return mongoOperations.save(document, VorgangAttachedItem.COLLECTION_NAME).getId(); + } +}