test: RED - Added a test for a put to a non-existent chat-room
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / AbstractConfigurationIT.java
index c424b29..d255d6e 100644 (file)
@@ -10,6 +10,8 @@ import org.testcontainers.shaded.org.awaitility.Awaitility;
 
 import java.time.Duration;
 
+import static org.hamcrest.Matchers.endsWith;
+
 
 public abstract class AbstractConfigurationIT
 {
@@ -18,10 +20,13 @@ public abstract class AbstractConfigurationIT
   @Autowired
   WebTestClient webTestClient;
 
+
   @Test
   @DisplayName("The app starts, the data is restored and accessible")
-  void test()
+  void testAppStartsDataIsRestoredAndAccessible()
   {
+    String chatRoomId = "5c73531c-6fc4-426c-adcb-afc5c140a0f7";
+
     Awaitility
         .await()
         .atMost(Duration.ofSeconds(15))
@@ -29,13 +34,17 @@ public abstract class AbstractConfigurationIT
         {
           webTestClient
               .get()
-              .uri("http://localhost:{port}/actuator/health", port)
+              .uri(
+                  "http://localhost:{port}/actuator/health",
+                  port)
               .exchange()
               .expectStatus().isOk()
               .expectBody().jsonPath("$.status").isEqualTo("UP");
           webTestClient
               .get()
-              .uri("http://localhost:{port}/list", port)
+              .uri(
+                  "http://localhost:{port}/list",
+                  port)
               .accept(MediaType.APPLICATION_JSON)
               .exchange()
               .expectStatus().isOk()
@@ -44,25 +53,59 @@ public abstract class AbstractConfigurationIT
                 .jsonPath("$[0].name").isEqualTo("FOO");
           webTestClient
               .get()
-              .uri("http://localhost:{port}/5c73531c-6fc4-426c-adcb-afc5c140a0f7", port)
+              .uri("http://localhost:{port}/{chatRoomId}",
+                  port,
+                  chatRoomId)
               .accept(MediaType.APPLICATION_JSON)
               .exchange()
               .expectStatus().isOk()
               .expectBody().jsonPath("$.name").isEqualTo("FOO");
           webTestClient
               .get()
-              .uri("http://localhost:{port}/5c73531c-6fc4-426c-adcb-afc5c140a0f7/ute/1", port)
+              .uri(
+                  "http://localhost:{port}/{chatRoomId}/ute/1",
+                  port,
+                  chatRoomId)
               .accept(MediaType.APPLICATION_JSON)
               .exchange()
               .expectStatus().isOk()
               .expectBody().jsonPath("$.text").isEqualTo("Ich bin Ute...");
           webTestClient
               .get()
-              .uri("http://localhost:{port}/5c73531c-6fc4-426c-adcb-afc5c140a0f7/peter/1", port)
+              .uri(
+                  "http://localhost:{port}/{chatRoomId}/peter/1",
+                  port,
+                  chatRoomId)
               .accept(MediaType.APPLICATION_JSON)
               .exchange()
               .expectStatus().isOk()
               .expectBody().jsonPath("$.text").isEqualTo("Hallo, ich heiße Peter!");
         });
   }
+
+  @Test
+  @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))
+        .untilAsserted(() ->
+          webTestClient
+              .put()
+              .uri(
+                  "http://localhost:{port}/{chatRoomId}/otto/66",
+                  port,
+                  otherChatRoomId)
+              .contentType(MediaType.TEXT_PLAIN)
+              .accept(MediaType.APPLICATION_JSON)
+              .bodyValue("The devil rules route 66")
+              .exchange()
+              .expectStatus().isNotFound()
+              .expectBody()
+              .jsonPath("$.type").value(endsWith("/problem/unknown-chatroom"))
+              .jsonPath("$.chatroomId").isEqualTo(otherChatRoomId));
+  }
 }