test: Refined `AbstractConfigurationIT#testPutMessageInNewChatRoom()`
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / AbstractConfigurationIT.java
index f2cb579..c639f70 100644 (file)
@@ -9,17 +9,21 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.web.server.LocalServerPort;
 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 java.io.IOException;
 import java.time.Duration;
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.endsWith;
 
 
 @Slf4j
+@DirtiesContext
 public abstract class AbstractConfigurationIT
 {
   final static String EXISTING_CHATROOM = "5c73531c-6fc4-426c-adcb-afc5c140a0f7";
@@ -62,6 +66,7 @@ public abstract class AbstractConfigurationIT
         .atMost(Duration.ofSeconds(15))
         .untilAsserted(() ->
         {
+          AtomicBoolean existingChatRoomFound = new AtomicBoolean(false);
           webTestClient
               .get()
               .uri(
@@ -70,9 +75,20 @@ public abstract class AbstractConfigurationIT
               .accept(MediaType.APPLICATION_JSON)
               .exchange()
               .expectStatus().isOk()
-              .expectBody()
-                .jsonPath("$.length()").isEqualTo(1)
-                .jsonPath("$[0].name").isEqualTo("FOO");
+              .returnResult(ChatRoomInfoTo.class)
+              .getResponseBody()
+              .toIterable()
+              .forEach(chatRoomInfoTo ->
+              {
+                log.debug("Inspecting chat-room {}", chatRoomInfoTo);
+                if (chatRoomInfoTo.getId().equals(UUID.fromString(EXISTING_CHATROOM)))
+                {
+                  log.debug("Found existing chat-room {}", chatRoomInfoTo);
+                  existingChatRoomFound.set(true);
+                  assertThat(chatRoomInfoTo.getName().equals("FOO"));
+                }
+              });
+          assertThat(existingChatRoomFound.get()).isTrue();
         });
   }
 
@@ -177,7 +193,8 @@ public abstract class AbstractConfigurationIT
         .atMost(Duration.ofSeconds(15))
         .untilAsserted(() ->
         {
-          byte[] result = webTestClient
+          // The first request creates a new chat-room
+          ChatRoomInfoTo chatRoomInfo = webTestClient
               .post()
               .uri("http://localhost:{port}/create", port)
               .contentType(MediaType.TEXT_PLAIN)
@@ -185,21 +202,20 @@ public abstract class AbstractConfigurationIT
               .accept(MediaType.APPLICATION_JSON)
               .exchange()
               .expectStatus().isOk()
-              .expectBody()
-                .jsonPath("$.id").exists()
-                .jsonPath("$.name").isEqualTo("bar")
-                // The hard must not be asserted, because not all implementations ar aware of it
-                // .jsonPath("$.shard").isEqualTo(Integer.valueOf(2))
-              .returnResult()
-              .getResponseBody();
-          ChatRoomInfoTo chatRoomInfo = objectMapper.readValue(result, ChatRoomInfoTo.class);
-          UUID chatRoomId = chatRoomInfo.getId();
+              .returnResult(ChatRoomInfoTo.class)
+              .getResponseBody()
+              .blockFirst();
+
+          // It must be repeated, until a chat-room was created,
+          // that is owned by the instance
+          assertThat(chatRoomInfo.getShard()).isIn(2, null);
+
           webTestClient
               .put()
               .uri(
                   "http://localhost:{port}/{chatRoomId}/nerd/7",
                   port,
-                  chatRoomId)
+                  chatRoomInfo.getId())
               .contentType(MediaType.TEXT_PLAIN)
               .accept(MediaType.APPLICATION_JSON)
               .bodyValue("Hello world!")