diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcFileService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcFileService.java index aecb28e71a31a57da6758eb530b96dfbc82590f4..47bf27883911770d7d6e869b2608d0c3590418ac 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcFileService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/GrpcFileService.java @@ -25,6 +25,7 @@ package de.ozgcloud.vorgang.files; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import de.ozgcloud.vorgang.grpc.file.FileServiceGrpc.FileServiceImplBase; @@ -46,17 +47,33 @@ public class GrpcFileService extends FileServiceImplBase { @Override public void getAttachments(GrpcGetAttachmentsRequest request, StreamObserver<GrpcGetAttachmentsResponse> responseObserver) { - List<OzgFile> response = service.getAttachments(request.getEingangId()); + List<OzgFile> response = service.getAttachments(getVorgangId(request), getEingangId(request)); responseObserver.onNext(GrpcGetAttachmentsResponse.newBuilder().addAllFile(fileMapper.map(response)).build()); responseObserver.onCompleted(); } + private String getVorgangId(GrpcGetAttachmentsRequest request) { + return StringUtils.trimToNull(request.getVorgangId()); + } + + private String getEingangId(GrpcGetAttachmentsRequest request) { + return StringUtils.trimToNull(request.getEingangId()); + } + @Override public void getRepresentations(GrpcGetRepresentationsRequest request, StreamObserver<GrpcGetRepresentationsResponse> responseObserver) { - List<OzgFile> response = service.getRepresentations(request.getEingangId()); + List<OzgFile> response = service.getRepresentations(getVorgangId(request), getEingangId(request)); responseObserver.onNext(GrpcGetRepresentationsResponse.newBuilder().addAllFile(fileMapper.map(response)).build()); responseObserver.onCompleted(); } + + private String getVorgangId(GrpcGetRepresentationsRequest request) { + return StringUtils.trimToNull(request.getVorgangId()); + } + + private String getEingangId(GrpcGetRepresentationsRequest request) { + return StringUtils.trimToNull(request.getEingangId()); + } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcFileServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcFileServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8e360dce809d844cee27859cd5c12a4c407c708d --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcFileServiceTest.java @@ -0,0 +1,154 @@ +/* + * 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.vorgang.files; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsResponse; +import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsResponse; +import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; +import io.grpc.stub.StreamObserver; + +class GrpcFileServiceTest { + + private static final GrpcOzgFile GRPC_OZG_FILE = GrpcOzgFileTestFactory.create(); + + @InjectMocks + private GrpcFileService grpcFileService; + + @Mock + private FileService fileService; + + @Mock + private GrpcOzgFileMapper fileMapper; + + @BeforeEach + void init() { + when(fileMapper.map(anyList())).thenReturn(List.of(GRPC_OZG_FILE)); + } + + @Nested + class TestGetAttachments { + + @Mock + private StreamObserver<GrpcGetAttachmentsResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcGetAttachmentsResponse> responseCaptor; + + @Test + void shouldCallGetAttachments() { + getAttachments(); + + verify(fileService).getAttachments(GrpcGetAttachmentsRequestTestFactory.VORGANG_ID, GrpcGetAttachmentsRequestTestFactory.EINGANG_ID); + } + + @Test + void shouldCallFileMapper() { + var ozgFiles = List.of(OzgFileTestFactory.create()); + when(fileService.getAttachments(anyString(), anyString())).thenReturn(ozgFiles); + + getAttachments(); + + verify(fileMapper).map(ozgFiles); + } + + @Test + void shouldAddFilesToResponse() { + getAttachments(); + + verify(responseObserver).onNext(responseCaptor.capture()); + assertThat(responseCaptor.getValue().getFileList()).containsExactly(GRPC_OZG_FILE); + } + + @Test + void shouldCallCompleted() { + getAttachments(); + + verify(responseObserver).onCompleted(); + } + + private void getAttachments() { + grpcFileService.getAttachments(GrpcGetAttachmentsRequestTestFactory.create(), responseObserver); + } + } + + @Nested + class TestGetRepresentations { + + @Mock + private StreamObserver<GrpcGetRepresentationsResponse> responseObserver; + + @Captor + private ArgumentCaptor<GrpcGetRepresentationsResponse> responseCaptor; + + @Test + void shouldCallGetRepresentations() { + getRepresentations(); + + verify(fileService).getRepresentations(GrpcGetRepresentationsRequestTestFactory.VORGANG_ID, + GrpcGetRepresentationsRequestTestFactory.EINGANG_ID); + } + + @Test + void shouldCallFileMapper() { + var ozgFiles = List.of(OzgFileTestFactory.create()); + when(fileService.getRepresentations(anyString(), anyString())).thenReturn(ozgFiles); + + getRepresentations(); + + verify(fileMapper).map(ozgFiles); + } + + @Test + void shouldAddFilesToResponse() { + getRepresentations(); + + verify(responseObserver).onNext(responseCaptor.capture()); + assertThat(responseCaptor.getValue().getFileList()).containsExactly(GRPC_OZG_FILE); + } + + @Test + void shouldCallCompleted() { + getRepresentations(); + + verify(responseObserver).onCompleted(); + } + + private void getRepresentations() { + grpcFileService.getRepresentations(GrpcGetRepresentationsRequestTestFactory.create(), responseObserver); + } + } +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetAttachmentsRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetAttachmentsRequestTestFactory.java index d33e4d90b6067d3872c824e2ebfa1a6b72e9da15..e19787b667a256e1ffd79c5e3cfbc519d4309725 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetAttachmentsRequestTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetAttachmentsRequestTestFactory.java @@ -25,9 +25,11 @@ package de.ozgcloud.vorgang.files; import de.ozgcloud.vorgang.grpc.file.GrpcGetAttachmentsRequest; import de.ozgcloud.vorgang.vorgang.EingangTestFactory; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; public class GrpcGetAttachmentsRequestTestFactory { + public static final String VORGANG_ID = VorgangTestFactory.ID; public static final String EINGANG_ID = EingangTestFactory.ID; public static GrpcGetAttachmentsRequest create() { @@ -36,6 +38,7 @@ public class GrpcGetAttachmentsRequestTestFactory { public static GrpcGetAttachmentsRequest.Builder createBuilder() { return GrpcGetAttachmentsRequest.newBuilder() - .setEingangId(EINGANG_ID); + .setEingangId(EINGANG_ID) + .setVorgangId(VORGANG_ID); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetRepresentationsRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetRepresentationsRequestTestFactory.java index 55e5de3da4ca62bf1c9b4ed05dbd49f73683cc8a..7408b7bb7156096578840c28efa6dd26552ab7af 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetRepresentationsRequestTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcGetRepresentationsRequestTestFactory.java @@ -25,10 +25,12 @@ package de.ozgcloud.vorgang.files; import de.ozgcloud.vorgang.grpc.file.GrpcGetRepresentationsRequest; import de.ozgcloud.vorgang.vorgang.EingangTestFactory; +import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; public class GrpcGetRepresentationsRequestTestFactory { public static final String EINGANG_ID = EingangTestFactory.ID; + public static final String VORGANG_ID = VorgangTestFactory.ID; public static GrpcGetRepresentationsRequest create() { return createBuilder().build(); @@ -36,6 +38,7 @@ public class GrpcGetRepresentationsRequestTestFactory { public static GrpcGetRepresentationsRequest.Builder createBuilder() { return GrpcGetRepresentationsRequest.newBuilder() - .setEingangId(EINGANG_ID); + .setEingangId(EINGANG_ID) + .setVorgangId(VORGANG_ID); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcOzgFileTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcOzgFileTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e2dec587074c6fa5d6a13ef1be50e9bbddaa1bbd --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/GrpcOzgFileTestFactory.java @@ -0,0 +1,41 @@ +/* + * 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.vorgang.files; + +import de.ozgcloud.vorgang.grpc.file.GrpcOzgFile; + +public class GrpcOzgFileTestFactory { + + public static GrpcOzgFile create() { + return createBuilder().build(); + } + + public static GrpcOzgFile.Builder createBuilder() { + return GrpcOzgFile.newBuilder() + .setId(OzgFileTestFactory.ID.toString()) + .setName(OzgFileTestFactory.NAME) + .setSize(OzgFileTestFactory.SIZE) + .setContentType(OzgFileTestFactory.CONTENT_TYPE); + } +}