diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java index 45801c9f5f7092f8b0af77620ac1f24928fce88d..61602acc355d8389b6decf7279fd79167ec69ed0 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java @@ -2,19 +2,21 @@ package de.ozgcloud.nachrichten.postfach.osiv2; import static de.ozgcloud.nachrichten.postfach.osiv2.factory.JwtFactory.*; import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; 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.List; +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.Nested; import org.junit.jupiter.api.Test; @@ -74,7 +76,7 @@ public class OsiPostfachRemoteServiceITCase { postfachFacadeMockClient = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockClient(); } - @Disabled + @DisplayName("send message") @Nested class TestSendMessage { @@ -104,50 +106,95 @@ public class OsiPostfachRemoteServiceITCase { } -// @Disabled @DisplayName("receive messages") @Nested class TestReceiveMessage { - @DisplayName("should receive messages") + ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + + @DisplayName("should receive one messages") @Test @SneakyThrows void shouldReceiveMessages() { var uuid = UUID.fromString("00000000-0000-0000-0000-000000000000"); - var messages = new MessageExchangeReceiveMessagesResponse().messages(List.of( - new MessageExchangeReceiveMessage().guid(uuid) - )); + createMessagesJson(uuid, null); + + createOneReplyMessageJson(uuid); + + var messageStream = osiPostfachRemoteService.getAllMessages(); + + var messageList = messageStream.toList(); + assertThat(messageList).size().isEqualTo(1); + } - var om = new ObjectMapper(); - om.registerModule(new JavaTimeModule()); - ObjectWriter ow = om.writer().withDefaultPrettyPrinter(); - String messagesJson = ow.writeValueAsString(messages); + @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"); - postfachFacadeMockClient - .when( - new OpenAPIDefinition() - .withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml"))) - .withOperationId("receiveMessages") - ) - .respond(response().withHeader("Content-type", "application/json").withBody(messagesJson)); + createMessagesJson(uuid1, uuid2); - var replyMessage = new V1ReplyMessage() - .body("das ist ein toller Body").replyAction(V1ReplyBehavior.REPLYPOSSIBLE).messageBox(uuid).responseTime(OffsetDateTime.now()); - String messageJson = ow.writeValueAsString(replyMessage); + createOneReplyMessageJson(uuid1); + createOneReplyMessageJson(uuid2); + var messageStream = osiPostfachRemoteService.getAllMessages(); + + var messageList = messageStream.toList(); + assertThat(messageList).size().isEqualTo(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 createMessagesCall(final String receiveMessages, final String messagesJson) throws IOException { postfachFacadeMockClient - .when( - new OpenAPIDefinition() - .withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml"))) - .withOperationId("getMessage") - ) - .respond(response().withHeader("Content-type", "application/json").withBody(messageJson)); + .when( + new OpenAPIDefinition() + .withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml"))) + .withOperationId(receiveMessages) + ) + .respond(response().withHeader("Content-type", "application/json").withBody(messagesJson)); + } - var messageStream = osiPostfachRemoteService.getAllMessages(); + private void createOneReplyMessageJson(final UUID uuid) throws IOException { + ObjectWriter ow = objectMapper.writer().withDefaultPrettyPrinter(); - var messageList = messageStream.toList(); - assertThat(messageList).size().isEqualTo(1); + 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); + } +} + + @DisplayName("delete messages") + @Nested + class TestDeleteMessage { + + @DisplayName("should delete message") + @Test + @SneakyThrows + void shouldDeleteMessage(){ + postfachFacadeMockClient.upsert( + openAPIExpectation() + .withSpecUrlOrPayload(Files.readString(Path.of("spec", "postfach-api-facade.yaml"))) + .withOperationsAndResponses(Map.of( + "SendMessage", "200" + )) + ); + + assertDoesNotThrow(() -> osiPostfachRemoteService.deleteMessage("00000000-0000-0000-0000-000000000000")); } } }