diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java index 03ca7b83dee7c8a16fdf3d01cf31cd3215335477..ea8447521b9eabc7aa9559315f01f0d755d6f4cd 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 0000000000000000000000000000000000000000..6fed361806962dbb1f57c2a747ce65839cd79d4d --- /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 da95fabc0366ea4d30288bc984564e4d780c9af3..acbad8cb7d0f2d0017038e30e1bef1e1f67c1cae 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 45e6a1ffd56d409b891e14555a3bb0f9fa7d586f..6105b1ee6a5636c877964a815c17931b12fe9a9e 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); } }