splitter: 1.2.0 - A domain-class (``User``) is used as key
[demos/kafka/wordcount] / src / test / java / de / juplo / kafka / wordcount / splitter / TestData.java
1 package de.juplo.kafka.wordcount.splitter;
2
3 import de.juplo.kafka.wordcount.counter.TestOutputUser;
4 import de.juplo.kafka.wordcount.counter.TestOutputWord;
5 import de.juplo.kafka.wordcount.recorder.TestInputRecording;
6 import de.juplo.kafka.wordcount.recorder.TestInputUser;
7 import org.apache.kafka.streams.KeyValue;
8 import org.springframework.util.LinkedMultiValueMap;
9 import org.springframework.util.MultiValueMap;
10
11 import java.time.Duration;
12 import java.util.stream.Stream;
13
14 import static org.assertj.core.api.Assertions.assertThat;
15 import static org.awaitility.Awaitility.await;
16
17
18 public class TestData
19 {
20         static final TestInputUser PETER = TestInputUser.of("peter");
21         static final TestInputUser KLAUS = TestInputUser.of("klaus");
22
23
24         static final Stream<KeyValue<TestInputUser, TestInputRecording>> getInputMessages()
25         {
26                 return Stream.of(INPUT_MESSAGES);
27         }
28
29         private static final KeyValue<TestInputUser, TestInputRecording>[] INPUT_MESSAGES = new KeyValue[]
30         {
31                         new KeyValue<>(
32                                         PETER,
33                                         TestInputRecording.of(PETER.getUser(), "Hallo Welt!")),
34                         new KeyValue<>(
35                                         KLAUS,
36                                         TestInputRecording.of(KLAUS.getUser(), "Müsch gäb's auch!")),
37                         new KeyValue<>(
38                                         PETER,
39                                         TestInputRecording.of(PETER.getUser(), "Boäh, echt! ß mal nä Nümmäh!")),
40         };
41
42         static void assertExpectedMessages(MultiValueMap<TestOutputUser, TestOutputWord> receivedMessages)
43         {
44                 await("Received expected messages")
45                                 .atMost(Duration.ofSeconds(5))
46                                 .untilAsserted(() -> expectedMessages().forEach((user, word) ->
47                                                 assertThat(receivedMessages.get(user)).containsExactlyElementsOf(word)));
48         }
49
50         private static final KeyValue<TestOutputUser, TestOutputWord>[] EXPECTED_MESSAGES = new KeyValue[]
51         {
52                         KeyValue.pair(
53                                         TestOutputUser.of(PETER.getUser()),
54                                         TestOutputWord.of(PETER.getUser(), "Hallo")),
55                         KeyValue.pair(
56                                         TestOutputUser.of(PETER.getUser()),
57                                         TestOutputWord.of(PETER.getUser(), "Welt")),
58                         KeyValue.pair(
59                                         TestOutputUser.of(KLAUS.getUser()),
60                                         TestOutputWord.of(KLAUS.getUser(), "Müsch")),
61                         KeyValue.pair(
62                                         TestOutputUser.of(KLAUS.getUser()),
63                                         TestOutputWord.of(KLAUS.getUser(), "gäb")),
64                         KeyValue.pair(
65                                         TestOutputUser.of(KLAUS.getUser()),
66                                         TestOutputWord.of(KLAUS.getUser(), "s")),
67                         KeyValue.pair(
68                                         TestOutputUser.of(KLAUS.getUser()),
69                                         TestOutputWord.of(KLAUS.getUser(), "auch")),
70                         KeyValue.pair(
71                                         TestOutputUser.of(PETER.getUser()),
72                                         TestOutputWord.of(PETER.getUser(), "Boäh")),
73                         KeyValue.pair(
74                                         TestOutputUser.of(PETER.getUser()),
75                                         TestOutputWord.of(PETER.getUser(), "echt")),
76                         KeyValue.pair(
77                                         TestOutputUser.of(PETER.getUser()),
78                                         TestOutputWord.of(PETER.getUser(), "ß")),
79                         KeyValue.pair(
80                                         TestOutputUser.of(PETER.getUser()),
81                                         TestOutputWord.of(PETER.getUser(), "mal")),
82                         KeyValue.pair(
83                                         TestOutputUser.of(PETER.getUser()),
84                                         TestOutputWord.of(PETER.getUser(), "nä")),
85                         KeyValue.pair(
86                                         TestOutputUser.of(PETER.getUser()),
87                                         TestOutputWord.of(PETER.getUser(), "Nümmäh")),
88         };
89
90         static MultiValueMap<TestOutputUser, TestOutputWord> expectedMessages()
91         {
92                 MultiValueMap<TestOutputUser, TestOutputWord> expectedMessages = new LinkedMultiValueMap<>();
93                 Stream
94                                 .of(EXPECTED_MESSAGES)
95                                 .forEach(keyValue -> expectedMessages.add(keyValue.key, keyValue.value));
96                 return expectedMessages;
97         }
98 }