1 package de.juplo.kafka.wordcount.splitter;
3 import de.juplo.kafka.wordcount.counter.TestWord;
4 import de.juplo.kafka.wordcount.recorder.TestRecording;
5 import org.apache.kafka.streams.KeyValue;
6 import org.springframework.util.LinkedMultiValueMap;
7 import org.springframework.util.MultiValueMap;
9 import java.time.Duration;
10 import java.util.function.BiConsumer;
11 import java.util.stream.Stream;
13 import static org.assertj.core.api.Assertions.assertThat;
14 import static org.awaitility.Awaitility.await;
19 static final String PETER = "peter";
20 static final String KLAUS = "klaus";
22 static void writeInputData(BiConsumer<String, TestRecording> consumer)
26 .forEach(kv -> consumer.accept(kv.key, kv.value));
29 static final KeyValue<String, TestRecording>[] INPUT_MESSAGES = new KeyValue[]
33 TestRecording.of(PETER, "Hallo Welt!")),
36 TestRecording.of(KLAUS, "Müsch gäb's auch!")),
39 TestRecording.of(PETER, "Boäh, echt! ß mal nä Nümmäh!")),
42 static void assertExpectedMessages(MultiValueMap<String, TestWord> receivedMessages)
44 await("Received expected messages")
45 .atMost(Duration.ofSeconds(5))
46 .untilAsserted(() -> expectedMessages().forEach((user, word) ->
47 assertThat(receivedMessages.get(user)).containsExactlyElementsOf(word)));
50 static final KeyValue<String, TestWord>[] EXPECTED_MESSAGES = new KeyValue[]
54 TestWord.of("peter", "Hallo")),
57 TestWord.of("peter", "Welt")),
60 TestWord.of("klaus", "Müsch")),
63 TestWord.of("klaus", "gäb")),
66 TestWord.of("klaus", "s")),
69 TestWord.of("klaus", "auch")),
72 TestWord.of("peter", "Boäh")),
75 TestWord.of("peter", "echt")),
78 TestWord.of("peter", "ß")),
81 TestWord.of("peter", "mal")),
84 TestWord.of("peter", "nä")),
87 TestWord.of("peter", "Nümmäh")),
90 static MultiValueMap<String, TestWord> expectedMessages()
92 MultiValueMap<String, TestWord> expectedMessages = new LinkedMultiValueMap<>();
94 .of(EXPECTED_MESSAGES)
95 .forEach(keyValue -> expectedMessages.add(keyValue.key, keyValue.value));
96 return expectedMessages;