top10: 1.2.1 - DRY for `User` in `TestData`
[demos/kafka/wordcount] / src / test / java / de / juplo / kafka / wordcount / top10 / TestData.java
1 package de.juplo.kafka.wordcount.top10;
2
3 import de.juplo.kafka.wordcount.counter.TestCounter;
4 import de.juplo.kafka.wordcount.counter.TestWord;
5 import org.apache.kafka.common.header.Header;
6 import org.apache.kafka.common.header.Headers;
7 import org.apache.kafka.streams.KeyValue;
8 import org.apache.kafka.streams.state.ReadOnlyKeyValueStore;
9 import org.springframework.util.LinkedMultiValueMap;
10 import org.springframework.util.MultiValueMap;
11
12 import java.util.Map;
13 import java.util.Properties;
14 import java.util.stream.Collectors;
15 import java.util.stream.Stream;
16
17 import static org.assertj.core.api.Assertions.assertThat;
18
19
20 class TestData
21 {
22         static final User PETER = User.of("peter");
23         static final User KLAUS = User.of("klaus");
24
25         static final KeyValue<TestWord, TestCounter>[] INPUT_MESSAGES = new KeyValue[]
26         {
27                         new KeyValue<>(
28                                         TestWord.of(PETER.getUser(),"Hallo"),
29                                         TestCounter.of(PETER.getUser(),"Hallo",1)),
30                         new KeyValue<>(
31                                         TestWord.of(KLAUS.getUser(),"Müsch"),
32                                         TestCounter.of(KLAUS.getUser(),"Müsch",1)),
33                         new KeyValue<>(
34                                         TestWord.of(PETER.getUser(),"Welt"),
35                                         TestCounter.of(PETER.getUser(),"Welt",1)),
36                         new KeyValue<>(
37                                         TestWord.of(KLAUS.getUser(),"Müsch"),
38                                         TestCounter.of(KLAUS.getUser(),"Müsch",2)),
39                         new KeyValue<>(
40                                         TestWord.of(KLAUS.getUser(),"s"),
41                                         TestCounter.of(KLAUS.getUser(),"s",1)),
42                         new KeyValue<>(
43                                         TestWord.of(PETER.getUser(),"Boäh"),
44                                         TestCounter.of(PETER.getUser(),"Boäh",1)),
45                         new KeyValue<>(
46                                         TestWord.of(PETER.getUser(),"Welt"),
47                                         TestCounter.of(PETER.getUser(),"Welt",2)),
48                         new KeyValue<>(
49                                         TestWord.of(PETER.getUser(),"Boäh"),
50                                         TestCounter.of(PETER.getUser(),"Boäh",2)),
51                         new KeyValue<>(
52                                         TestWord.of(KLAUS.getUser(),"s"),
53                                         TestCounter.of(KLAUS.getUser(),"s",2)),
54                         new KeyValue<>(
55                                         TestWord.of(PETER.getUser(),"Boäh"),
56                                         TestCounter.of(PETER.getUser(),"Boäh",3)),
57                         new KeyValue<>(
58                                         TestWord.of(KLAUS.getUser(),"s"),
59                                         TestCounter.of(KLAUS.getUser(),"s",3)),
60         };
61
62         static void assertExpectedMessages(MultiValueMap<User, Ranking> receivedMessages)
63         {
64                 expectedMessages().forEach(
65                                 (user, rankings) ->
66                                                 assertThat(receivedMessages.get(user))
67                                                                 .containsExactlyElementsOf(rankings));
68         }
69
70         static void assertExpectedState(ReadOnlyKeyValueStore<User, Ranking> store)
71         {
72                 assertThat(store.get(EXPECTED_MESSAGES[9].key)).isEqualTo(EXPECTED_MESSAGES[9].value);
73                 assertThat(store.get(EXPECTED_MESSAGES[10].key)).isEqualTo(EXPECTED_MESSAGES[10].value);
74         }
75
76         static KeyValue<User, Ranking>[] EXPECTED_MESSAGES = new KeyValue[]
77         {
78                         KeyValue.pair( // 0
79                                         PETER,
80                                         Ranking.of(
81                                                         Entry.of("Hallo", 1l))),
82                         KeyValue.pair( // 1
83                                         KLAUS,
84                                         Ranking.of(
85                                                         Entry.of("Müsch", 1l))),
86                         KeyValue.pair( // 2
87                                         PETER,
88                                         Ranking.of(
89                                                         Entry.of("Hallo", 1l),
90                                                         Entry.of("Welt", 1l))),
91                         KeyValue.pair( // 3
92                                         KLAUS,
93                                         Ranking.of(
94                                                         Entry.of("Müsch", 2l))),
95                         KeyValue.pair( // 4
96                                         KLAUS,
97                                         Ranking.of(
98                                                         Entry.of("Müsch", 2l),
99                                                         Entry.of("s", 1l))),
100                         KeyValue.pair( // 5
101                                         PETER,
102                                         Ranking.of(
103                                                         Entry.of("Hallo", 1l),
104                                                         Entry.of("Welt", 1l),
105                                                         Entry.of("Boäh", 1l))),
106                         KeyValue.pair( // 6
107                                         PETER,
108                                         Ranking.of(
109                                                         Entry.of("Welt", 2l),
110                                                         Entry.of("Hallo", 1l),
111                                                         Entry.of("Boäh", 1l))),
112                         KeyValue.pair( // 7
113                                         PETER,
114                                         Ranking.of(
115                                                         Entry.of("Welt", 2l),
116                                                         Entry.of("Boäh", 2l),
117                                                         Entry.of("Hallo", 1l))),
118                         KeyValue.pair( // 8
119                                         KLAUS,
120                                         Ranking.of(
121                                                         Entry.of("Müsch", 2l),
122                                                         Entry.of("s", 2l))),
123                         KeyValue.pair( // 9
124                                         PETER,
125                                         Ranking.of(
126                                                         Entry.of("Boäh", 3l),
127                                                         Entry.of("Welt", 2l),
128                                                         Entry.of("Hallo", 1l))),
129                         KeyValue.pair( // 10
130                                         KLAUS,
131                                         Ranking.of(
132                                                         Entry.of("s", 3l),
133                                                         Entry.of("Müsch", 2l))),
134         };
135
136         static MultiValueMap<User, Ranking> expectedMessages()
137         {
138                 MultiValueMap<User, Ranking> expectedMessages = new LinkedMultiValueMap<>();
139                 Stream
140                                 .of(EXPECTED_MESSAGES)
141                                 .forEach(keyValue -> expectedMessages.add(keyValue.key, keyValue.value));
142                 return expectedMessages;
143         }
144
145         static Map<String, Object> convertToMap(Properties properties)
146         {
147                 return properties
148                                 .entrySet()
149                                 .stream()
150                                 .collect(
151                                                 Collectors.toMap(
152                                                                 entry -> (String)entry.getKey(),
153                                                                 entry -> entry.getValue()
154                                                 ));
155         }
156
157         static String parseHeader(Headers headers, String key)
158         {
159                 Header header = headers.lastHeader(key);
160                 if (header == null)
161                 {
162                         return key + "=null";
163                 }
164                 else
165                 {
166                         return key + "=" + new String(header.value());
167                 }
168         }
169 }