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/document/Document.java b/bescheid-manager/src/main/java/de/ozgcloud/document/Document.java new file mode 100644 index 0000000000000000000000000000000000000000..5ab918df238f069ab9937d7d270655427cb46e80 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/Document.java @@ -0,0 +1,43 @@ +/* + * 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 { + + static final String FIELD_DOCUMENT_TYPE = "type"; + static final String FIELD_NACHRICHT_TEXT = "nachrichtText"; + static final String FIELD_DOCUMENT_FILE = "documentFile"; + + 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..275998bace28c8df9f02eeb19ad5fd0d7691394e --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentMapper.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 org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@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); + +} 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..b8a4aeedf2018897e4771f6da80865c1c3972036 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java @@ -93,4 +93,7 @@ public class DocumentService { return Map.of(FIELD_DOCUMENT_TYPE, DOCUMENT_TYPE, FIELD_DOCUMENT_FILE, fileId); } + public Document getDocument(String id) { + return Document.builder().build(); + } } 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/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 index c1b5200784b44f10495a8fff5c905fa8a5214557..ff0025a2197b3ba328547cd595f741ea95852310 100644 --- a/vorgang-manager-interface/src/main/protobuf/document.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/document.model.proto @@ -34,7 +34,7 @@ message GrpcGetDocumentRequest { } message GrpcGetDocumentResponse { - GrpcDocument bescheid = 1; + GrpcDocument document = 1; } message GrpcDocument {