From 887279f75be51aeccc1ab81764363c42ae7f1db6 Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Mon, 9 Sep 2024 12:29:37 +0200 Subject: [PATCH] OZG-6240 KOP-2627 Implement required getMessage behaviour --- .../de/ozgcloud/xta/client/XtaClient.java | 15 ++++++-- .../model/XtaMessageAndTransportReport.java | 13 +++++++ .../ozgcloud/xta/client/XtaClientITCase.java | 22 +++++++++++- .../de/ozgcloud/xta/client/XtaClientTest.java | 35 ++++++++++++++++--- 4 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 src/main/java/de/ozgcloud/xta/client/model/XtaMessageAndTransportReport.java diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java index 03ca7b8..ea84475 100644 --- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java +++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java @@ -5,8 +5,8 @@ import jakarta.validation.constraints.NotBlank; import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.WrappedXtaService; import de.ozgcloud.xta.client.model.XtaIdentifier; -import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing; +import de.ozgcloud.xta.client.model.XtaMessageAndTransportReport; import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException; import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; @@ -53,9 +53,18 @@ public class XtaClient { return service.getStatusList(clientIdentifier, config.getMaxListItems()); } - public XtaMessage getMessage(@NotBlank String clientIdentifier, @NotBlank String messageId) + public XtaMessageAndTransportReport getMessage(@NotBlank String clientIdentifier, @NotBlank String messageId) throws XTAWSTechnicalProblemException, PermissionDeniedException, InvalidMessageIDException { - return service.getMessage(messageId, deriveIdentifier(clientIdentifier)); + var identifier = deriveIdentifier(clientIdentifier); + + var message = service.getMessage(messageId, identifier); + service.close(messageId, identifier); + + var transportReport = service.getTransportReport(messageId, identifier); + return XtaMessageAndTransportReport.builder() + .message(message) + .transportReport(transportReport) + .build(); } public void close(@NotBlank String clientIdentifier, @NotBlank String messageId) diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessageAndTransportReport.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageAndTransportReport.java new file mode 100644 index 0000000..6fed361 --- /dev/null +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessageAndTransportReport.java @@ -0,0 +1,13 @@ +package de.ozgcloud.xta.client.model; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +import lombok.Builder; + +@Builder +public record XtaMessageAndTransportReport( + @NotNull @Valid XtaMessage message, + @NotNull @Valid XtaTransportReport transportReport +) { +} diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java index da95fab..acbad8c 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientITCase.java @@ -92,7 +92,27 @@ class XtaClientITCase { void shouldReturnMessage() { var result = client.getMessage(CLIENT_IDENTIFIER1.value(), messageId); - assertThat(result.metaData().messageId()).isEqualTo(messageId); + assertThat(result.message().metaData().messageId()).isEqualTo(messageId); + } + + @DisplayName("should return transport report") + @Test + @SneakyThrows + void shouldReturnTransportReport() { + var result = client.getMessage(CLIENT_IDENTIFIER1.value(), messageId); + + assertThat(result.transportReport().metaData().messageId()).isEqualTo(messageId); + } + + + @DisplayName("should throw invalid message id exception on second call due to closed message") + @Test + @SneakyThrows + void shouldThrowInvalidMessageIdExceptionOnSecondCallDueToClosedMessage() { + client.getMessage(CLIENT_IDENTIFIER1.value(), messageId); + + assertThatThrownBy(() -> client.getMessage(CLIENT_IDENTIFIER1.value(), messageId)) + .isInstanceOf(InvalidMessageIDException.class); } @DisplayName("should throw invalid message id exception for modified message id") diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java b/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java index 45e6a1f..6105b1e 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientTest.java @@ -21,6 +21,7 @@ import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.core.WrappedXtaService; import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing; +import de.ozgcloud.xta.client.model.XtaTransportReport; import lombok.SneakyThrows; @ExtendWith(MockitoExtension.class) @@ -128,16 +129,42 @@ class XtaClientTest { @Mock XtaMessage xtaMessage; - @DisplayName("should return") - @Test + @Mock + XtaTransportReport xtaTransportReport; + + @BeforeEach @SneakyThrows - void shouldReturn() { + void mock() { doReturn(SELF_IDENTIFIER).when(client).deriveIdentifier(SELF_IDENTIFIER_VALUE); when(service.getMessage(MESSAGE_ID, SELF_IDENTIFIER)).thenReturn(xtaMessage); + when(service.getTransportReport(MESSAGE_ID, SELF_IDENTIFIER)).thenReturn(xtaTransportReport); + } + + @DisplayName("should call close") + @Test + @SneakyThrows + void shouldCallClose() { + client.getMessage(SELF_IDENTIFIER_VALUE, MESSAGE_ID); + verify(service).close(MESSAGE_ID, SELF_IDENTIFIER); + } + + @DisplayName("should return with message") + @Test + @SneakyThrows + void shouldReturn() { + var result = client.getMessage(SELF_IDENTIFIER_VALUE, MESSAGE_ID); + + assertThat(result.message()).isEqualTo(xtaMessage); + } + + @DisplayName("should return with transport report") + @Test + @SneakyThrows + void shouldReturnWithTransportReport() { var result = client.getMessage(SELF_IDENTIFIER_VALUE, MESSAGE_ID); - assertThat(result).isEqualTo(xtaMessage); + assertThat(result.transportReport()).isEqualTo(xtaTransportReport); } } -- GitLab