From 3b3badd0c2c5aa56e4565b5f8836e559eb321d7a Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Thu, 20 Feb 2025 16:01:51 +0100 Subject: [PATCH] OZG-4097 error-handling: Provide messageCode for unknown postfachId --- .../osiv2/exception/Osi2ExceptionHandler.java | 13 ++++++++----- .../osiv2/OsiPostfachRemoteServiceITCase.java | 13 +++++++++++++ .../osiv2/exception/Osi2ExceptionHandlerTest.java | 15 ++++++--------- 3 files changed, 27 insertions(+), 14 deletions(-) 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 b90e797..395f427 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 @@ -1,9 +1,8 @@ package de.ozgcloud.nachrichten.postfach.osiv2.exception; -import java.io.IOException; - import jakarta.annotation.Nullable; +import org.springframework.http.HttpStatusCode; import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestClientResponseException; @@ -24,11 +23,15 @@ public class Osi2ExceptionHandler { } PostfachMessageCode deriveMessageCodeFromRestClientResponseException(RestClientResponseException restClientResponseException) { - var cause = restClientResponseException.getCause(); - if (cause instanceof IOException) { - return PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE; + if (hasStatusNotFound(restClientResponseException)) { + return PostfachMessageCode.SEND_FAILED_UNKNOWN_POSTFACH_ID_MESSAGE_CODE; } return PostfachMessageCode.PROCESS_FAILED_MESSAGE_CODE; } + private boolean hasStatusNotFound(RestClientResponseException restClientResponseException) { + return restClientResponseException.getStatusCode().isSameCodeAs(HttpStatusCode.valueOf(404)); + } + + } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java index 1460c96..550d15b 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java @@ -144,6 +144,19 @@ class OsiPostfachRemoteServiceITCase { .hasFieldOrPropertyWithValue("messageCode", PostfachMessageCode.SERVER_CONNECTION_FAILED_MESSAGE_CODE); } + @DisplayName("should throw postfach exception with unknown postfach id error code") + @Test + void shouldThrowPostfachExceptionWithUnknownPostfachIdErrorCode() { + postfachFacadeMockServer.stubFor(post(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}")) + .willReturn(notFound()) + ); + var postfachNachricht = PostfachNachrichtTestFactory.create(); + + assertThatThrownBy(() -> osiPostfachRemoteService.sendMessage(postfachNachricht)) + .isInstanceOf(Osi2PostfachException.class) + .hasFieldOrPropertyWithValue("messageCode", PostfachMessageCode.SEND_FAILED_UNKNOWN_POSTFACH_ID_MESSAGE_CODE); + } + @DisplayName("should delete attachments on upload exception") @Test void shouldDeleteAttachmentsOnUploadException() { 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 14671a0..df51704 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 @@ -4,14 +4,13 @@ import static de.ozgcloud.nachrichten.postfach.PostfachMessageCode.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; -import java.io.IOException; - import org.junit.jupiter.api.DisplayName; 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 org.springframework.http.HttpStatusCode; import org.springframework.web.client.RestClientResponseException; class Osi2ExceptionHandlerTest { @@ -49,26 +48,24 @@ class Osi2ExceptionHandlerTest { @DisplayName("derive message code from rest client response exception") @Nested class TestDeriveOsi2MessageCodeFromRestClientResponseException { - @Mock - IOException ioException; @Mock private RestClientResponseException restClientResponseException; - @DisplayName("should return server connection failed message code") + @DisplayName("should return unknown postfach id error code for 404") @Test - void shouldReturnServerConnectionFailedMessageCode() { - when(restClientResponseException.getCause()).thenReturn(ioException); + void shouldReturnUnknownPostfachIdErrorCodeFor404() { + when(restClientResponseException.getStatusCode()).thenReturn(HttpStatusCode.valueOf(404)); var result = handler.deriveMessageCodeFromRestClientResponseException(restClientResponseException); - assertThat(result).isEqualTo(SERVER_CONNECTION_FAILED_MESSAGE_CODE); + assertThat(result).isEqualTo(SEND_FAILED_UNKNOWN_POSTFACH_ID_MESSAGE_CODE); } @DisplayName("should return process failed message code by default") @Test void shouldReturnProcessFailedMessageCodeByDefault() { - when(restClientResponseException.getCause()).thenReturn(null); + when(restClientResponseException.getStatusCode()).thenReturn(HttpStatusCode.valueOf(500)); var result = handler.deriveMessageCodeFromRestClientResponseException(restClientResponseException); -- GitLab