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 a72166b8c49595ed2e4955342200b2911555c0a2..2c5e81fec1d0c50b7841776c49881f485f4c90b6 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java @@ -16,6 +16,8 @@ import java.util.Map; import java.util.Objects; import java.util.UUID; +import de.ozgcloud.nachrichten.postfach.osiv2.factory.JsonUtil; +import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; @@ -70,7 +72,57 @@ public class OsiPostfachRemoteServiceITCase { private MockServerClient postfachFacadeMockClient; - @BeforeEach + @SneakyThrows + 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")); + } + + @SneakyThrows + private static String getPostfachApiSpec() { + return Files.readString(Path.of("spec", "postfach-api-facade.yaml")); + } + + 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 mockJsonOperation(final String operationId, final Object body) { + postfachFacadeMockClient + .when( + new OpenAPIDefinition() + .withSpecUrlOrPayload(getPostfachApiSpec()) + .withOperationId(operationId) + ) + .respond( + response() + .withHeader("Content-type", "application/json") + .withBody(JsonUtil.toJson(body)) + ); + } + + + @BeforeEach @SneakyThrows public void setup() { postfachFacadeMockClient = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockClient(); @@ -80,15 +132,10 @@ public class OsiPostfachRemoteServiceITCase { @DisplayName("should send dummy 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,18 +148,12 @@ public class OsiPostfachRemoteServiceITCase { assertThat(jwt.body().read("$.aud", String.class)).isEqualTo(RESOURCE_URN); } - 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"); - - createMessagesJson(uuid, null); - - createOneReplyMessageJson(uuid); + mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000"); var messageStream = osiPostfachRemoteService.getAllMessages(); @@ -125,29 +166,11 @@ public class OsiPostfachRemoteServiceITCase { @Test @SneakyThrows void shouldReceiveTwoMessages() { - var uuid1 = UUID.fromString("00000000-0000-0000-0000-000000000000"); - var uuid2 = UUID.fromString("00000000-0000-0000-0000-000000000001"); - - createMessagesJson(uuid1, uuid2); + mockPostfachMessageAndResponse("00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"); - createOneReplyMessageJson(uuid1); - createOneReplyMessageJson(uuid2); + var messageList = osiPostfachRemoteService.getAllMessages().toList(); - 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); + assertThat(messageList).hasSize(2); } private void createMessagesCall(final String receiveMessages, final String messagesJson) throws IOException { @@ -160,16 +183,6 @@ public class OsiPostfachRemoteServiceITCase { .respond(response().withHeader("Content-type", "application/json").withBody(messagesJson)); } - 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); - } - @DisplayName("should delete message") @Test