Skip to content
Snippets Groups Projects
Commit 6344ae87 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-6240 KOP-2586 Add getMessage and close call to client

parent d924b74f
No related branches found
No related tags found
No related merge requests found
...@@ -2,13 +2,12 @@ package de.ozgcloud.xta.client; ...@@ -2,13 +2,12 @@ package de.ozgcloud.xta.client;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import org.apache.commons.lang3.NotImplementedException;
import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.core.WrappedXtaService; import de.ozgcloud.xta.client.core.WrappedXtaService;
import de.ozgcloud.xta.client.model.Identifier; import de.ozgcloud.xta.client.model.Identifier;
import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessage;
import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing; import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing;
import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; import genv3.de.xoev.transport.xta.x211.PermissionDeniedException;
import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
import lombok.AccessLevel; import lombok.AccessLevel;
...@@ -25,47 +24,49 @@ public class XtaClient { ...@@ -25,47 +24,49 @@ public class XtaClient {
private final XtaClientConfig config; private final XtaClientConfig config;
/** /**
* Fetch metadata of pending messages sent to the {@code xtaIdentifier}. * Fetch metadata of pending messages sent to the {@code xtaIdentifier}. The returned listing contains at most
* The returned listing contains at most {@link de.ozgcloud.xta.client.config.XtaClientConfig#getMaxListItems() maxListItems} messages. * {@link de.ozgcloud.xta.client.config.XtaClientConfig#getMaxListItems() maxListItems} messages. Use the {@code requestId} to
* Use the {@code requestId} to {@link #close(String) close} pending messages. * {@link #close(String) close} pending messages. To fetch the next messages, use {@link #getNextMessagesMetadata(String)}. Note that
* To fetch the next messages, use {@link #getNextMessagesMetadata(String)}. * {@code xtaIdentifier} has to be configured as a
* Note that {@code xtaIdentifier} has to be configured as a {@link de.ozgcloud.xta.client.config.XtaClientConfig#getClientIdentifiers() clientIdentifiers}. * {@link de.ozgcloud.xta.client.config.XtaClientConfig#getClientIdentifiers() clientIdentifiers}.
* *
* @param xtaIdentifier the client identifier value to fetch messages for * @param clientIdentifier the client identifier value to fetch messages for
* @return the listing result with metadata of messages * @return the listing result with metadata of messages
*/ */
public XtaMessageMetaDataListing getMessagesMetadata(@NotBlank String xtaIdentifier) public XtaMessageMetaDataListing getMessagesMetadata(@NotBlank String clientIdentifier)
throws XTAWSTechnicalProblemException, PermissionDeniedException { throws XTAWSTechnicalProblemException, PermissionDeniedException {
var clientIdentifier = deriveIdentifier(xtaIdentifier); var identifier = deriveIdentifier(clientIdentifier);
service.checkAccountActive(clientIdentifier); service.checkAccountActive(identifier);
return getStatusList(clientIdentifier); return getStatusList(identifier);
} }
/** /**
* Fetch metadata of pending messages sent to the {@code xtaIdentifier}. * Fetch metadata of pending messages sent to the {@code xtaIdentifier}. This method skips checks but otherwise behaves exactly as
* This method skips checks but otherwise behaves exactly as {@link #getMessagesMetadata(String)}. * {@link #getMessagesMetadata(String)}.
*/ */
public XtaMessageMetaDataListing getNextMessagesMetadata(@NotBlank String xtaIdentifier) public XtaMessageMetaDataListing getNextMessagesMetadata(@NotBlank String clientIdentifier)
throws XTAWSTechnicalProblemException, PermissionDeniedException { throws XTAWSTechnicalProblemException, PermissionDeniedException {
return getStatusList(deriveIdentifier(xtaIdentifier)); return getStatusList(deriveIdentifier(clientIdentifier));
} }
private XtaMessageMetaDataListing getStatusList(Identifier clientIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException { private XtaMessageMetaDataListing getStatusList(Identifier clientIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException {
return service.getStatusList(clientIdentifier, config.getMaxListItems()); return service.getStatusList(clientIdentifier, config.getMaxListItems());
} }
public XtaMessage getMessage(@NotBlank String clientIdentifier, @NotBlank String messageId)
throws XTAWSTechnicalProblemException, PermissionDeniedException, InvalidMessageIDException {
return service.getMessage(messageId, deriveIdentifier(clientIdentifier));
}
public void close(@NotBlank String clientIdentifier, @NotBlank String messageId)
throws XTAWSTechnicalProblemException, PermissionDeniedException, InvalidMessageIDException {
service.close(messageId, deriveIdentifier(clientIdentifier));
}
Identifier deriveIdentifier(String xtaIdentifier) { Identifier deriveIdentifier(String xtaIdentifier) {
return config.getClientIdentifiers().stream() return config.getClientIdentifiers().stream()
.filter(id -> id.value().equals(xtaIdentifier)) .filter(id -> id.value().equals(xtaIdentifier))
.findFirst() .findFirst()
.orElseThrow(() -> new IllegalArgumentException("Unknown identifier: " + xtaIdentifier)); .orElseThrow(() -> new IllegalArgumentException("Unknown identifier: " + xtaIdentifier));
} }
public XtaMessage getMessage(String messageId) {
throw new NotImplementedException("");
}
public void close(@NotBlank String messageId) {
throw new NotImplementedException("");
}
} }
package de.ozgcloud.xta.client; package de.ozgcloud.xta.client;
import static de.ozgcloud.xta.client.factory.MessageMetaDataTestFactory.*;
import static de.ozgcloud.xta.client.factory.XtaClientConfigTestFactory.*; import static de.ozgcloud.xta.client.factory.XtaClientConfigTestFactory.*;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
...@@ -18,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension; ...@@ -18,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.core.WrappedXtaService; 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.XtaMessageMetaDataListing;
import lombok.SneakyThrows; import lombok.SneakyThrows;
...@@ -119,4 +121,40 @@ class XtaClientTest { ...@@ -119,4 +121,40 @@ class XtaClientTest {
} }
} }
@DisplayName("get message")
@Nested
class TestGetMessage {
@Mock
XtaMessage xtaMessage;
@DisplayName("should return")
@Test
@SneakyThrows
void shouldReturn() {
doReturn(SELF_IDENTIFIER).when(client).deriveIdentifier(SELF_IDENTIFIER_VALUE);
when(service.getMessage(MESSAGE_ID, SELF_IDENTIFIER)).thenReturn(xtaMessage);
var result = client.getMessage(SELF_IDENTIFIER_VALUE, MESSAGE_ID);
assertThat(result).isEqualTo(xtaMessage);
}
}
@DisplayName("close")
@Nested
class TestClose {
@DisplayName("should call close")
@Test
@SneakyThrows
void shouldCallClose() {
doReturn(SELF_IDENTIFIER).when(client).deriveIdentifier(SELF_IDENTIFIER_VALUE);
client.close(SELF_IDENTIFIER_VALUE, MESSAGE_ID);
verify(service).close(MESSAGE_ID, SELF_IDENTIFIER);
}
}
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment