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

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

parent 681310f6
Branches
No related tags found
No related merge requests found
......@@ -2,13 +2,12 @@ package de.ozgcloud.xta.client;
import jakarta.validation.constraints.NotBlank;
import org.apache.commons.lang3.NotImplementedException;
import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.core.WrappedXtaService;
import de.ozgcloud.xta.client.model.Identifier;
import de.ozgcloud.xta.client.model.XtaMessage;
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.XTAWSTechnicalProblemException;
import lombok.AccessLevel;
......@@ -25,47 +24,49 @@ public class XtaClient {
private final XtaClientConfig config;
/**
* Fetch metadata of pending messages sent to the {@code xtaIdentifier}.
* The returned listing contains at most {@link de.ozgcloud.xta.client.config.XtaClientConfig#getMaxListItems() maxListItems} messages.
* Use the {@code requestId} to {@link #close(String) close} pending messages.
* To fetch the next messages, use {@link #getNextMessagesMetadata(String)}.
* Note that {@code xtaIdentifier} has to be configured as a {@link de.ozgcloud.xta.client.config.XtaClientConfig#getClientIdentifiers() clientIdentifiers}.
* Fetch metadata of pending messages sent to the {@code xtaIdentifier}. The returned listing contains at most
* {@link de.ozgcloud.xta.client.config.XtaClientConfig#getMaxListItems() maxListItems} messages. Use the {@code requestId} to
* {@link #close(String) close} pending messages. To fetch the next messages, use {@link #getNextMessagesMetadata(String)}. Note that
* {@code xtaIdentifier} has to be configured as a
* {@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
*/
public XtaMessageMetaDataListing getMessagesMetadata(@NotBlank String xtaIdentifier)
public XtaMessageMetaDataListing getMessagesMetadata(@NotBlank String clientIdentifier)
throws XTAWSTechnicalProblemException, PermissionDeniedException {
var clientIdentifier = deriveIdentifier(xtaIdentifier);
service.checkAccountActive(clientIdentifier);
return getStatusList(clientIdentifier);
var identifier = deriveIdentifier(clientIdentifier);
service.checkAccountActive(identifier);
return getStatusList(identifier);
}
/**
* Fetch metadata of pending messages sent to the {@code xtaIdentifier}.
* This method skips checks but otherwise behaves exactly as {@link #getMessagesMetadata(String)}.
* Fetch metadata of pending messages sent to the {@code xtaIdentifier}. This method skips checks but otherwise behaves exactly as
* {@link #getMessagesMetadata(String)}.
*/
public XtaMessageMetaDataListing getNextMessagesMetadata(@NotBlank String xtaIdentifier)
public XtaMessageMetaDataListing getNextMessagesMetadata(@NotBlank String clientIdentifier)
throws XTAWSTechnicalProblemException, PermissionDeniedException {
return getStatusList(deriveIdentifier(xtaIdentifier));
return getStatusList(deriveIdentifier(clientIdentifier));
}
private XtaMessageMetaDataListing getStatusList(Identifier clientIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException {
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) {
return config.getClientIdentifiers().stream()
.filter(id -> id.value().equals(xtaIdentifier))
.findFirst()
.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;
import static de.ozgcloud.xta.client.factory.MessageMetaDataTestFactory.*;
import static de.ozgcloud.xta.client.factory.XtaClientConfigTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
......@@ -18,6 +19,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
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 lombok.SneakyThrows;
......@@ -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