From cf3deaf93f7be1ee2d017444b82b4d91b5d3f517 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Fri, 15 Sep 2023 20:04:01 +0200 Subject: [PATCH] test: RED - Putting a message in a newly created chat-room --- .../implementation/kafka/InfoChannel.java | 2 +- .../mongodb/MongoDbStorageStrategy.java | 2 +- .../chat/backend/AbstractConfigurationIT.java | 80 +++++++++++++++---- 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/InfoChannel.java b/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/InfoChannel.java index ad03f0df..26e86963 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/InfoChannel.java +++ b/src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/InfoChannel.java @@ -84,7 +84,7 @@ public class InfoChannel implements Runnable if (metadata != null) { log.info("Successfully sent chreate-request for chat room: {}", to); - ChatRoomInfo chatRoomInfo = new ChatRoomInfo(chatRoomId, name, record.partition()); + ChatRoomInfo chatRoomInfo = new ChatRoomInfo(chatRoomId, name, shard); sink.success(chatRoomInfo); } else diff --git a/src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MongoDbStorageStrategy.java b/src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MongoDbStorageStrategy.java index 3eb90960..b1bead9b 100644 --- a/src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MongoDbStorageStrategy.java +++ b/src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MongoDbStorageStrategy.java @@ -36,7 +36,7 @@ public class MongoDbStorageStrategy implements StorageStrategy .map(chatRoomTo -> { UUID chatRoomId = UUID.fromString(chatRoomTo.getId()); - return new ChatRoomInfo(chatRoomId, chatRoomTo.getName()); + return new ChatRoomInfo(chatRoomId, chatRoomTo.getName(), null); }); } diff --git a/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java b/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java index a73f393c..e1e87c59 100644 --- a/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java +++ b/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java @@ -1,5 +1,8 @@ package de.juplo.kafka.chat.backend; +import com.fasterxml.jackson.databind.ObjectMapper; +import de.juplo.kafka.chat.backend.api.ChatRoomInfoTo; +import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -9,20 +12,26 @@ import org.springframework.http.MediaType; import org.springframework.test.web.reactive.server.WebTestClient; import org.testcontainers.shaded.org.awaitility.Awaitility; +import java.io.IOException; import java.time.Duration; +import java.util.UUID; import static org.hamcrest.Matchers.endsWith; +@Slf4j public abstract class AbstractConfigurationIT { final static String EXISTING_CHATROOM = "5c73531c-6fc4-426c-adcb-afc5c140a0f7"; + String NONEXISTENT_CHATROOM = "7f59ec77-832e-4a17-8d22-55ef46242c17"; @LocalServerPort int port; @Autowired WebTestClient webTestClient; + @Autowired + ObjectMapper objectMapper; @BeforeEach @@ -32,14 +41,14 @@ public abstract class AbstractConfigurationIT .await() .atMost(Duration.ofSeconds(15)) .untilAsserted(() -> - webTestClient - .get() - .uri( - "http://localhost:{port}/actuator/health", - port) - .exchange() - .expectStatus().isOk() - .expectBody().jsonPath("$.status").isEqualTo("UP")); + webTestClient + .get() + .uri( + "http://localhost:{port}/actuator/health", + port) + .exchange() + .expectStatus().isOk() + .expectBody().jsonPath("$.status").isEqualTo("UP")); } @Test @@ -111,25 +120,66 @@ public abstract class AbstractConfigurationIT @DisplayName("A PUT-message for a non-existent chat-room yields 404 NOT FOUND") void testNotFoundForPutMessageToNonExistentChatRoom() { - String otherChatRoomId = "7f59ec77-832e-4a17-8d22-55ef46242c17"; + Awaitility + .await() + .atMost(Duration.ofSeconds(15)) + .untilAsserted(() -> + webTestClient + .put() + .uri( + "http://localhost:{port}/{chatRoomId}/otto/66", + port, + NONEXISTENT_CHATROOM) + .contentType(MediaType.TEXT_PLAIN) + .accept(MediaType.APPLICATION_JSON) + .bodyValue("The devil rules route 66") + .exchange() + .expectStatus().isNotFound() + .expectBody() + .jsonPath("$.type").value(endsWith("/problem/unknown-chatroom")) + .jsonPath("$.chatroomId").isEqualTo(NONEXISTENT_CHATROOM)); + } + @Test + @DisplayName("A message can be put into a newly created chat-room") + void testPutMessageInNewChatRoom() throws IOException + { Awaitility .await() .atMost(Duration.ofSeconds(15)) .untilAsserted(() -> + { + byte[] result = webTestClient + .post() + .uri("http://localhost:{port}/create", port) + .contentType(MediaType.TEXT_PLAIN) + .bodyValue("bar") + .accept(MediaType.APPLICATION_JSON) + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.id").exists() + .jsonPath("$.name").isEqualTo("bar") + .jsonPath("$.shard").isEqualTo(Integer.valueOf(2)) + .returnResult() + .getResponseBody(); + ChatRoomInfoTo chatRoomInfo = objectMapper.readValue(result, ChatRoomInfoTo.class); + UUID chatRoomId = chatRoomInfo.getId(); webTestClient .put() .uri( - "http://localhost:{port}/{chatRoomId}/otto/66", + "http://localhost:{port}/{chatRoomId}/nerd/7", port, - otherChatRoomId) + chatRoomId) .contentType(MediaType.TEXT_PLAIN) .accept(MediaType.APPLICATION_JSON) - .bodyValue("The devil rules route 66") + .bodyValue("Hello world!") .exchange() - .expectStatus().isNotFound() + .expectStatus().isOk() .expectBody() - .jsonPath("$.type").value(endsWith("/problem/unknown-chatroom")) - .jsonPath("$.chatroomId").isEqualTo(otherChatRoomId)); + .jsonPath("$.id").isEqualTo(Integer.valueOf(7)) + .jsonPath("$.user").isEqualTo("nerd") + .jsonPath("$.text").isEqualTo("Hello world!"); + }); } } -- 2.20.1