counter: 1.2.15 - DRY for test-data
[demos/kafka/wordcount] / src / test / java / de / juplo / kafka / wordcount / counter / TestData.java
1 package de.juplo.kafka.wordcount.counter;
2
3 import de.juplo.kafka.wordcount.splitter.TestInputWord;
4 import de.juplo.kafka.wordcount.top10.TestOutputWord;
5 import de.juplo.kafka.wordcount.top10.TestOutputWordCounter;
6 import org.apache.kafka.streams.KeyValue;
7 import org.springframework.util.LinkedMultiValueMap;
8 import org.springframework.util.MultiValueMap;
9
10 import java.util.function.Consumer;
11 import java.util.stream.Stream;
12
13 import static org.assertj.core.api.Assertions.assertThat;
14
15
16 class TestData
17 {
18         static final String PETER = "peter";
19         static final String KLAUS = "klaus";
20
21         static final String WORD_HALLO = "Hallo";
22         static final String WORD_MÜSCH = "Müsch";
23         static final String WORD_WELT = "Welt";
24         static final String WORD_S = "s";
25         static final String WORD_BOÄH = "Boäh";
26
27         static final TestOutputWord PETER_HALLO = TestOutputWord.of(PETER, WORD_HALLO);
28         static final TestOutputWord PETER_WELT = TestOutputWord.of(PETER, WORD_WELT);
29         static final TestOutputWord PETER_BOÄH = TestOutputWord.of(PETER, WORD_BOÄH);
30         static final TestOutputWord KLAUS_MÜSCH = TestOutputWord.of(KLAUS, WORD_MÜSCH);
31         static final TestOutputWord KLAUS_S = TestOutputWord.of(KLAUS, WORD_S);
32
33         private static final KeyValue<String, TestInputWord>[] INPUT_MESSAGES = new KeyValue[]
34         {
35                         new KeyValue<>(
36                                         PETER,
37                                         TestInputWord.of(PETER, WORD_HALLO)),
38                         new KeyValue<>(
39                                         KLAUS,
40                                         TestInputWord.of(KLAUS, WORD_MÜSCH)),
41                         new KeyValue<>(
42                                         PETER,
43                                         TestInputWord.of(PETER, WORD_WELT)),
44                         new KeyValue<>(
45                                         KLAUS,
46                                         TestInputWord.of(KLAUS, WORD_MÜSCH)),
47                         new KeyValue<>(
48                                         KLAUS,
49                                         TestInputWord.of(KLAUS, WORD_S)),
50                         new KeyValue<>(
51                                         PETER,
52                                         TestInputWord.of(PETER, WORD_BOÄH)),
53                         new KeyValue<>(
54                                         PETER,
55                                         TestInputWord.of(PETER, WORD_WELT)),
56                         new KeyValue<>(
57                                         PETER,
58                                         TestInputWord.of(PETER, WORD_BOÄH)),
59                         new KeyValue<>(
60                                         KLAUS,
61                                         TestInputWord.of(KLAUS, WORD_S)),
62                         new KeyValue<>(
63                                         PETER,
64                                         TestInputWord.of(PETER, WORD_BOÄH)),
65                         new KeyValue<>(
66                                         KLAUS,
67                                         TestInputWord.of(KLAUS, WORD_S)),
68         };
69
70         static Stream<KeyValue<String, TestInputWord>> getInputMessages()
71         {
72                 return Stream.of(TestData.INPUT_MESSAGES);
73         }
74
75         static Consumer<MultiValueMap<TestOutputWord, TestOutputWordCounter>> expectedMessagesAssertion()
76         {
77                 return receivedMessages -> assertExpectedMessages(receivedMessages);
78         }
79
80         static void assertExpectedMessages(MultiValueMap<TestOutputWord, TestOutputWordCounter> receivedMessages)
81         {
82                 expectedMessages().forEach(
83                                 (word, counter) ->
84                                                 assertThat(receivedMessages.get(word))
85                                                                 .containsExactlyElementsOf(counter));
86         }
87
88         private static final KeyValue<TestOutputWord, TestOutputWordCounter>[] EXPECTED_MESSAGES = new KeyValue[]
89         {
90                         KeyValue.pair(
91                                         PETER_HALLO,
92                                         TestOutputWordCounter.of(PETER, WORD_HALLO,1)),
93                         KeyValue.pair(
94                                         KLAUS_MÜSCH,
95                                         TestOutputWordCounter.of(KLAUS, WORD_MÜSCH,1)),
96                         KeyValue.pair(
97                                         PETER_WELT,
98                                         TestOutputWordCounter.of(PETER, WORD_WELT,1)),
99                         KeyValue.pair(
100                                         KLAUS_MÜSCH,
101                                         TestOutputWordCounter.of(KLAUS, WORD_MÜSCH,2)),
102                         KeyValue.pair(
103                                         KLAUS_S,
104                                         TestOutputWordCounter.of(KLAUS, WORD_S,1)),
105                         KeyValue.pair(
106                                         PETER_BOÄH,
107                                         TestOutputWordCounter.of(PETER, WORD_BOÄH,1)),
108                         KeyValue.pair(
109                                         PETER_WELT,
110                                         TestOutputWordCounter.of(PETER, WORD_WELT,2)),
111                         KeyValue.pair(
112                                         PETER_BOÄH,
113                                         TestOutputWordCounter.of(PETER, WORD_BOÄH,2)),
114                         KeyValue.pair(
115                                         KLAUS_S,
116                                         TestOutputWordCounter.of(KLAUS, WORD_S,2)),
117                         KeyValue.pair(
118                                         PETER_BOÄH,
119                                         TestOutputWordCounter.of(PETER, WORD_BOÄH,3)),
120                         KeyValue.pair(
121                                         KLAUS_S,
122                                         TestOutputWordCounter.of(KLAUS, WORD_S,3)),
123         };
124
125         static MultiValueMap<TestOutputWord, TestOutputWordCounter> expectedMessages()
126         {
127                 MultiValueMap<TestOutputWord, TestOutputWordCounter> expectedMessages = new LinkedMultiValueMap<>();
128                 Stream
129                                 .of(EXPECTED_MESSAGES)
130                                 .forEach(keyValue -> expectedMessages.add(keyValue.key, keyValue.value));
131                 return expectedMessages;
132         }
133 }