WIP
authorKai Moritz <kai@juplo.de>
Sun, 5 May 2024 12:25:49 +0000 (14:25 +0200)
committerKai Moritz <kai@juplo.de>
Sun, 5 May 2024 12:25:49 +0000 (14:25 +0200)
pom.xml
src/test/java/de/juplo/kafka/wordcount/recorder/ApplicationTests.java

diff --git a/pom.xml b/pom.xml
index 126ed07..b0e943a 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                        <artifactId>spring-kafka-test</artifactId>
                        <scope>test</scope>
                </dependency>
+               <dependency>
+                       <groupId>org.awaitility</groupId>
+                       <artifactId>awaitility</artifactId>
+                       <scope>test</scope>
+               </dependency>
        </dependencies>
 
        <build>
index 19bb8f5..e866504 100644 (file)
@@ -1,5 +1,6 @@
 package de.juplo.kafka.wordcount.recorder;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.junit.jupiter.api.DisplayName;
@@ -17,8 +18,12 @@ import org.springframework.test.web.servlet.MvcResult;
 import org.springframework.util.LinkedMultiValueMap;
 import org.springframework.util.MultiValueMap;
 
+import java.time.Duration;
+
 import static de.juplo.kafka.wordcount.recorder.ApplicationTests.PARTITIONS;
 import static de.juplo.kafka.wordcount.recorder.ApplicationTests.TOPIC_OUT;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.awaitility.Awaitility.await;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@@ -43,7 +48,12 @@ class ApplicationTests
 
 
        @Autowired
-       private MockMvc mockMvc;
+       MockMvc mockMvc;
+       @Autowired
+       Consumer consumer;
+       @Autowired
+       ObjectMapper objectMapper;
+
 
        @Test
        @DisplayName("The application context loads")
@@ -52,6 +62,7 @@ class ApplicationTests
        }
 
        @Test
+       @DisplayName("Posted messages are excepted and sent to Kafka")
        void userMessagesAreExceptedAndSentToKafka() throws Exception
        {
                MvcResult result = mockMvc
@@ -65,6 +76,22 @@ class ApplicationTests
                                .andExpect(status().isOk())
                                .andExpect(jsonPath("$.username").value(USER))
                                .andExpect(jsonPath("$.sentence").value(SENTENCE));
+
+               await("Expexted converted data")
+                               .atMost(Duration.ofSeconds(10))
+                               .untilAsserted(() ->
+                               {
+                                       assertThat(consumer.received.get(USER)).hasSize(1);
+                                       RecordingResult recordingResult = objectMapper.readValue(
+                                                       consumer.received.get(USER).get(0),
+                                                       RecordingResult.class);
+                                       assertThat(recordingResult.getUsername()).isEqualTo(USER);
+                                       assertThat(recordingResult.getSentence()).isEqualTo(SENTENCE);
+                                       assertThat(recordingResult.getTopic()).isEqualTo(TOPIC_OUT);
+                                       assertThat(recordingResult.getPartition()).isBetween(0, PARTITIONS - 1);
+                                       assertThat(recordingResult.getStatus()).isNull();
+                                       assertThat(recordingResult.getError()).isNull();
+                               });
        }
 
        static class Consumer