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";
.atMost(Duration.ofSeconds(15))
.untilAsserted(() ->
{
+ AtomicBoolean existingChatRoomFound = new AtomicBoolean(false);
webTestClient
.get()
.uri(
.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();
});
}
.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)
.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);