From 237d5e4e7a7ca1038cadbb59d962e8d8096a91d5 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Fri, 30 Aug 2024 15:30:15 +0200
Subject: [PATCH] OZG-6508 use Optional for nullable arguments; refactor
 repository find methods

---
 .../vorgang/files/EingangFilesRepository.java | 54 +++++------
 .../ozgcloud/vorgang/files/FileService.java   | 19 +---
 .../vorgang/files/GrpcFileService.java        | 17 ++--
 .../files/EingangFilesRepositoryITCase.java   | 49 ++++++----
 .../vorgang/files/FileServiceTest.java        | 90 +++----------------
 .../vorgang/files/GrpcFileServiceTest.java    | 12 +--
 6 files changed, 87 insertions(+), 154 deletions(-)

diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/EingangFilesRepository.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/EingangFilesRepository.java
index 38f5f9ab6..59d74b21e 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/EingangFilesRepository.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/EingangFilesRepository.java
@@ -25,6 +25,7 @@ package de.ozgcloud.vorgang.files;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoTemplate;
@@ -43,29 +44,13 @@ class EingangFilesRepository {
 	private MongoTemplate mongoTemplate;
 
 	private static final String DB_FIELDNAME_EINGANGS = "eingangs";
-	private static final String DB_FIELDNAME_EINGANG_ID = DB_FIELDNAME_EINGANGS + "._id";
+	private static final String FIELD_EINGANG_ID = DB_FIELDNAME_EINGANGS + "._id";
 	private static final String DB_FIELDNAME_FILES = "files";
 	private static final String FIELD_ATTACHMENT_FILES = DB_FIELDNAME_EINGANGS + ".attachments." + DB_FIELDNAME_FILES;
 	private static final String FIELD_REPRESENTATION_FILES = DB_FIELDNAME_EINGANGS + ".representations";
 
-	public List<OzgFile> findAttachmentsByEingangId(String eingangId) {
-		return findAttachments(Criteria.where(DB_FIELDNAME_EINGANG_ID).is(eingangId));
-	}
-
-	public List<OzgFile> findAttachmentsByVorgangId(String vorgangId) {
-		return findAttachments(CriteriaUtil.isId(vorgangId));
-	}
-
-	public List<OzgFile> findAttachmentsByVorgangIdAndEingangId(final String vorgangId, final String eingangId) {
-		return findAttachments(new Criteria().andOperator(CriteriaUtil.isId(vorgangId), Criteria.where(DB_FIELDNAME_EINGANG_ID).is(eingangId)));
-	}
-
-	private List<OzgFile> findAttachments(Criteria criteria) {
-		List<AggregationOperation> operations = new ArrayList<>();
-		operations.add(Aggregation.match(criteria));
-		operations.addAll(buildExtractAttachmentsAggregation());
-
-		return mongoTemplate.aggregate(Aggregation.newAggregation(operations), Vorgang.COLLECTION_NAME, OzgFile.class).getMappedResults();
+	public List<OzgFile> findAttachments(Optional<String> vorgangId, Optional<String> eingangId) {
+		return findFiles(buildSearchCriteria(vorgangId, eingangId), buildExtractAttachmentsAggregation());
 	}
 
 	private List<AggregationOperation> buildExtractAttachmentsAggregation() {
@@ -80,24 +65,24 @@ class EingangFilesRepository {
 		);
 	}
 
-	List<OzgFile> findRepresentationsByEingangId(String eingangId) {
-		return findRepresentations(Criteria.where(DB_FIELDNAME_EINGANG_ID).is(eingangId));
+	public List<OzgFile> findRepresentations(Optional<String> vorgangId, Optional<String> eingangId) {
+		return findFiles(buildSearchCriteria(vorgangId, eingangId), buildFindRepresentationsAggregation());
 	}
 
-	public List<OzgFile> findRepresentationsByVorgangId(String vorgangId) {
-		return findRepresentations(CriteriaUtil.isId(vorgangId));
+	private Criteria buildSearchCriteria(Optional<String> vorgangId, Optional<String> eingangId) {
+		if (vorgangId.isEmpty()) {
+			return eingangId.map(this::buildIsEingangIdCriteria)
+					.orElseThrow(() -> new IllegalArgumentException("vorgangId or eingangId must be present"));
+		}
+		return eingangId.map(eid -> buildIsVorganIdAndEingangIdCriteria(vorgangId.get(), eid)).orElseGet(() -> CriteriaUtil.isId(vorgangId.get()));
 	}
 
-	public List<OzgFile> findRepresentationsByVorgangIdAndEingangId(String vorgangId, String eingangId) {
-		return findRepresentations(new Criteria().andOperator(CriteriaUtil.isId(vorgangId), Criteria.where(DB_FIELDNAME_EINGANG_ID).is(eingangId)));
+	private Criteria buildIsVorganIdAndEingangIdCriteria(String vorgangId, String eingangId) {
+		return new Criteria().andOperator(CriteriaUtil.isId(vorgangId), buildIsEingangIdCriteria(eingangId));
 	}
 
-	private List<OzgFile> findRepresentations(Criteria criteria) {
-		List<AggregationOperation> operations = new ArrayList<>();
-		operations.add(Aggregation.match(criteria));
-		operations.addAll(buildFindRepresentationsAggregation());
-
-		return mongoTemplate.aggregate(Aggregation.newAggregation(operations), Vorgang.COLLECTION_NAME, OzgFile.class).getMappedResults();
+	private Criteria buildIsEingangIdCriteria(String eingangId) {
+		return Criteria.where(FIELD_EINGANG_ID).is(eingangId);
 	}
 
 	private List<AggregationOperation> buildFindRepresentationsAggregation() {
@@ -109,4 +94,11 @@ class EingangFilesRepository {
 				Aggregation.unwind(DB_FIELDNAME_FILES),
 				Aggregation.replaceRoot(DB_FIELDNAME_FILES));
 	}
+
+	private List<OzgFile> findFiles(Criteria criteria, List<AggregationOperation> extractOperations) {
+		List<AggregationOperation> operations = new ArrayList<>();
+		operations.add(Aggregation.match(criteria));
+		operations.addAll(extractOperations);
+		return mongoTemplate.aggregate(Aggregation.newAggregation(operations), Vorgang.COLLECTION_NAME, OzgFile.class).getMappedResults();
+	}
 }
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/FileService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/FileService.java
index bcee3f3f6..e25b2e81b 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/FileService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/files/FileService.java
@@ -26,7 +26,6 @@ package de.ozgcloud.vorgang.files;
 import java.io.InputStream;
 import java.util.Collection;
 import java.util.List;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Stream;
@@ -53,22 +52,12 @@ public class FileService implements BinaryFileService {
 	@Autowired
 	private FileIdMapper fileIdMapper;
 
-	public List<OzgFile> getAttachments(String vorgangId, String eingangId) {
-		if (Objects.isNull(vorgangId)) {
-			return repository.findAttachmentsByEingangId(eingangId);
-		}
-		return Objects.isNull(eingangId)
-				? repository.findAttachmentsByVorgangId(vorgangId)
-				: repository.findAttachmentsByVorgangIdAndEingangId(vorgangId, eingangId);
+	public List<OzgFile> getAttachments(Optional<String> vorgangId, Optional<String> eingangId) {
+		return repository.findAttachments(vorgangId, eingangId);
 	}
 
-	public List<OzgFile> getRepresentations(String vorgangId, String eingangId) {
-		if (Objects.isNull(vorgangId)) {
-			return repository.findRepresentationsByEingangId(eingangId);
-		}
-		return Objects.isNull(eingangId)
-				? repository.findRepresentationsByVorgangId(vorgangId)
-				: repository.findRepresentationsByVorgangIdAndEingangId(vorgangId, eingangId);
+	public List<OzgFile> getRepresentations(Optional<String> vorgangId, Optional<String> eingangId) {
+		return repository.findRepresentations(vorgangId, eingangId);
 	}
 
 	public FileId uploadFileStream(UploadedFilesReference ref, OzgFile file, Optional<String> userId, InputStream content) {
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 47bf27883..6a37c0457 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
@@ -24,6 +24,7 @@
 package de.ozgcloud.vorgang.files;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,12 +54,12 @@ public class GrpcFileService extends FileServiceImplBase {
 		responseObserver.onCompleted();
 	}
 
-	private String getVorgangId(GrpcGetAttachmentsRequest request) {
-		return StringUtils.trimToNull(request.getVorgangId());
+	private Optional<String> getVorgangId(GrpcGetAttachmentsRequest request) {
+		return Optional.of(request.getVorgangId()).map(StringUtils::trimToNull);
 	}
 
-	private String getEingangId(GrpcGetAttachmentsRequest request) {
-		return StringUtils.trimToNull(request.getEingangId());
+	private Optional<String> getEingangId(GrpcGetAttachmentsRequest request) {
+		return Optional.of(request.getEingangId()).map(StringUtils::trimToNull);
 	}
 
 	@Override
@@ -69,11 +70,11 @@ public class GrpcFileService extends FileServiceImplBase {
 		responseObserver.onCompleted();
 	}
 
-	private String getVorgangId(GrpcGetRepresentationsRequest request) {
-		return StringUtils.trimToNull(request.getVorgangId());
+	private Optional<String> getVorgangId(GrpcGetRepresentationsRequest request) {
+		return Optional.of(request.getVorgangId()).map(StringUtils::trimToNull);
 	}
 
-	private String getEingangId(GrpcGetRepresentationsRequest request) {
-		return StringUtils.trimToNull(request.getEingangId());
+	private Optional<String> getEingangId(GrpcGetRepresentationsRequest request) {
+		return Optional.of(request.getEingangId()).map(StringUtils::trimToNull);
 	}
 }
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/EingangFilesRepositoryITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/EingangFilesRepositoryITCase.java
index da1769071..de2c1ee0f 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/EingangFilesRepositoryITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/EingangFilesRepositoryITCase.java
@@ -26,6 +26,7 @@ package de.ozgcloud.vorgang.files;
 import static org.assertj.core.api.Assertions.*;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.UUID;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -67,14 +68,14 @@ class EingangFilesRepositoryITCase {
 
 			@Test
 			void shouldHaveTwoAttachments() {
-				var attachments = repository.findAttachmentsByEingangId(EingangTestFactory.ID);
+				var attachments = findAttachments();
 
 				assertThat(attachments).hasSize(2);
 			}
 
 			@Test
 			void validateFirstAttachment() {
-				OzgFile attachment = repository.findAttachmentsByEingangId(EingangTestFactory.ID).get(0);
+				OzgFile attachment = findAttachments().get(0);
 
 				assertThat(attachment.getId()).isEqualTo(IncomingFileTestFactory.ID);
 				assertThat(attachment.getName()).isEqualTo(IncomingFileTestFactory.NAME);
@@ -83,10 +84,14 @@ class EingangFilesRepositoryITCase {
 
 			@Test
 			void validateSecondAttachment() {
-				OzgFile attachment = repository.findAttachmentsByEingangId(EingangTestFactory.ID).get(1);
+				var attachment = findAttachments().get(1);
 
 				assertThat(attachment.getId()).isEqualTo(ID2);
 			}
+
+			private List<OzgFile> findAttachments() {
+				return repository.findAttachments(Optional.empty(), Optional.of(EingangTestFactory.ID));
+			}
 		}
 
 		@Nested
@@ -96,7 +101,7 @@ class EingangFilesRepositoryITCase {
 			void shouldFindWhenOneEingang() {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build());
 
-				var result = repository.findAttachmentsByVorgangId(vorgang.getId());
+				var result = findAttachments(vorgang.getId());
 
 				assertThat(result).hasSize(1);
 			}
@@ -114,7 +119,7 @@ class EingangFilesRepositoryITCase {
 										.build())
 								.build());
 
-				var result = repository.findAttachmentsByVorgangId(vorang.getId());
+				var result = findAttachments(vorang.getId());
 
 				assertThat(result).hasSize(4);
 			}
@@ -124,10 +129,14 @@ class EingangFilesRepositoryITCase {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).clearEingangs()
 						.eingang(EingangTestFactory.createBuilder().clearAttachments().build()).build());
 
-				var result = repository.findAttachmentsByVorgangId(vorgang.getId());
+				var result = findAttachments(vorgang.getId());
 
 				assertThat(result).isEmpty();
 			}
+
+			private List<OzgFile> findAttachments(String vorgangId) {
+				return repository.findAttachments(Optional.of(vorgangId), Optional.empty());
+			}
 		}
 
 		@Nested
@@ -137,7 +146,7 @@ class EingangFilesRepositoryITCase {
 			void shouldReturnEmpty() {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build());
 
-				var result = repository.findAttachmentsByVorgangIdAndEingangId(vorgang.getId(), "not-existing");
+				var result = repository.findAttachments(Optional.ofNullable(vorgang.getId()), Optional.of("not-existing"));
 
 				assertThat(result).isEmpty();
 			}
@@ -151,7 +160,7 @@ class EingangFilesRepositoryITCase {
 								.build())
 						.build());
 
-				var result = repository.findAttachmentsByVorgangIdAndEingangId(vorgang.getId(), eingangId);
+				var result = repository.findAttachments(Optional.ofNullable(vorgang.getId()), Optional.ofNullable(eingangId));
 
 				assertThat(result).hasSize(3);
 			}
@@ -174,14 +183,14 @@ class EingangFilesRepositoryITCase {
 
 			@Test
 			void shouldHaveTwoRepresentations() {
-				List<OzgFile> representations = repository.findRepresentationsByEingangId(EingangTestFactory.ID);
+				List<OzgFile> representations = findRepresentations();
 
 				assertThat(representations).hasSize(2);
 			}
 
 			@Test
 			void validateFirstRepresentation() {
-				OzgFile representation = repository.findRepresentationsByEingangId(EingangTestFactory.ID).get(0);
+				OzgFile representation = findRepresentations().get(0);
 
 				assertThat(representation.getId()).isEqualTo(IncomingFileTestFactory.ID);
 				assertThat(representation.getName()).isEqualTo(IncomingFileTestFactory.NAME);
@@ -190,12 +199,16 @@ class EingangFilesRepositoryITCase {
 
 			@Test
 			void validateSecondRepresentation() {
-				OzgFile representation = repository.findRepresentationsByEingangId(EingangTestFactory.ID).get(1);
+				OzgFile representation = findRepresentations().get(1);
 
 				assertThat(representation.getId()).isEqualTo(ID2);
 				assertThat(representation.getName()).isEqualTo(IncomingFileTestFactory.NAME);
 				assertThat(representation.getSize()).isEqualTo(IncomingFileTestFactory.SIZE);
 			}
+
+			private List<OzgFile> findRepresentations() {
+				return repository.findRepresentations(Optional.empty(), Optional.of(EingangTestFactory.ID));
+			}
 		}
 
 		@Nested
@@ -205,7 +218,7 @@ class EingangFilesRepositoryITCase {
 			void shouldFindWhenOneEingang() {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build());
 
-				var result = repository.findRepresentationsByVorgangId(vorgang.getId());
+				var result = findRepresentations(vorgang.getId());
 
 				assertThat(result).hasSize(1);
 			}
@@ -223,7 +236,7 @@ class EingangFilesRepositoryITCase {
 										.build())
 								.build());
 
-				var result = repository.findRepresentationsByVorgangId(vorang.getId());
+				var result = findRepresentations(vorang.getId());
 
 				assertThat(result).hasSize(3);
 			}
@@ -233,10 +246,14 @@ class EingangFilesRepositoryITCase {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).clearEingangs()
 						.eingang(EingangTestFactory.createBuilder().clearRepresentations().build()).build());
 
-				var result = repository.findRepresentationsByVorgangId(vorgang.getId());
+				var result = findRepresentations(vorgang.getId());
 
 				assertThat(result).isEmpty();
 			}
+
+			private List<OzgFile> findRepresentations(String vorgangId) {
+				return repository.findRepresentations(Optional.of(vorgangId), Optional.empty());
+			}
 		}
 
 		@Nested
@@ -246,7 +263,7 @@ class EingangFilesRepositoryITCase {
 			void shouldReturnEmpty() {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).build());
 
-				var result = repository.findAttachmentsByVorgangIdAndEingangId(vorgang.getId(), "not-existing");
+				var result = repository.findAttachments(Optional.of(vorgang.getId()), Optional.of("not-existing"));
 
 				assertThat(result).isEmpty();
 			}
@@ -257,7 +274,7 @@ class EingangFilesRepositoryITCase {
 				var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0L).clearEingangs()
 						.eingang(EingangTestFactory.createBuilder().id(eingangId).representation(IncomingFileTestFactory.create()).build()).build());
 
-				var result = repository.findRepresentationsByVorgangIdAndEingangId(vorgang.getId(), eingangId);
+				var result = repository.findRepresentations(Optional.ofNullable(vorgang.getId()), Optional.ofNullable(eingangId));
 
 				assertThat(result).hasSize(2);
 			}
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/FileServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/FileServiceTest.java
index 7c4c62555..345938ebf 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/FileServiceTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/files/FileServiceTest.java
@@ -112,7 +112,7 @@ class FileServiceTest {
 		}
 
 		@Test
-		void shouldReturnId() throws Exception {
+		void shouldReturnId() {
 			var id = service.uploadFileStream(ref, file, user, contentStream);
 
 			assertThat(id).isEqualTo(IncomingFileTestFactory.ID);
@@ -169,52 +169,18 @@ class FileServiceTest {
 	class TestGetAttachments {
 
 		@Test
-		void shouldCallFindAttachmentsByEingangId() {
-			service.getAttachments(null, EingangTestFactory.ID);
+		void shouldCallFindAttachments() {
+			service.getAttachments(Optional.of(VorgangTestFactory.ID), Optional.ofNullable(EingangTestFactory.ID));
 
-			verify(repository).findAttachmentsByEingangId(EingangTestFactory.ID);
-		}
-
-		@Test
-		void shouldReturnAttachmentsByEingangId() {
-			var attachment = OzgFileTestFactory.create();
-			when(repository.findAttachmentsByEingangId(anyString())).thenReturn(List.of(attachment));
-
-			var result = service.getAttachments(null, EingangTestFactory.ID);
-
-			assertThat(result).containsExactly(attachment);
-		}
-
-		@Test
-		void shouldCallFindAttachmentsByVorgangId() {
-			service.getAttachments(VorgangTestFactory.ID, null);
-
-			verify(repository).findAttachmentsByVorgangId(VorgangTestFactory.ID);
-		}
-
-		@Test
-		void shouldReturnAttachmentsByVorgangId() {
-			var attachment = OzgFileTestFactory.create();
-			when(repository.findAttachmentsByVorgangId(anyString())).thenReturn(List.of(attachment));
-
-			var result = service.getAttachments(VorgangTestFactory.ID, null);
-
-			assertThat(result).containsExactly(attachment);
-		}
-
-		@Test
-		void shouldCallFindAttachmentsByVorgangIdAndEingangId() {
-			service.getAttachments(VorgangTestFactory.ID, EingangTestFactory.ID);
-
-			verify(repository).findAttachmentsByVorgangIdAndEingangId(VorgangTestFactory.ID, EingangTestFactory.ID);
+			verify(repository).findAttachments(Optional.of(VorgangTestFactory.ID), Optional.ofNullable(EingangTestFactory.ID));
 		}
 
 		@Test
 		void shouldReturnAttachmentsByVorgangIdAndEingangId() {
 			var attachment = OzgFileTestFactory.create();
-			when(repository.findAttachmentsByVorgangIdAndEingangId(anyString(), anyString())).thenReturn(List.of(attachment));
+			when(repository.findAttachments(any(), any())).thenReturn(List.of(attachment));
 
-			var result = service.getAttachments(VorgangTestFactory.ID, EingangTestFactory.ID);
+			var result = service.getAttachments(Optional.of(VorgangTestFactory.ID), Optional.ofNullable(EingangTestFactory.ID));
 
 			assertThat(result).containsExactly(attachment);
 		}
@@ -224,52 +190,18 @@ class FileServiceTest {
 	class TestGetRepresentations {
 
 		@Test
-		void shouldCallFindRepresentationsByEingangId() {
-			service.getRepresentations(null, EingangTestFactory.ID);
-
-			verify(repository).findRepresentationsByEingangId(EingangTestFactory.ID);
-		}
-
-		@Test
-		void shouldReturnRepresentationsByEingangId() {
-			var representation = OzgFileTestFactory.create();
-			when(repository.findRepresentationsByEingangId(anyString())).thenReturn(List.of(representation));
-
-			var result = service.getRepresentations(null, EingangTestFactory.ID);
-
-			assertThat(result).containsExactly(representation);
-		}
-
-		@Test
-		void shouldCallFindRepresentationsByVorgangId() {
-			service.getRepresentations(VorgangTestFactory.ID, null);
-
-			verify(repository).findRepresentationsByVorgangId(VorgangTestFactory.ID);
-		}
-
-		@Test
-		void shouldReturnRepresentationsByVorgangId() {
-			var representation = OzgFileTestFactory.create();
-			when(repository.findRepresentationsByVorgangId(anyString())).thenReturn(List.of(representation));
-
-			var result = service.getRepresentations(VorgangTestFactory.ID, null);
-
-			assertThat(result).containsExactly(representation);
-		}
-
-		@Test
-		void shouldCallFindRepresentationsByVorgangIdAndEingangId() {
-			service.getRepresentations(VorgangTestFactory.ID, EingangTestFactory.ID);
+		void shouldCallFindRepresentations() {
+			service.getRepresentations(Optional.of(VorgangTestFactory.ID), Optional.ofNullable(EingangTestFactory.ID));
 
-			verify(repository).findRepresentationsByVorgangIdAndEingangId(VorgangTestFactory.ID, EingangTestFactory.ID);
+			verify(repository).findRepresentations(Optional.of(VorgangTestFactory.ID), Optional.ofNullable(EingangTestFactory.ID));
 		}
 
 		@Test
 		void shouldReturnRepresentationsByVorgangIdAndEingangId() {
 			var representation = OzgFileTestFactory.create();
-			when(repository.findRepresentationsByVorgangIdAndEingangId(anyString(), anyString())).thenReturn(List.of(representation));
+			when(repository.findRepresentations(any(), any())).thenReturn(List.of(representation));
 
-			var result = service.getRepresentations(VorgangTestFactory.ID, EingangTestFactory.ID);
+			var result = service.getRepresentations(Optional.of(VorgangTestFactory.ID), Optional.ofNullable(EingangTestFactory.ID));
 
 			assertThat(result).containsExactly(representation);
 		}
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
index 8e360dce8..d4a0da11c 100644
--- 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
@@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import java.util.List;
+import java.util.Optional;
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
@@ -72,13 +73,14 @@ class GrpcFileServiceTest {
 		void shouldCallGetAttachments() {
 			getAttachments();
 
-			verify(fileService).getAttachments(GrpcGetAttachmentsRequestTestFactory.VORGANG_ID, GrpcGetAttachmentsRequestTestFactory.EINGANG_ID);
+			verify(fileService).getAttachments(Optional.ofNullable(GrpcGetAttachmentsRequestTestFactory.VORGANG_ID),
+					Optional.ofNullable(GrpcGetAttachmentsRequestTestFactory.EINGANG_ID));
 		}
 
 		@Test
 		void shouldCallFileMapper() {
 			var ozgFiles = List.of(OzgFileTestFactory.create());
-			when(fileService.getAttachments(anyString(), anyString())).thenReturn(ozgFiles);
+			when(fileService.getAttachments(any(), any())).thenReturn(ozgFiles);
 
 			getAttachments();
 
@@ -118,14 +120,14 @@ class GrpcFileServiceTest {
 		void shouldCallGetRepresentations() {
 			getRepresentations();
 
-			verify(fileService).getRepresentations(GrpcGetRepresentationsRequestTestFactory.VORGANG_ID,
-					GrpcGetRepresentationsRequestTestFactory.EINGANG_ID);
+			verify(fileService).getRepresentations(Optional.of(GrpcGetRepresentationsRequestTestFactory.VORGANG_ID),
+					Optional.of(GrpcGetRepresentationsRequestTestFactory.EINGANG_ID));
 		}
 
 		@Test
 		void shouldCallFileMapper() {
 			var ozgFiles = List.of(OzgFileTestFactory.create());
-			when(fileService.getRepresentations(anyString(), anyString())).thenReturn(ozgFiles);
+			when(fileService.getRepresentations(any(), any())).thenReturn(ozgFiles);
 
 			getRepresentations();
 
-- 
GitLab