test: RED - Putting a message in a newly created chat-room
authorKai Moritz <kai@juplo.de>
Fri, 15 Sep 2023 18:04:01 +0000 (20:04 +0200)
committerKai Moritz <kai@juplo.de>
Fri, 15 Sep 2023 19:13:12 +0000 (21:13 +0200)
src/main/java/de/juplo/kafka/chat/backend/implementation/kafka/InfoChannel.java
src/main/java/de/juplo/kafka/chat/backend/storage/mongodb/MongoDbStorageStrategy.java
src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java

index ad03f0d..26e8696 100644 (file)
@@ -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
index 3eb9096..b1bead9 100644 (file)
@@ -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);
         });
   }
 
index a73f393..e1e87c5 100644 (file)
@@ -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!");
+        });
   }
 }