X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2FAbstractConfigurationIT.java;h=3f25cedfb314f0ec50657225fe09fcb2ac967d2f;hb=ad2750e7cc30a885119c2ef3396374d81c3806ed;hp=f2cb579c3d04177f822ef2f97bbafa7ba033c6b5;hpb=f116d3821d4afbd6cf7e2fa1be4a497fe32c7853;p=demos%2Fkafka%2Fchat 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 f2cb579c..3f25cedf 100644 --- a/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java +++ b/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java @@ -3,23 +3,29 @@ 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; 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 +68,7 @@ public abstract class AbstractConfigurationIT .atMost(Duration.ofSeconds(15)) .untilAsserted(() -> { + AtomicBoolean existingChatRoomFound = new AtomicBoolean(false); webTestClient .get() .uri( @@ -70,9 +77,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,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) @@ -188,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() { + @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);