+ static void assertExpectedState(ReadOnlyKeyValueStore<User, Ranking> store)
+ {
+ assertRankingEqualsRankingFromLastMessage(PETER, store.get(userOf(PETER)));
+ assertRankingEqualsRankingFromLastMessage(KLAUS, store.get(userOf(KLAUS)));
+ }
+
+ static User userOf(TestUser user)
+ {
+ return User.of(user.getUser());
+ }
+
+ static void assertExpectedNumberOfMessagesForUsers(MultiValueMap<TestUser, TestRanking> receivedMessages)
+ {
+ assertThat(countMessagesForUser(PETER, receivedMessages));
+ assertThat(countMessagesForUser(KLAUS, receivedMessages));
+ }
+
+ static int countMessagesForUser(TestUser user, MultiValueMap<TestUser, TestRanking> messagesForUsers)
+ {
+ return messagesForUsers.get(user) == null
+ ? 0
+ : messagesForUsers.get(user).size();
+ }
+
+
+ static void assertExpectedLastMessagesForUsers(MultiValueMap<TestUser, TestRanking> receivedMessages)
+ {
+ assertRankingEqualsRankingFromLastMessage(PETER, getLastMessageFor(PETER, receivedMessages));
+ assertRankingEqualsRankingFromLastMessage(KLAUS, getLastMessageFor(KLAUS, receivedMessages));
+ }
+
+ static void assertRankingEqualsRankingFromLastMessage(TestUser user, Ranking ranking)
+ {
+ TestRanking testRanking = TestRanking.of(testEntriesOf(ranking.getEntries()));
+ assertRankingEqualsRankingFromLastMessage(user, testRanking);
+ }
+
+ static TestEntry[] testEntriesOf(Entry... entries)
+ {
+ return Arrays
+ .stream(entries)
+ .map(entry -> TestEntry.of(
+ entry.getWord(),
+ entry.getCounter() == null
+ ? -1l
+ : entry.getCounter()))
+ .toArray(size -> new TestEntry[size]);
+ }
+
+ static void assertRankingEqualsRankingFromLastMessage(TestUser user, TestRanking ranking)
+ {
+ assertThat(ranking).isEqualTo(getLastMessageFor(user));
+ }
+
+ static TestRanking getLastMessageFor(TestUser user)
+ {
+ return getLastMessageFor(user, expectedMessages());
+ }
+
+ static TestRanking getLastMessageFor(TestUser user, MultiValueMap<TestUser, TestRanking> messagesForUsers)
+ {
+ return messagesForUsers
+ .get(user)
+ .stream()
+ .reduce(null, (left, right) -> right);
+ }
+
+ static KeyValue<TestUser, TestRanking>[] EXPECTED_MESSAGES = new KeyValue[]