From 7aaae8459fe9c123f580d949a5afa7c9849924c9 Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Mon, 17 Feb 2025 09:27:30 +0100
Subject: [PATCH] OZG-4097 exception: Simplify exception handling

---
 .../osiv2/OsiPostfachRemoteService.java       |   7 +-
 .../osiv2/exception/Osi2ExceptionHandler.java |  20 +-
 .../osiv2/transfer/Osi2QuarantineService.java |   8 +-
 .../transfer/PostfachApiFacadeService.java    |  49 ----
 .../osiv2/OsiPostfachRemoteServiceTest.java   |  25 +-
 .../exception/Osi2ExceptionHandlerTest.java   |  89 ------
 .../VorgangManagerServerExtension.java        |   6 +-
 .../PostfachApiFacadeServiceTest.java         | 265 +-----------------
 8 files changed, 37 insertions(+), 432 deletions(-)

diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java
index 8d34d7d..de16ed8 100644
--- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteService.java
@@ -5,6 +5,7 @@ import java.util.stream.Stream;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
 import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2ExceptionHandler;
+import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2PostfachException;
 import de.ozgcloud.nachrichten.postfach.osiv2.transfer.Osi2PostfachService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
@@ -23,7 +24,7 @@ public class OsiPostfachRemoteService implements PostfachRemoteService {
 		try {
 			osi2PostfachService.sendMessage(nachricht);
 		} catch (RuntimeException e) {
-			throw exceptionHandler.derivePostfachException(e);
+			throw new Osi2PostfachException("sendMessage failed!", exceptionHandler.deriveMessageCode(e), e);
 		}
 	}
 
@@ -32,7 +33,7 @@ public class OsiPostfachRemoteService implements PostfachRemoteService {
 		try {
 			return osi2PostfachService.receiveMessages();
 		} catch (RuntimeException e) {
-			throw exceptionHandler.derivePostfachException(e);
+			throw new Osi2PostfachException("getAllMessages failed!", exceptionHandler.deriveMessageCode(e), e);
 		}
 	}
 
@@ -41,7 +42,7 @@ public class OsiPostfachRemoteService implements PostfachRemoteService {
 		try {
 			osi2PostfachService.deleteMessage(messageId);
 		} catch (RuntimeException e) {
-			throw exceptionHandler.derivePostfachException(e);
+			throw new Osi2PostfachException("deleteMessage failed!", exceptionHandler.deriveMessageCode(e), e);
 		}
 	}
 
diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandler.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandler.java
index f0adabf..1c1dc73 100644
--- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandler.java
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandler.java
@@ -13,25 +13,11 @@ import de.ozgcloud.nachrichten.postfach.osiv2.ServiceIfOsi2Enabled;
 @ServiceIfOsi2Enabled
 public class Osi2ExceptionHandler {
 
-	static final String UNEXPECTED_ERROR_MESSAGE = "An unexpected error occurred. Please report this to the osiv2-postfach maintainers.";
-
-	public Osi2PostfachException derivePostfachException(RuntimeException exception) {
-		if (exception instanceof Osi2RuntimeException osi2RuntimeException) {
-			return derivePostfachExceptionFromOsi2PostfachException(osi2RuntimeException);
-		}
-		return new Osi2PostfachException(UNEXPECTED_ERROR_MESSAGE, PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE, exception);
-	}
-
-	Osi2PostfachException derivePostfachExceptionFromOsi2PostfachException(Osi2RuntimeException osi2RuntimeException) {
-		var cause = osi2RuntimeException.getCause();
-		return new Osi2PostfachException(osi2RuntimeException.getMessage(), deriveMessageCode(cause), cause);
-	}
-
-	PostfachMessageCode deriveMessageCode(@Nullable Throwable cause) {
-		if (cause instanceof RestClientResponseException restClientResponseException) {
+	public PostfachMessageCode deriveMessageCode(@Nullable RuntimeException exception) {
+		if (exception instanceof RestClientResponseException restClientResponseException) {
 			return deriveMessageCodeFromRestClientResponseException(restClientResponseException);
 		}
-		if (cause instanceof ResourceAccessException) {
+		if (exception instanceof ResourceAccessException) {
 			return PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE;
 		}
 		// TODO KOP-3021 add message code for unsafe upload file
diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2QuarantineService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2QuarantineService.java
index b3fefcb..ea638e3 100644
--- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2QuarantineService.java
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2QuarantineService.java
@@ -79,8 +79,6 @@ public class Osi2QuarantineService {
 				.build();
 	}
 
-
-
 	synchronized boolean checkVirusScanCompleted(List<Osi2FileUpload> osi2FileMetadata) {
 		// TODO ...
 		return true;
@@ -90,10 +88,10 @@ public class Osi2QuarantineService {
 		try {
 			waitUntil(() -> checkVirusScanCompleted(osi2FileMetadata), POLLING_INTERVAL, POLLING_TIMEOUT);
 		} catch (ExecutionException e) {
-			if (e.getCause() instanceof Osi2RuntimeException osi2RuntimeException) {
-				throw osi2RuntimeException;
+			if (e.getCause() instanceof RuntimeException runtimeException) {
+				throw runtimeException;
 			}
-			throw new IllegalStateException("Unexpected exception Expect the scan to complete successfully!", e.getCause());
+			throw new IllegalStateException("Unexpected exception: Expect the scan to complete successfully!", e.getCause());
 		} catch (TimeoutException e) {
 			throw new Osi2RuntimeException("Expect the scan to complete after %d seconds!".formatted(POLLING_TIMEOUT.getSeconds()), e);
 		} catch (InterruptedException e) {
diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java
index 6266fa6..476b3c5 100644
--- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java
+++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeService.java
@@ -10,7 +10,6 @@ import org.springframework.core.io.AbstractResource;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.osiv2.ServiceIfOsi2Enabled;
 import de.ozgcloud.nachrichten.postfach.osiv2.config.Osi2PostfachProperties;
-import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2RuntimeException;
 import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.MessageExchangeApi;
 import de.ozgcloud.nachrichten.postfach.osiv2.gen.api.QuarantineApi;
 import de.ozgcloud.nachrichten.postfach.osiv2.model.FileChunkInfo;
@@ -30,14 +29,6 @@ public class PostfachApiFacadeService {
 	private final Osi2PostfachProperties.ApiConfiguration apiConfiguration;
 
 	public void sendMessage(PostfachNachricht nachricht, List<Osi2FileUpload> attachments) {
-		try {
-			sendMessageRaw(nachricht, attachments);
-		} catch (RuntimeException e) {
-			throw new Osi2RuntimeException("sendMessage failed!", e);
-		}
-	}
-
-	void sendMessageRaw(PostfachNachricht nachricht, List<Osi2FileUpload> attachments) {
 		messageExchangeApi.sendMessage(
 				requestMapper.mapMailboxId(nachricht),
 				requestMapper.mapOutSendMessageRequestV2(nachricht, attachments)
@@ -45,14 +36,6 @@ public class PostfachApiFacadeService {
 	}
 
 	public <T extends AbstractResource> void uploadChunk(FileChunkInfo chunkInfo, T chunkResource) {
-		try {
-			uploadChunkRaw(chunkInfo, chunkResource);
-		} catch (RuntimeException e) {
-			throw new Osi2RuntimeException("uploadChunk failed!", e);
-		}
-	}
-
-	<T extends AbstractResource> void uploadChunkRaw(FileChunkInfo chunkInfo, T chunkResource) {
 		quarantineApi.uploadChunk(
 				requestMapper.mapDomainChunkMetaData(chunkInfo),
 				apiConfiguration.getTenant(),
@@ -62,55 +45,23 @@ public class PostfachApiFacadeService {
 	}
 
 	public boolean checkUploadSuccessful(final String messageId) {
-		try {
-			return checkUploadSuccessfulRaw(messageId);
-		} catch (RuntimeException e) {
-			throw new Osi2RuntimeException("checkUploadSuccessful failed!", e);
-		}
-	}
-
-	boolean checkUploadSuccessfulRaw(final String messageId) {
 		return responseMapper.isSafe(
 				quarantineApi.getUploadStatus(UUID.fromString(messageId))
 		);
 	}
 
 	public List<String> fetchPendingMessageIds() {
-		try {
-			return fetchPendingMessageIdsRaw();
-		} catch (RuntimeException e) {
-			throw new Osi2RuntimeException("fetchPendingMessageIds failed!", e);
-		}
-	}
-
-	List<String> fetchPendingMessageIdsRaw() {
 		return responseMapper.toMessageIds(
 				messageExchangeApi.receiveMessages(MAX_NUMBER_RECEIVED_MESSAGES, 0)
 		);
 	}
 
 	public PostfachNachricht fetchMessageById(final String messageId) {
-		try {
-			return fetchMessageByIdRaw(messageId);
-		} catch (RuntimeException e) {
-			throw new Osi2RuntimeException("fetchMessageById failed!", e);
-		}
-	}
-
-	PostfachNachricht fetchMessageByIdRaw(final String messageId) {
 		var messageReply = messageExchangeApi.getMessage(UUID.fromString(messageId));
 		return responseMapper.toPostfachNachricht(messageReply);
 	}
 
 	public void deleteMessage(final String messageId) {
-		try {
-			deleteMessageRaw(messageId);
-		} catch (RuntimeException e) {
-			throw new Osi2RuntimeException("deleteMessage failed!", e);
-		}
-	}
-
-	void deleteMessageRaw(final String messageId) {
 		messageExchangeApi.deleteMessage(UUID.fromString(messageId));
 	}
 }
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java
index 6c95d87..afb85ea 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceTest.java
@@ -13,9 +13,9 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2ExceptionHandler;
-import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2PostfachException;
 import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
 import de.ozgcloud.nachrichten.postfach.osiv2.transfer.Osi2PostfachService;
 
@@ -38,6 +38,8 @@ class OsiPostfachRemoteServiceTest {
 			.subject("Nachricht 2")
 			.build();
 
+	private final PostfachMessageCode postfachMessageCode = PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE;
+
 	@DisplayName("send message")
 	@Nested
 	class TestSendMessage {
@@ -54,12 +56,12 @@ class OsiPostfachRemoteServiceTest {
 		@Test
 		void shouldThrowOsiPostfachExceptionOnRuntimeException() {
 			var runtimeException = createRuntimeException();
-			var osi2PostfachException = createOsi2PostfachException();
 			doThrow(runtimeException).when(osi2PostfachService).sendMessage(nachricht1);
-			when(exceptionHandler.derivePostfachException(runtimeException)).thenReturn(osi2PostfachException);
+			when(exceptionHandler.deriveMessageCode(runtimeException)).thenReturn(postfachMessageCode);
 
 			assertThatThrownBy(() -> osiPostfachRemoteService.sendMessage(nachricht1))
-					.isEqualTo(osi2PostfachException);
+					.hasFieldOrPropertyWithValue("messageCode", postfachMessageCode)
+					.hasCause(runtimeException);
 		}
 
 	}
@@ -82,12 +84,12 @@ class OsiPostfachRemoteServiceTest {
 		@Test
 		void shouldThrowOsiPostfachExceptionOnRuntimeException() {
 			var runtimeException = createRuntimeException();
-			var osi2PostfachException = createOsi2PostfachException();
 			doThrow(runtimeException).when(osi2PostfachService).receiveMessages();
-			when(exceptionHandler.derivePostfachException(runtimeException)).thenReturn(osi2PostfachException);
+			when(exceptionHandler.deriveMessageCode(runtimeException)).thenReturn(postfachMessageCode);
 
 			assertThatThrownBy(() -> osiPostfachRemoteService.getAllMessages())
-					.isEqualTo(osi2PostfachException);
+					.hasFieldOrPropertyWithValue("messageCode", postfachMessageCode)
+					.hasCause(runtimeException);
 		}
 	}
 
@@ -107,12 +109,12 @@ class OsiPostfachRemoteServiceTest {
 		@Test
 		void shouldThrowOsiPostfachExceptionOnRuntimeException() {
 			var runtimeException = createRuntimeException();
-			var osi2PostfachException = createOsi2PostfachException();
 			doThrow(runtimeException).when(osi2PostfachService).deleteMessage(any());
-			when(exceptionHandler.derivePostfachException(runtimeException)).thenReturn(osi2PostfachException);
+			when(exceptionHandler.deriveMessageCode(runtimeException)).thenReturn(postfachMessageCode);
 
 			assertThatThrownBy(() -> osiPostfachRemoteService.deleteMessage(MESSAGE_ID_1))
-					.isEqualTo(osi2PostfachException);
+					.hasFieldOrPropertyWithValue("messageCode", postfachMessageCode)
+					.hasCause(runtimeException);
 		}
 	}
 
@@ -144,7 +146,4 @@ class OsiPostfachRemoteServiceTest {
 		return new RuntimeException();
 	}
 
-	private Osi2PostfachException createOsi2PostfachException() {
-		return new Osi2PostfachException("abc", null, null);
-	}
 }
\ No newline at end of file
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandlerTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandlerTest.java
index 446c19b..8d0256f 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandlerTest.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/exception/Osi2ExceptionHandlerTest.java
@@ -1,13 +1,11 @@
 package de.ozgcloud.nachrichten.postfach.osiv2.exception;
 
 import static de.ozgcloud.nachrichten.postfach.PostfachMessageCode.*;
-import static de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2ExceptionHandler.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import java.io.IOException;
 
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
@@ -22,93 +20,6 @@ class Osi2ExceptionHandlerTest {
 	@Spy
 	private Osi2ExceptionHandler handler;
 
-	@DisplayName("derive postfach exception")
-	@Nested
-	class TestDerivePostfachException {
-
-		@Mock
-		Osi2RuntimeException osi2RuntimeException;
-
-		@Mock
-		Osi2PostfachException postfachException;
-
-		@Mock
-		RuntimeException exception;
-
-		@DisplayName("should derive postfach exception from osi2 postfach exception")
-		@Test
-		void shouldDerivePostfachExceptionFromOsi2PostfachException() {
-			doReturn(postfachException).when(handler).derivePostfachExceptionFromOsi2PostfachException(osi2RuntimeException);
-
-			var result = handler.derivePostfachException(osi2RuntimeException);
-
-			assertThat(result).isEqualTo(postfachException);
-		}
-
-
-		@DisplayName("should return unexpected error exception with message by default")
-		@Test
-		void shouldReturnUnexpectedErrorException() {
-			var result = handler.derivePostfachException(exception);
-
-			assertThat(result.getMessage()).startsWith(UNEXPECTED_ERROR_MESSAGE);
-		}
-
-		@DisplayName("should return unexpected error exception with cause by default")
-		@Test
-		void shouldReturnUnexpectedErrorExceptionWithCauseByDefault() {
-			var result = handler.derivePostfachException(exception);
-
-			assertThat(result.getCause()).isEqualTo(exception);
-		}
-	}
-
-	@DisplayName("derive postfach exception from osi2 postfach exception")
-	@Nested
-	class TestDerivePostfachExceptionFromOsi2PostfachException {
-
-		private Osi2RuntimeException osi2RuntimeException;
-
-		static final String TEST_MESSAGE = "test-message";
-
-		@Mock
-		RuntimeException cause;
-
-		@BeforeEach
-		void mock() {
-			osi2RuntimeException = new Osi2RuntimeException(TEST_MESSAGE, cause);
-			doReturn(PROCESS_FAILED_MESSAGE_CODE).when(handler).deriveMessageCode(cause);
-		}
-
-		@DisplayName("should return with message")
-		@Test
-		void shouldReturnWithMessage() {
-			var result = handler.derivePostfachExceptionFromOsi2PostfachException(osi2RuntimeException);
-
-			assertThat(result.getMessage()).startsWith(TEST_MESSAGE);
-		}
-
-		@DisplayName("should return with cause")
-		@Test
-		void shouldReturnWithCause() {
-			var result = handler.derivePostfachExceptionFromOsi2PostfachException(osi2RuntimeException);
-
-			assertThat(result)
-					.extracting(Exception::getCause)
-					.isEqualTo(cause);
-		}
-
-		@DisplayName("should return with message code")
-		@Test
-		void shouldReturnWithMessageCode() {
-			var result = handler.derivePostfachExceptionFromOsi2PostfachException(osi2RuntimeException);
-
-			assertThat(result)
-					.extracting(Osi2PostfachException::getMessageCode)
-					.isEqualTo(PROCESS_FAILED_MESSAGE_CODE);
-		}
-	}
-
 	@DisplayName("derive message code")
 	@Nested
 	class TestDeriveMessageCode {
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
index 5b370d9..494577a 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
@@ -11,9 +11,11 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 import org.testcontainers.containers.MongoDBContainer;
 import org.testcontainers.containers.Network;
 import org.testcontainers.containers.output.OutputFrame;
+import org.testcontainers.lifecycle.Startables;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
@@ -32,13 +34,13 @@ public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAl
 		setupVorgangManager();
 	}
 
+	@SneakyThrows
 	private void setupVorgangManager() {
 		var network = Network.newNetwork();
 		mongoDBContainer = new MongoDBContainer("mongo:7.0")
 				.withStartupTimeout(Duration.ofMinutes(1))
 				.withNetworkAliases(MONGODB_NETWORK_ALIAS)
 				.withNetwork(network);
-		mongoDBContainer.start();
 		vorgangManagerContainer = new VorgangManagerContainer()
 				.withEnv(Map.of(
 						"spring_profiles_active", "local",
@@ -51,7 +53,7 @@ public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAl
 				.withLogConsumer(this::logVorgangManager)
 				.withStartupTimeout(Duration.ofMinutes(2))
 				.dependsOn(mongoDBContainer);
-		vorgangManagerContainer.start();
+		Startables.deepStart(vorgangManagerContainer, mongoDBContainer).get();
 	}
 
 	private void logVorgangManager(OutputFrame outputFrame) {
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java
index 97fc19a..06f94a9 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java
@@ -16,11 +16,9 @@ import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
-import org.springframework.web.client.RestClientResponseException;
 
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.osiv2.config.Osi2PostfachProperties;
-import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2RuntimeException;
 import de.ozgcloud.nachrichten.postfach.osiv2.factory.FileChunkInfoTestFactory;
 import de.ozgcloud.nachrichten.postfach.osiv2.factory.MessageExchangeReceiveMessagesResponseTestFactory;
 import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
@@ -61,46 +59,6 @@ class PostfachApiFacadeServiceTest {
 	@DisplayName("send message")
 	@Nested
 	class TestSendMessage {
-		private final List<Osi2FileUpload> files = List.of(Osi2FileUploadTestFactory.create());
-
-		private final PostfachNachricht nachricht = PostfachNachrichtTestFactory.create();
-
-		@DisplayName("without exception")
-		@Nested
-		class TestWithoutException {
-
-			@DisplayName("should call sendMessage")
-			@Test
-			void shouldCallSendMessage() {
-				doNothing().when(service).sendMessageRaw(any(), any());
-
-				service.sendMessage(nachricht, files);
-
-				verify(service).sendMessageRaw(nachricht, files);
-			}
-		}
-
-		@DisplayName("with restclient response exception")
-		@Nested
-		class TestWithRestclientResponseException {
-			@Mock
-			RestClientResponseException restClientResponseException;
-
-			@DisplayName("should rethrow as osi2 runtime exception")
-			@Test
-			void shouldRethrowAsOsi2RuntimeException() {
-				doThrow(restClientResponseException).when(service).sendMessageRaw(any(), any());
-
-				assertThatThrownBy(() -> service.sendMessage(nachricht, files))
-						.isInstanceOf(Osi2RuntimeException.class)
-						.hasCause(restClientResponseException);
-			}
-		}
-	}
-
-	@DisplayName("send message raw")
-	@Nested
-	class TestSendMessageRaw {
 
 		@Mock
 		OutSendMessageRequestV2 outSendMessageRequestV2;
@@ -122,7 +80,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call mapMailboxId")
 		@Test
 		void shouldCallMapMailboxId() {
-			service.sendMessageRaw(nachricht, files);
+			service.sendMessage(nachricht, files);
 
 			verify(osi2RequestMapper).mapMailboxId(nachricht);
 		}
@@ -130,7 +88,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call mapOutSendMessageRequestV2")
 		@Test
 		void shouldCallMapOutSendMessageRequestV2() {
-			service.sendMessageRaw(nachricht, files);
+			service.sendMessage(nachricht, files);
 
 			verify(osi2RequestMapper).mapOutSendMessageRequestV2(nachricht, files);
 		}
@@ -138,7 +96,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call sendMessage")
 		@Test
 		void shouldCallSendMessage() {
-			service.sendMessageRaw(nachricht, files);
+			service.sendMessage(nachricht, files);
 
 			verify(messageExchangeApi).sendMessage(MAILBOX_ID, outSendMessageRequestV2);
 		}
@@ -148,42 +106,6 @@ class PostfachApiFacadeServiceTest {
 	@DisplayName("fetch pending message ids")
 	@Nested
 	class TestFetchPendingMessageIds {
-		@DisplayName("without exception")
-		@Nested
-		class TestWithoutException {
-
-			@DisplayName("should return fetchPendingMessageIdsRaw")
-			@Test
-			void shouldReturnFetchPendingMessageIdsRaw() {
-				doReturn(List.of(MESSAGE_ID_1, MESSAGE_ID_2)).when(service).fetchPendingMessageIdsRaw();
-
-				var result = service.fetchPendingMessageIds();
-
-				assertThat(result).containsExactly(MESSAGE_ID_1, MESSAGE_ID_2);
-			}
-		}
-
-		@DisplayName("with restclient response exception")
-		@Nested
-		class TestWithRestclientResponseException {
-			@Mock
-			RestClientResponseException restClientResponseException;
-
-			@DisplayName("should rethrow as osi2 runtime exception")
-			@Test
-			void shouldRethrowAsOsi2RuntimeException() {
-				doThrow(restClientResponseException).when(service).fetchPendingMessageIdsRaw();
-
-				assertThatThrownBy(() -> service.fetchPendingMessageIds())
-						.isInstanceOf(Osi2RuntimeException.class)
-						.hasCause(restClientResponseException);
-			}
-		}
-	}
-
-	@DisplayName("fetch pending message ids raw")
-	@Nested
-	class TestFetchPendingMessageIdsRaw {
 
 		@DisplayName("with two pending messages")
 		@Nested
@@ -254,55 +176,6 @@ class PostfachApiFacadeServiceTest {
 	@Nested
 	class TestFetchMessageById {
 
-		private final PostfachNachricht nachricht = PostfachNachrichtTestFactory.create();
-
-		@DisplayName("without exception")
-		@Nested
-		class TestWithoutException {
-			@BeforeEach
-			void mock() {
-				doReturn(nachricht).when(service).fetchMessageByIdRaw(MESSAGE_ID_1);
-			}
-
-			@DisplayName("should call fetchMessageByIdRaw")
-			@Test
-			void shouldCallFetchMessageByIdRaw() {
-				service.fetchMessageById(MESSAGE_ID_1);
-
-				verify(service).fetchMessageByIdRaw(MESSAGE_ID_1);
-			}
-
-			@DisplayName("should return")
-			@Test
-			void shouldReturn() {
-				var result = service.fetchMessageById(MESSAGE_ID_1);
-
-				assertThat(result).isEqualTo(nachricht);
-			}
-		}
-
-		@DisplayName("with restclient response exception")
-		@Nested
-		class TestWithRestclientResponseException {
-			@Mock
-			RestClientResponseException restClientResponseException;
-
-			@DisplayName("should rethrow as osi2 runtime exception")
-			@Test
-			void shouldRethrowAsOsi2RuntimeException() {
-				doThrow(restClientResponseException).when(service).fetchMessageByIdRaw(any());
-
-				assertThatThrownBy(() -> service.fetchMessageById(MESSAGE_ID_1))
-						.isInstanceOf(Osi2RuntimeException.class)
-						.hasCause(restClientResponseException);
-			}
-		}
-	}
-
-	@DisplayName("fetch Message by Id raw")
-	@Nested
-	class TestFetchMessageByIdRaw {
-
 		@Mock
 		V1ReplyMessage replyMessage;
 
@@ -310,7 +183,7 @@ class PostfachApiFacadeServiceTest {
 		void shouldCallGetMessage() {
 			when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage);
 
-			service.fetchMessageByIdRaw(MESSAGE_ID_1);
+			service.fetchMessageById(MESSAGE_ID_1);
 
 			verify(messageExchangeApi).getMessage(any());
 		}
@@ -320,7 +193,7 @@ class PostfachApiFacadeServiceTest {
 			when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage);
 			when(osi2ResponseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create());
 
-			service.fetchMessageByIdRaw(MESSAGE_ID_1);
+			service.fetchMessageById(MESSAGE_ID_1);
 
 			verify(osi2ResponseMapper).toPostfachNachricht(any());
 		}
@@ -330,7 +203,7 @@ class PostfachApiFacadeServiceTest {
 			when(messageExchangeApi.getMessage(any())).thenReturn(replyMessage);
 			when(osi2ResponseMapper.toPostfachNachricht(any())).thenReturn(PostfachNachrichtTestFactory.create());
 
-			var postfachNachricht = service.fetchMessageByIdRaw(MESSAGE_ID_1);
+			var postfachNachricht = service.fetchMessageById(MESSAGE_ID_1);
 
 			assertThat(postfachNachricht).isInstanceOf(PostfachNachricht.class);
 		}
@@ -339,43 +212,6 @@ class PostfachApiFacadeServiceTest {
 	@DisplayName("upload chunk")
 	@Nested
 	class TestUploadChunk {
-
-		@Mock
-		FileChunkResource chunkResource;
-
-		private final FileChunkInfo info = FileChunkInfoTestFactory.create();
-
-		@DisplayName("should call uploadChunkRaw")
-		@Test
-		void shouldCallUploadChunkRaw() {
-			doNothing().when(service).uploadChunkRaw(any(), any());
-
-			service.uploadChunk(info, chunkResource);
-
-			verify(service).uploadChunkRaw(info, chunkResource);
-		}
-
-		@DisplayName("with restclient response exception")
-		@Nested
-		class TestWithRestclientResponseException {
-			@Mock
-			RestClientResponseException restClientResponseException;
-
-			@DisplayName("should rethrow as osi2 runtime exception")
-			@Test
-			void shouldRethrowAsOsi2RuntimeException() {
-				doThrow(restClientResponseException).when(service).uploadChunkRaw(any(), any());
-
-				assertThatThrownBy(() -> service.uploadChunk(info, chunkResource))
-						.isInstanceOf(Osi2RuntimeException.class)
-						.hasCause(restClientResponseException);
-			}
-		}
-	}
-
-	@DisplayName("upload chunk raw")
-	@Nested
-	class TestUploadChunkRaw {
 		@Mock
 		FileChunkResource chunkResource;
 
@@ -397,7 +233,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call mapDomainChunkMetadata")
 		@Test
 		void shouldCallMapDomainChunkMetadata() {
-			service.uploadChunkRaw(info, chunkResource);
+			service.uploadChunk(info, chunkResource);
 
 			verify(osi2RequestMapper).mapDomainChunkMetaData(info);
 		}
@@ -405,7 +241,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call uploadChunk")
 		@Test
 		void shouldCallUploadChunk() {
-			service.uploadChunkRaw(info, chunkResource);
+			service.uploadChunk(info, chunkResource);
 
 			verify(quarantineApi).uploadChunk(domainChunkMetaData, TENANT, NAME_IDENTIFIER, chunkResource);
 		}
@@ -415,53 +251,6 @@ class PostfachApiFacadeServiceTest {
 	@Nested
 	class TestCheckUploadSuccessful {
 
-		@DisplayName("without exception")
-		@Nested
-		class TestWithoutException {
-			@BeforeEach
-			void mock() {
-				doReturn(true).when(service).checkUploadSuccessfulRaw(any());
-			}
-
-			@DisplayName("should call checkUploadSuccessfulRaw")
-			@Test
-			void shouldCallCheckUploadSuccessfulRaw() {
-				service.checkUploadSuccessful(MESSAGE_ID_1);
-
-				verify(service).checkUploadSuccessfulRaw(MESSAGE_ID_1);
-			}
-
-			@DisplayName("should return")
-			@Test
-			void shouldReturn() {
-				var result = service.checkUploadSuccessful(MESSAGE_ID_1);
-
-				assertThat(result).isTrue();
-			}
-		}
-
-		@DisplayName("with restclient response exception")
-		@Nested
-		class TestWithRestclientResponseException {
-			@Mock
-			RestClientResponseException restClientResponseException;
-
-			@DisplayName("should rethrow as osi2 runtime exception")
-			@Test
-			void shouldRethrowAsOsi2RuntimeException() {
-				doThrow(restClientResponseException).when(service).checkUploadSuccessfulRaw(any());
-
-				assertThatThrownBy(() -> service.checkUploadSuccessful(MESSAGE_ID_1))
-						.isInstanceOf(Osi2RuntimeException.class)
-						.hasCause(restClientResponseException);
-			}
-		}
-	}
-
-	@DisplayName("check upload successful raw")
-	@Nested
-	class TestCheckUploadSuccessfulRaw {
-
 		private final QuarantineStatus uploadStatus = QuarantineStatus.SAFE;
 
 		@BeforeEach
@@ -473,7 +262,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call getUploadStatus")
 		@Test
 		void shouldCallGetUploadStatus() {
-			service.checkUploadSuccessfulRaw(MESSAGE_ID_1);
+			service.checkUploadSuccessful(MESSAGE_ID_1);
 
 			verify(quarantineApi).getUploadStatus(UUID.fromString(MESSAGE_ID_1));
 		}
@@ -481,7 +270,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should call isSafe")
 		@Test
 		void shouldCallIsSafe() {
-			service.checkUploadSuccessfulRaw(MESSAGE_ID_1);
+			service.checkUploadSuccessful(MESSAGE_ID_1);
 
 			verify(osi2ResponseMapper).isSafe(uploadStatus);
 		}
@@ -489,7 +278,7 @@ class PostfachApiFacadeServiceTest {
 		@DisplayName("should return true")
 		@Test
 		void shouldReturnTrue() {
-			var result = service.checkUploadSuccessfulRaw(MESSAGE_ID_1);
+			var result = service.checkUploadSuccessful(MESSAGE_ID_1);
 
 			assertThat(result).isTrue();
 		}
@@ -499,38 +288,6 @@ class PostfachApiFacadeServiceTest {
 	@DisplayName("delete message")
 	@Nested
 	class TestDeleteMessage {
-
-		@DisplayName("should call deleteMessage")
-		@Test
-		void shouldCallDeleteMessage() {
-			doNothing().when(service).deleteMessageRaw(any());
-
-			service.deleteMessage(MESSAGE_ID_1);
-
-			verify(service).deleteMessageRaw(MESSAGE_ID_1);
-		}
-
-		@DisplayName("with restclient response exception")
-		@Nested
-		class TestWithRestclientResponseException {
-			@Mock
-			RestClientResponseException restClientResponseException;
-
-			@DisplayName("should rethrow as osi2 runtime exception")
-			@Test
-			void shouldRethrowAsOsi2RuntimeException() {
-				doThrow(restClientResponseException).when(service).deleteMessageRaw(any());
-
-				assertThatThrownBy(() -> service.deleteMessage(MESSAGE_ID_1))
-						.isInstanceOf(Osi2RuntimeException.class)
-						.hasCause(restClientResponseException);
-			}
-		}
-	}
-
-	@DisplayName("Delete Message raw")
-	@Nested
-	class TestDeleteMessageRaw {
 		@Mock
 		MessageExchangeDeleteMessageResponse replyMessage;
 
-- 
GitLab