diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 5f5e43c0d1204185e1f1473897ea2e7d76babb0e..07ca67426a2042ed3f702a4c3ef65e621c984e13 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -15,7 +15,7 @@ <version>1.10.0-SNAPSHOT</version> <properties> - <vorgang-manager.version>2.5.0</vorgang-manager.version> + <vorgang-manager.version>2.6.0-SNAPSHOT</vorgang-manager.version> <api-lib.version>0.7.0-SNAPSHOT</api-lib.version> </properties> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItem.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItem.java new file mode 100644 index 0000000000000000000000000000000000000000..f2ba902117c7b2b566957955d9c0a1591cbc5e0f --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItem.java @@ -0,0 +1,52 @@ +/* + * 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.bescheid.attacheditem; + +import java.util.Map; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class AttachedItem { + + public static final String PROPERTY_ID = "id"; + public static final String PROPERTY_CLIENT = "client"; + public static final String PROPERTY_VORGANG_ID = "vorgangId"; + public static final String PROPERTY_ITEM_NAME = "itemName"; + public static final String PROPERTY_VERSION = "version"; + public static final String PROPERTY_ITEM = "item"; + + private String id; + @Builder.Default + private long version = 0L; + + private String client; + private String vorgangId; + private String itemName; + + private Map<String, Object> item; + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..c2b373a33138cc4df45ea98c5f516921713f4863 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapper.java @@ -0,0 +1,36 @@ +/* + * 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.bescheid.attacheditem; + +import org.mapstruct.Mapper; + +import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; +import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItem; + +@Mapper(uses = { GrpcObjectMapper.class}) +interface AttachedItemMapper { + + AttachedItem mapFromVorgangAttachedItem(GrpcVorgangAttachedItem item); + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java index cf8d8bf0e80e6a905b5e2c5097382462744acf74..53e246ff9d1e9d293badd27fdca83e97771977ae 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java @@ -185,4 +185,7 @@ public class AttachedItemService { .build(); } + public AttachedItem getItem(String id) { + return remoteService.getItem(id); + } } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java index 84b6f8aff6a040ab619ccaed13d19c08c7d3b4f7..4bc85092889c6449e0ed12193079734cc6e78459 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItem.java @@ -31,6 +31,7 @@ import lombok.Getter; @Builder(toBuilder = true) @Getter +@Deprecated(since = "2.6.0") public class BescheidItem { static final Set<String> ACCEPTED_SEND_BY_VALUES = Set.of("POSTFACH", "MANUAL"); diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java index ff92f8c2f43b6525dbac9a44db3e573c4931e62e..2c915d65d934abab2636433b02e30a1eaf8e764d 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/BescheidItemMapper.java @@ -42,6 +42,7 @@ import lombok.RequiredArgsConstructor; @Component @RequiredArgsConstructor +@Deprecated(since = "2.6.0") public class BescheidItemMapper { private final GrpcObjectMapper grpcObjectMapper; diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java index e0ee53970c6e8b22f1e66b9060e7cd505847b987..aa6709149d8d968e263c86e0197e281ff99c3a8e 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteService.java @@ -57,6 +57,8 @@ class VorgangAttachedItemRemoteService { private ClientInterceptor bescheidCallContextInterceptor; @Autowired private BescheidItemMapper bescheidItemMapper; + @Autowired + private AttachedItemMapper attachedItemMapper; public Optional<BescheidItem> findBescheidDraft(String vorgangId) { return findBescheidDraft(buildFindRequest(vorgangId)); @@ -90,6 +92,11 @@ class VorgangAttachedItemRemoteService { return bescheidItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()); } + public AttachedItem getItem(String id) { + var grpcVorgangAttachedItemResponse = getServiceStub().getById(buildGetByIdRequest(id)); + return attachedItemMapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()); + } + GrpcVorgangAttachedItemRequest buildGetByIdRequest(String bescheidId) { return GrpcVorgangAttachedItemRequest.newBuilder().setId(bescheidId).build(); } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/Document.java b/bescheid-manager/src/main/java/de/ozgcloud/document/Document.java new file mode 100644 index 0000000000000000000000000000000000000000..fc0d09b53f1d9cbc4d3792dca94c429f46d3e5e1 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/Document.java @@ -0,0 +1,44 @@ +/* + * 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 lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class Document { + + public static final String FIELD_DOCUMENT_TYPE = "type"; + public static final String FIELD_DOCUMENT_FILE = "documentFile"; + public static final String FIELD_NACHRICHT_TEXT = "nachrichtText"; + public static final String FIELD_NACHRICHT_SUBJECT = "nachrichtSubject"; + + private String id; + private String type; + private String fileId; + private String nachrichtSubject; + private String nachrichtText; + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentGrpcService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentGrpcService.java new file mode 100644 index 0000000000000000000000000000000000000000..673935d696777f3708fafbe134a8a496541b0d02 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentGrpcService.java @@ -0,0 +1,48 @@ +/* + * 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 de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceImplBase; +import io.grpc.stub.StreamObserver; +import lombok.RequiredArgsConstructor; +import net.devh.boot.grpc.server.service.GrpcService; + +@GrpcService +@RequiredArgsConstructor +public class DocumentGrpcService extends DocumentServiceImplBase { + + private final DocumentService documentService; + private final DocumentMapper documentMapper; + + @Override + public void getDocument(GrpcGetDocumentRequest request, StreamObserver<GrpcGetDocumentResponse> responseObserver) { + var document = documentService.getDocument(request.getId()); + responseObserver.onNext(buildGetDocumentResponse(document)); + responseObserver.onCompleted(); + } + + GrpcGetDocumentResponse buildGetDocumentResponse(Document document) { + return GrpcGetDocumentResponse.newBuilder().setDocument(documentMapper.toGrpcDocument(document)).build(); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..85b43ea2c05fe716168026578a7a2071cd937ee1 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentMapper.java @@ -0,0 +1,56 @@ +/* + * 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 org.apache.commons.collections.MapUtils; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import de.ozgcloud.bescheid.attacheditem.AttachedItem; + +@Mapper +interface DocumentMapper { + + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "typeBytes", ignore = true) + @Mapping(target = "nachrichtTextBytes", ignore = true) + @Mapping(target = "nachrichtSubjectBytes", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "idBytes", ignore = true) + @Mapping(target = "fileIdBytes", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + GrpcDocument toGrpcDocument(Document document); + + default Document fromAttacheItem(AttachedItem attachedItem) { + return Document.builder() + .id(attachedItem.getId()) + .type(MapUtils.getString(attachedItem.getItem(), Document.FIELD_DOCUMENT_TYPE)) + .fileId(MapUtils.getString(attachedItem.getItem(), Document.FIELD_DOCUMENT_FILE)) + .nachrichtText(MapUtils.getString(attachedItem.getItem(), Document.FIELD_NACHRICHT_TEXT)) + .nachrichtSubject(MapUtils.getString(attachedItem.getItem(), Document.FIELD_NACHRICHT_SUBJECT)) + .build(); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java index 0a4e4090ec4f656f47d34d612a1cd72ef3474c56..6400a8c11d2713b1b133d06c094ceb341210201b 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java @@ -44,15 +44,17 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class DocumentService { + public static final String DOCUMENT_ITEM_NAME = "Document"; + public static final String DOCUMENT_TYPE = "BESCHEID"; + static final String CREATE_ATTACHED_ITEM_ORDER = "CREATE_ATTACHED_ITEM"; - static final String DOCUMENT_ITEM_NAME = "Document"; static final String FIELD_DOCUMENT_TYPE = "type"; - static final String DOCUMENT_TYPE = "BESCHEID"; static final String FIELD_DOCUMENT_FILE = "documentFile"; private final AttachedItemService attachedItemService; private final OzgCloudCommandService commandService; private final CommandMapper commandMapper; + private final DocumentMapper documentMapper; public String createBescheidDocument(Command command) { validateBescheidItem(command.getRelationId()); @@ -93,4 +95,7 @@ public class DocumentService { return Map.of(FIELD_DOCUMENT_TYPE, DOCUMENT_TYPE, FIELD_DOCUMENT_FILE, fileId); } + public Document getDocument(String id) { + return documentMapper.fromAttacheItem(attachedItemService.getItem(id)); + } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..782c98d8cc4bc4066b43d34e9a45334d724ca7d5 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemMapperTest.java @@ -0,0 +1,61 @@ +/* + * 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.bescheid.attacheditem; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.document.DocumentService; +import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper; + +class AttachedItemMapperTest { + + @InjectMocks + private AttachedItemMapper mapper = Mappers.getMapper(AttachedItemMapper.class); + + @Mock + private GrpcObjectMapper grpcObjectMapper; + + @BeforeEach + void init() { + when(grpcObjectMapper.mapFromGrpc(any())).thenReturn(AttachedItemTestFactory.createDocumentItem()); + } + + @Test + void shouldMapFromVorgangAttachedItem() { + var grpcVorgangAttachedItem = GrpcVorgangAttachedItemTestFactory.createBuilder().setItemName(DocumentService.DOCUMENT_ITEM_NAME) + .setVersion(AttachedItemTestFactory.VERSION).build(); + + var result = mapper.mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + + assertThat(result).usingRecursiveComparison().isEqualTo(AttachedItemTestFactory.createDocument()); + } + +} \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java index 3c10b5cdb070f9c0cbd60590cf805170c0491632..107f4e3caa00e1fde61ad8d7b14bad6e0e62eb79 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemServiceTest.java @@ -727,4 +727,25 @@ class AttachedItemServiceTest { } } + + @Nested + class TestGetItem { + + @Test + void shouldCallRemoteService() { + service.getItem(BescheidItemTestFactory.ID); + + verify(service).getItem(BescheidItemTestFactory.ID); + } + + @Test + void shouldReturnValue() { + var expectedItem = AttachedItemTestFactory.createDocument(); + doReturn(expectedItem).when(remoteService).getItem(any()); + + var result = service.getItem(BescheidItemTestFactory.ID); + + assertThat(result).isEqualTo(expectedItem); + } + } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..18fa5737493cae7b9fc7907e643844f661a4d2dc --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/AttachedItemTestFactory.java @@ -0,0 +1,91 @@ +/* + * 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.bescheid.attacheditem; + +import java.util.List; +import java.util.Map; + +import de.ozgcloud.bescheid.attacheditem.AttachedItem.AttachedItemBuilder; +import de.ozgcloud.command.CommandTestFactory; +import de.ozgcloud.document.Document; +import de.ozgcloud.document.DocumentService; +import de.ozgcloud.document.DocumentTestFactory; + +public class AttachedItemTestFactory { + + public static final String ID = "bescheid-item-id"; + public static final long VERSION = 10L; + public static final String CLIENT = "client"; + + public static final String BESCHEIDEN_AM = "2024-01-01"; + public static final String BESCHEID_DOCUMENT = "bescheid-document"; + public static final String ATTACHMENT = "attachment-id"; + public static final String SEND_BY = "POSTFACH"; + public static final String NACHRICHT_TEXT = "nachricht-text"; + public static final String NACHRICHT_SUBJECT = "nachricht-subject"; + + public static AttachedItem createBescheid() { + return createBuilder() + .itemName(AttachedItemService.BESCHEID_ITEM_NAME) + .item(createBescheidItem()) + .build(); + } + + public static Map<String, Object> createBescheidItem() { + return Map.of( + BescheidItem.FIELD_STATUS, BescheidItem.Status.DRAFT, + BescheidItem.FIELD_BESCHIEDEN_AM, BESCHEIDEN_AM, + BescheidItem.FIELD_BEWILLIGT, true, + BescheidItem.FIELD_BESCHEID_DOCUMENT, BESCHEID_DOCUMENT, + BescheidItem.FIELD_ATTACHMENTS, List.of(ATTACHMENT), + BescheidItem.FIELD_SEND_BY, SEND_BY, + BescheidItem.FIELD_NACHRICHT_TEXT, NACHRICHT_TEXT, + BescheidItem.FIELD_NACHRICHT_SUBJECT, NACHRICHT_SUBJECT); + } + + public static AttachedItem createDocument() { + return createBuilder() + .itemName(DocumentService.DOCUMENT_ITEM_NAME) + .item(createDocumentItem()) + .build(); + } + + public static Map<String, Object> createDocumentItem() { + return Map.of( + Document.FIELD_DOCUMENT_TYPE, DocumentService.DOCUMENT_TYPE, + Document.FIELD_DOCUMENT_FILE, DocumentTestFactory.DOCUMENT_FILE, + Document.FIELD_NACHRICHT_TEXT, DocumentTestFactory.NACHRICHT_TEXT, + Document.FIELD_NACHRICHT_SUBJECT, DocumentTestFactory.NACHRICHT_SUBJECT + ); + } + + public static AttachedItemBuilder createBuilder() { + return AttachedItem.builder() + .id(ID) + .version(VERSION) + .client(CLIENT) + .vorgangId(CommandTestFactory.VORGANG_ID); + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java index 88259ab1300ec4b86712144b5c196f761c7a231a..444249e06cc391cd8b6d05304ab33f93134cb899 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/attacheditem/VorgangAttachedItemRemoteServiceTest.java @@ -26,7 +26,6 @@ package de.ozgcloud.bescheid.attacheditem; import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; import java.util.Map; @@ -51,7 +50,6 @@ import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemRequest; import de.ozgcloud.vorgang.vorgangAttachedItem.GrpcVorgangAttachedItemResponse; import de.ozgcloud.vorgang.vorgangAttachedItem.VorgangAttachedItemServiceGrpc.VorgangAttachedItemServiceBlockingStub; import io.grpc.ClientInterceptor; -import io.grpc.StatusRuntimeException; class VorgangAttachedItemRemoteServiceTest { @@ -67,6 +65,8 @@ class VorgangAttachedItemRemoteServiceTest { private ClientInterceptor bescheidCallContextInterceptor; @Mock private BescheidItemMapper bescheidItemMapper; + @Mock + private AttachedItemMapper attachedItemMapper; @Nested class TestFindBescheidDraft { @@ -308,15 +308,77 @@ class VorgangAttachedItemRemoteServiceTest { assertThat(result).isEqualTo(expectedBescheid); } + private BescheidItem getBescheid() { + return service.getBescheid(BescheidItemTestFactory.ID); + } + } + + @Nested + class TestGetItem { + + @Mock + private GrpcVorgangAttachedItemRequest grpcVorgangAttachedItemRequest; + @Mock + private GrpcVorgangAttachedItemResponse grpcVorgangAttachedItemResponse; + @Mock + private GrpcVorgangAttachedItem grpcVorgangAttachedItem; + + @BeforeEach + void init() { + when(serviceStub.getById(any())).thenReturn(grpcVorgangAttachedItemResponse); + doReturn(serviceStub).when(service).getServiceStub(); + } + @Test - void shouldThrowExceptionIfNotFound() { - when(serviceStub.getById(any())).thenThrow(StatusRuntimeException.class); + void shouldCallGetServiceStab() { + when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); + + getItem(); - assertThrows(StatusRuntimeException.class, this::getBescheid); + verify(service).getServiceStub(); } - private BescheidItem getBescheid() { - return service.getBescheid(BescheidItemTestFactory.ID); + @Test + void shouldCallBuildRequest() { + when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); + + getItem(); + + verify(service).buildGetByIdRequest(AttachedItemTestFactory.ID); + } + + @Test + void shouldCallGetById() { + when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); + doReturn(grpcVorgangAttachedItemRequest).when(service).buildGetByIdRequest(any()); + + getItem(); + + verify(serviceStub).getById(grpcVorgangAttachedItemRequest); + } + + @Test + void shouldCallMapper() { + when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); + + getItem(); + + verify(attachedItemMapper).mapFromVorgangAttachedItem(grpcVorgangAttachedItem); + } + + @Test + void shouldReturnFoundBescheid() { + var expectedItem = AttachedItemTestFactory.createDocument(); + when(attachedItemMapper.mapFromVorgangAttachedItem(any())).thenReturn(expectedItem); + when(grpcVorgangAttachedItemResponse.getVorgangAttachedItem()).thenReturn(grpcVorgangAttachedItem); + + var result = getItem(); + + assertThat(result).isEqualTo(expectedItem); + } + + private AttachedItem getItem() { + return service.getItem(BescheidItemTestFactory.ID); } } diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentGrpcServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentGrpcServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e2157ed90a4161e3e67bfd1dcc30f0010c5ca390 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentGrpcServiceTest.java @@ -0,0 +1,120 @@ +/* + * 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 org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import io.grpc.stub.StreamObserver; + +class DocumentGrpcServiceTest { + + @Spy + @InjectMocks + private DocumentGrpcService service; + + @Mock + private DocumentService documentService; + @Mock + private DocumentMapper documentMapper; + + @Nested + class TestGetDocument { + + private final static GrpcGetDocumentRequest REQUEST = GrpcGetDocumentRequest.newBuilder().setId(DocumentTestFactory.ID).build(); + + @Mock + private GrpcGetDocumentResponse response; + @Mock + private StreamObserver<GrpcGetDocumentResponse> responseObserver; + + @BeforeEach + void init() { + doReturn(response).when(service).buildGetDocumentResponse(any()); + } + + @Test + void shouldCallDocumentService() { + service.getDocument(REQUEST, responseObserver); + + verify(documentService).getDocument(DocumentTestFactory.ID); + } + + @Test + void shouldCallBuildResponse() { + service.getDocument(REQUEST, responseObserver); + + verify(service).buildGetDocumentResponse(any()); + } + + @Test + void shouldCallOnNext() { + service.getDocument(REQUEST, responseObserver); + + verify(responseObserver).onNext(response); + } + + @Test + void shouldCallOnCompleted() { + service.getDocument(REQUEST, responseObserver); + + verify(responseObserver).onCompleted(); + } + } + + @Nested + class TestBuildGetDocumentResponse { + + @Mock + private GrpcDocument grpcDocument; + + @BeforeEach + void init() { + when(documentMapper.toGrpcDocument(any())).thenReturn(grpcDocument); + } + + @Test + void shouldCallDocumentMapper() { + var document = DocumentTestFactory.create(); + + service.buildGetDocumentResponse(document); + + verify(documentMapper).toGrpcDocument(document); + } + + @Test + void shouldSetDocument() { + var result = service.buildGetDocumentResponse(DocumentTestFactory.create()); + + assertThat(result.getDocument()).isEqualTo(grpcDocument); + } + } +} \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..889c1d5609d248320868317704b5b553ffd9bab6 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentMapperTest.java @@ -0,0 +1,42 @@ +/* + * 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 org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +class DocumentMapperTest { + + private DocumentMapper mapper = Mappers.getMapper(DocumentMapper.class); + + @Test + void shouldMapDocument() { + var result = mapper.toGrpcDocument(DocumentTestFactory.create()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcDocumentTestFactory.create()); + } + +} \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java index 9ade6417382b7da3c7968fb1b994f2c568fd51eb..d97c1176e3ba0e435914364ed92a077d00f2ddc5 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentServiceTest.java @@ -44,6 +44,7 @@ import de.ozgcloud.apilib.common.datatypes.GenericId; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor; import de.ozgcloud.bescheid.attacheditem.AttachedItemService; +import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory; import de.ozgcloud.bescheid.attacheditem.BescheidItem; import de.ozgcloud.bescheid.attacheditem.BescheidItemTestFactory; import de.ozgcloud.command.Command; @@ -65,6 +66,8 @@ class DocumentServiceTest { private CommandMapper commandMapper; @Mock private AttachedItemService attachedItemService; + @Mock + private DocumentMapper documentMapper; private Command command = CommandTestFactory.createBuilder() .relationId(RELATION_ID) @@ -293,4 +296,34 @@ class DocumentServiceTest { } } + @Nested + class TestGetDocument { + + @Test + void shouldCallAttachedItemService() { + service.getDocument(AttachedItemTestFactory.ID); + + verify(attachedItemService).getItem(AttachedItemTestFactory.ID); + } + + @Test + void shouldCallDocumentMapper() { + var expectedItem = AttachedItemTestFactory.createDocument(); + when(attachedItemService.getItem(any())).thenReturn(expectedItem); + + service.getDocument(AttachedItemTestFactory.ID); + + verify(documentMapper).fromAttacheItem(expectedItem); + } + + @Test + void shouldReturnDocument() { + var expectedDocument = DocumentTestFactory.create(); + when(documentMapper.fromAttacheItem(any())).thenReturn(expectedDocument); + + Document document = service.getDocument(AttachedItemTestFactory.ID); + + assertThat(document).isEqualTo(expectedDocument); + } + } } \ No newline at end of file diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..0484d6f5492a0b4fe72bbd87b6980797c9bb6110 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/DocumentTestFactory.java @@ -0,0 +1,48 @@ +/* + * 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 de.ozgcloud.document.Document.DocumentBuilder; + +public class DocumentTestFactory { + + public static final String ID = "documentId"; + public static final String TYPE = "type"; + public static final String DOCUMENT_FILE = "file-id"; + public static final String NACHRICHT_SUBJECT = "subject"; + public static final String NACHRICHT_TEXT = "text"; + + public static Document create() { + return createBuilder().build(); + } + + public static DocumentBuilder createBuilder() { + return Document.builder() + .id(ID) + .type(TYPE) + .fileId(DOCUMENT_FILE) + .nachrichtSubject(NACHRICHT_SUBJECT) + .nachrichtText(NACHRICHT_TEXT); + } +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/document/GrpcDocumentTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/document/GrpcDocumentTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5c56530f7b13a986c3cd6fd0914bfc9201d152b7 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/document/GrpcDocumentTestFactory.java @@ -0,0 +1,40 @@ +/* + * 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; + +public class GrpcDocumentTestFactory { + + public static GrpcDocument create() { + return createBuilder().build(); + } + + public static GrpcDocument.Builder createBuilder() { + return GrpcDocument.newBuilder() + .setId(DocumentTestFactory.ID) + .setType(DocumentTestFactory.TYPE) + .setFileId(DocumentTestFactory.DOCUMENT_FILE) + .setNachrichtSubject(DocumentTestFactory.NACHRICHT_SUBJECT) + .setNachrichtText(DocumentTestFactory.NACHRICHT_TEXT); + } +} diff --git a/vorgang-manager-interface/src/main/protobuf/document.model.proto b/vorgang-manager-interface/src/main/protobuf/document.model.proto new file mode 100644 index 0000000000000000000000000000000000000000..ff0025a2197b3ba328547cd595f741ea95852310 --- /dev/null +++ b/vorgang-manager-interface/src/main/protobuf/document.model.proto @@ -0,0 +1,46 @@ +/* + * 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. + */ + syntax = "proto3"; + + package de.ozgcloud.document; + + option java_multiple_files = true; + option java_package = "de.ozgcloud.document"; + option java_outer_classname = "DocumentModelProto"; + +message GrpcGetDocumentRequest { + string id = 1; +} + +message GrpcGetDocumentResponse { + GrpcDocument document = 1; +} + +message GrpcDocument { + string id = 1; + string type = 2; + string fileId = 3; + string nachrichtSubject = 4; + string nachrichtText = 5; +} \ No newline at end of file diff --git a/vorgang-manager-interface/src/main/protobuf/document.proto b/vorgang-manager-interface/src/main/protobuf/document.proto new file mode 100644 index 0000000000000000000000000000000000000000..c2a903373b229e3461932fa15e50706a9e5b41af --- /dev/null +++ b/vorgang-manager-interface/src/main/protobuf/document.proto @@ -0,0 +1,36 @@ +/* + * 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. + */ +syntax = "proto3"; + +package de.ozgcloud.document; + +import "document.model.proto"; + +option java_multiple_files = true; +option java_package = "de.ozgcloud.document"; +option java_outer_classname = "DocumentProto"; + +service DocumentService { + rpc GetDocument(GrpcGetDocumentRequest) returns (GrpcGetDocumentResponse) {} +} \ No newline at end of file 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(); + } +}