WIP:test: `*ConfigurationIT` asserts, if restored messages can be seen
authorKai Moritz <kai@juplo.de>
Mon, 11 Mar 2024 10:59:50 +0000 (11:59 +0100)
committerKai Moritz <kai@juplo.de>
Sat, 16 Mar 2024 09:14:06 +0000 (10:14 +0100)
--
TODO: Ist der Test so vollständig, bzw. auf dem letzten Stand?

src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java

index 452e424..3e0efd3 100644 (file)
@@ -1,25 +1,32 @@
 package de.juplo.kafka.chat.backend;
 
+import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import de.juplo.kafka.chat.backend.api.ChatRoomInfoTo;
+import de.juplo.kafka.chat.backend.api.MessageTo;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.core.io.Resource;
 import org.springframework.http.MediaType;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.web.reactive.server.WebTestClient;
 import org.testcontainers.shaded.org.awaitility.Awaitility;
+import reactor.core.publisher.Flux;
 
 import java.io.IOException;
 import java.time.Duration;
+import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.endsWith;
+import static pl.rzrz.assertj.reactor.Assertions.assertThat;
 
 
 @Slf4j
@@ -37,10 +44,20 @@ public abstract class AbstractConfigurationIT
   @Autowired
   ObjectMapper objectMapper;
 
+  @Value("classpath:data/files/5c73531c-6fc4-426c-adcb-afc5c140a0f7.json")
+  Resource existingChatRoomRessource;
+  MessageTo[] expectedExistingMessages;
+
 
   @BeforeEach
-  void waitForApp()
+  void waitForApp() throws IOException
   {
+    expectedExistingMessages = objectMapper
+        .readValue(
+            existingChatRoomRessource.getInputStream(),
+            new TypeReference<List<MessageTo>>() {})
+        .toArray(size -> new MessageTo[size]);
+
     Awaitility
         .await()
         .atMost(Duration.ofSeconds(15))
@@ -232,4 +249,69 @@ public abstract class AbstractConfigurationIT
                 .jsonPath("$.text").isEqualTo("Hello world!");
         });
   }
+
+  @Test
+  @DisplayName("Restored messages can be seen, when listening to restored chat-room")
+  void testListenToRestoredChatRoomYieldsRestoredMessages()
+  {
+    Awaitility
+        .await()
+        .atMost(Duration.ofSeconds(15))
+        .untilAsserted(() ->
+        {
+          Flux<MessageTo> result = webTestClient
+              .get()
+              .uri(
+                  "http://localhost:{port}/{chatRoomId}/listen",
+                  port,
+                  EXISTING_CHATROOM)
+              .accept(MediaType.TEXT_EVENT_STREAM)
+              .exchange()
+              .expectStatus().isOk()
+              .returnResult(MessageTo.class)
+              .getResponseBody();
+
+          List<MessageTo> messages = result
+              .take(expectedExistingMessages.length)
+              .collectList()
+              .block();
+          assertThat(messages).containsExactly(expectedExistingMessages);
+        });
+  }
+
+  @Test
+  @DisplayName("Newly send messages can be seen, when listening to restored chat-room")
+  void testListenToRestoredChatRoomYieldsAddedMessages()
+  {
+    MessageTo sentMessage = webTestClient
+        .put()
+        .uri(
+            "http://localhost:{port}/{chatRoomId}/nerd/7",
+            port,
+            EXISTING_CHATROOM)
+        .contentType(MediaType.TEXT_PLAIN)
+        .accept(MediaType.APPLICATION_JSON)
+        .bodyValue("Hello world!")
+        .exchange()
+        .expectStatus()
+        .isOk()
+        .returnResult(MessageTo.class)
+        .getResponseBody()
+        .next()
+        .block();
+
+    Flux<MessageTo> result = webTestClient
+        .get()
+        .uri(
+            "http://localhost:{port}/{chatRoomId}/listen",
+            port,
+            EXISTING_CHATROOM)
+        .accept(MediaType.TEXT_EVENT_STREAM)
+        .exchange()
+        .expectStatus().isOk()
+        .returnResult(MessageTo.class)
+        .getResponseBody();
+
+    assertThat(result.next().block()).isEqualTo(sentMessage);
+  }
 }