X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fchat%2Fbackend%2FAbstractConfigurationIT.java;h=21605bc1d38b8c7475a3b2f3bb77d4218df323f2;hb=a8868405a208e0bfd176890b6387fb5c794358e9;hp=241972d8503542d378500a2cea61b3d246319299;hpb=41c89e8f76917cbab07923b85691c4cf7cfaa0ff;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 241972d8..21605bc1 100644 --- a/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java +++ b/src/test/java/de/juplo/kafka/chat/backend/AbstractConfigurationIT.java @@ -1,28 +1,41 @@ 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.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"; + String NONEXISTENT_CHATROOM = "7f59ec77-832e-4a17-8d22-55ef46242c17"; @LocalServerPort int port; @Autowired WebTestClient webTestClient; + @Autowired + ObjectMapper objectMapper; @BeforeEach @@ -53,6 +66,7 @@ public abstract class AbstractConfigurationIT .atMost(Duration.ofSeconds(15)) .untilAsserted(() -> { + AtomicBoolean existingChatRoomFound = new AtomicBoolean(false); webTestClient .get() .uri( @@ -61,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(); }); } @@ -137,8 +162,6 @@ public abstract class AbstractConfigurationIT @DisplayName("A PUT-message for a non-existent chat-room yields 404 NOT FOUND") void testNotFoundForPutMessageToNonExistentChatRoom() { - String otherChatRoomId = "7f59ec77-832e-4a17-8d22-55ef46242c17"; - Awaitility .await() .atMost(Duration.ofSeconds(15)) @@ -149,7 +172,7 @@ public abstract class AbstractConfigurationIT .uri( "http://localhost:{port}/{chatRoomId}/otto/66", port, - otherChatRoomId) + NONEXISTENT_CHATROOM) .contentType(MediaType.TEXT_PLAIN) .accept(MediaType.APPLICATION_JSON) .bodyValue("The devil rules route 66") @@ -157,7 +180,51 @@ public abstract class AbstractConfigurationIT .expectStatus().isNotFound() .expectBody() .jsonPath("$.type").value(endsWith("/problem/unknown-chatroom")) - .jsonPath("$.chatroomId").isEqualTo(otherChatRoomId); + .jsonPath("$.chatroomId").isEqualTo(NONEXISTENT_CHATROOM); + }); + } + + @Test + @DisplayName("A message can be put into a newly created chat-room") + void testPutMessageInNewChatRoom() throws IOException + { + Awaitility + .await() + .atMost(Duration.ofSeconds(15)) + .untilAsserted(() -> + { + byte[] result = webTestClient + .post() + .uri("http://localhost:{port}/create", port) + .contentType(MediaType.TEXT_PLAIN) + .bodyValue("bar") + .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(); + webTestClient + .put() + .uri( + "http://localhost:{port}/{chatRoomId}/nerd/7", + port, + chatRoomId) + .contentType(MediaType.TEXT_PLAIN) + .accept(MediaType.APPLICATION_JSON) + .bodyValue("Hello world!") + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.id").isEqualTo(Integer.valueOf(7)) + .jsonPath("$.user").isEqualTo("nerd") + .jsonPath("$.text").isEqualTo("Hello world!"); }); } }