test: Fixed `AbstractConfigurationIT#testPutMessageInNewChatRoom()`
authorKai Moritz <kai@juplo.de>
Fri, 15 Mar 2024 10:18:29 +0000 (11:18 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 22 Mar 2024 16:39:20 +0000 (17:39 +0100)
* The first request in the awaited assertion must create a chat-room,
  that is owned by the instance.
* Hence, _it has to_ assert, that the shard of the created chat-room is
  `2` - the only shard, the test-instance owns, or _empty_, if the instance
  under test does not implement sharding.

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

index 21605bc..3f25ced 100644 (file)
@@ -3,6 +3,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.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
@@ -193,6 +195,9 @@ public abstract class AbstractConfigurationIT
         .atMost(Duration.ofSeconds(15))
         .untilAsserted(() ->
         {
+          // The first request creates a new chat-room
+          // It must be repeated, until a chat-room was created,
+          // that is owned by the instance
           byte[] result = webTestClient
               .post()
               .uri("http://localhost:{port}/create", port)
@@ -204,8 +209,21 @@ public abstract class AbstractConfigurationIT
               .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))
+                .jsonPath("$.shard").value(new BaseMatcher<Integer>() {
+                  @Override
+                  public boolean matches(Object actual)
+                  {
+                    return actual == null
+                        ? true
+                        : actual.equals(Integer.valueOf(2));
+                  }
+
+                  @Override
+                  public void describeTo(Description description)
+                  {
+                    description.appendText("shard has expected value 2, or is empty");
+                  }
+                })
               .returnResult()
               .getResponseBody();
           ChatRoomInfoTo chatRoomInfo = objectMapper.readValue(result, ChatRoomInfoTo.class);