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

OZG-4095 refactor: Cleanup ITCase

parent ecd368cb
Branches
Tags
3 merge requests!9Draft: Ozg 4094 wiremock ausprobieren,!8OZG-4095 refactoring von web client zu rest client jan,!7Ozg-4094 Konfiguration für nachrichten-manager
......@@ -7,17 +7,14 @@ import static org.mockserver.mock.OpenAPIExpectation.*;
import static org.mockserver.model.HttpRequest.*;
import static org.mockserver.model.HttpResponse.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.OffsetDateTime;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
......@@ -30,18 +27,14 @@ import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.context.TestPropertySource;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
import de.ozgcloud.nachrichten.postfach.osiv2.extension.Jwt;
import de.ozgcloud.nachrichten.postfach.osiv2.extension.OsiMockServerExtension;
import de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil;
import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory;
import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageFactory;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessage;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeReceiveMessagesResponse;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior;
import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage;
import lombok.SneakyThrows;
@SpringBootTest(classes = TestApplication.class)
......@@ -49,11 +42,16 @@ import lombok.SneakyThrows;
@TestPropertySource(properties = {
"ozgcloud.osiv2-postfach.http-proxy.enabled=false",
})
public class OsiPostfachRemoteServiceITCase {
class OsiPostfachRemoteServiceITCase {
@RegisterExtension
static final OsiMockServerExtension OSI_MOCK_SERVER_EXTENSION = new OsiMockServerExtension();
@SneakyThrows
private static String getPostfachApiSpec() {
return Files.readString(Path.of("spec", "postfach-api-facade.yaml"));
}
private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
@Autowired
......@@ -76,19 +74,13 @@ public class OsiPostfachRemoteServiceITCase {
postfachFacadeMockClient = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockClient();
}
// @Disabled
@DisplayName("should send dummy request with jwt")
@DisplayName("should send request with jwt")
@Test
@SneakyThrows
void shouldSendDummyRequestWithJwt() {
postfachFacadeMockClient.upsert(
openAPIExpectation()
.withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml")))
.withOperationsAndResponses(Map.of(
"SendMessage", "200"
))
);
void shouldSendRequestWithJwt() {
mockOperationsAndResponses(Map.of(
"SendMessage", "200"
));
osiPostfachRemoteService.sendMessage(postfachNachricht);
......@@ -101,89 +93,77 @@ public class OsiPostfachRemoteServiceITCase {
assertThat(jwt.body().read("$.aud", String.class)).isEqualTo(RESOURCE_URN);
}
ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
@Disabled
@DisplayName("should receive one messages")
@Test
@SneakyThrows
void shouldReceiveMessages() {
var uuid = UUID.fromString("00000000-0000-0000-0000-000000000000");
createMessagesJson(uuid, null);
createOneReplyMessageJson(uuid);
mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000");
var messageStream = osiPostfachRemoteService.getAllMessages();
var messageList = osiPostfachRemoteService.getAllMessages().toList();
var messageList = messageStream.toList();
assertThat(messageList).size().isEqualTo(1);
assertThat(messageList).hasSize(1);
}
@Disabled
@DisplayName("should receive two messages")
@Test
@SneakyThrows
void shouldReceiveTwoMessages() {
var uuid1 = UUID.fromString("00000000-0000-0000-0000-000000000000");
var uuid2 = UUID.fromString("00000000-0000-0000-0000-000000000001");
mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001");
createMessagesJson(uuid1, uuid2);
var messageList = osiPostfachRemoteService.getAllMessages().toList();
createOneReplyMessageJson(uuid1);
createOneReplyMessageJson(uuid2);
var messageStream = osiPostfachRemoteService.getAllMessages();
var messageList = messageStream.toList();
assertThat(messageList).size().isEqualTo(2);
assertThat(messageList).hasSize(2);
}
private void createMessagesJson(final UUID... uuids) throws IOException {
var messagesList = Arrays.stream(uuids).filter(Objects::nonNull).map(uuid -> new MessageExchangeReceiveMessage().guid(uuid)).toList();
var messages = new MessageExchangeReceiveMessagesResponse().messages(messagesList);
ObjectWriter ow = objectMapper.writer().withDefaultPrettyPrinter();
String messagesJson = ow.writeValueAsString(messages);
createMessagesCall("receiveMessages", messagesJson);
private void mockPostfachMessageAndResponse(final String... uuids) {
// Stub message listing response
mockJsonOperation("receiveMessages", new MessageExchangeReceiveMessagesResponse()
.messages(Arrays.stream(uuids)
.map(uuid -> new MessageExchangeReceiveMessage()
.guid(UUID.fromString(uuid)))
.toList()));
for (String uuid : uuids) {
// Stub individual response for message
mockJsonOperation("getMessage", V1ReplyMessageFactory.create()
.messageBox(UUID.fromString(uuid))
.responseTime(OffsetDateTime.now()));
}
}
private void createMessagesCall(final String receiveMessages, final String messagesJson) throws IOException {
private void mockJsonOperation(final String operationId, final Object body) {
postfachFacadeMockClient
.when(
new OpenAPIDefinition()
.withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml")))
.withOperationId(receiveMessages)
.withSpecUrlOrPayload(getPostfachApiSpec())
.withOperationId(operationId)
)
.respond(response().withHeader("Content-type", "application/json").withBody(messagesJson));
.respond(
response()
.withHeader("Content-type", "application/json")
.withBody(JsonUtil.toJson(body))
);
}
private void createOneReplyMessageJson(final UUID uuid) throws IOException {
ObjectWriter ow = objectMapper.writer().withDefaultPrettyPrinter();
var replyMessage = new V1ReplyMessage()
.body("das ist ein toller Body").replyAction(V1ReplyBehavior.REPLYPOSSIBLE).messageBox(uuid).responseTime(OffsetDateTime.now());
String messageJson = ow.writeValueAsString(replyMessage);
createMessagesCall("getMessage", messageJson);
}
@Disabled
@DisplayName("should delete message")
@Test
@SneakyThrows
void shouldDeleteMessage() {
mockOperationsAndResponses(Map.of(
"deleteMessage", "200"
));
assertDoesNotThrow(() -> osiPostfachRemoteService.deleteMessage("00000000-0000-0000-0000-000000000000"));
// TODO verify delete message called
// var requests = postfachFacadeMockClient.retrieveRecordedRequests(request());
}
private void mockOperationsAndResponses(Map<String, String> operationsAndResponses) {
postfachFacadeMockClient.upsert(
openAPIExpectation()
.withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml")))
.withOperationsAndResponses(Map.of(
"deleteMessage", "200"
))
.withSpecUrlOrPayload(getPostfachApiSpec())
.withOperationsAndResponses(operationsAndResponses)
);
assertDoesNotThrow(() -> osiPostfachRemoteService.deleteMessage("00000000-0000-0000-0000-000000000000"));
}
}
package de.ozgcloud.nachrichten.postfach.osiv2.factory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.SneakyThrows;
public class JsonUtil {
private static final ObjectMapper jsonMapper = new ObjectMapper();
private static final ObjectMapper jsonMapper = new ObjectMapper()
.registerModule(new JavaTimeModule());
@SneakyThrows
public static String toJson(Object object) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment