1 package net.pterodactylus.sone.template
3 import com.google.common.base.Optional
4 import net.pterodactylus.sone.data.Post
5 import net.pterodactylus.sone.data.PostReply
6 import net.pterodactylus.sone.data.Sone
7 import net.pterodactylus.sone.test.mock
8 import net.pterodactylus.sone.test.whenever
9 import net.pterodactylus.util.template.TemplateContext
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.containsInAnyOrder
12 import org.hamcrest.Matchers.equalTo
13 import org.junit.Before
17 * Unit test for [ReplyGroupFilter].
19 class ReplyGroupFilterTest {
21 private val filter = ReplyGroupFilter()
22 private val replies = mutableListOf<PostReply>()
23 private val posts = mutableListOf<Post>()
24 private val sones = mutableListOf<Sone>()
25 private val templateContext = mock<TemplateContext>()
34 whenever(posts[it].sone).thenReturn(sones[(it + 1) % sones.size])
37 replies += mock<PostReply>()
38 whenever(replies[it].sone).thenReturn(sones[it % sones.size])
39 whenever(replies[it].post).thenReturn(Optional.of(posts[it % posts.size]))
44 @Suppress("UNCHECKED_CAST")
45 fun `replies are grouped correctly`() {
46 val groupReplies = filter.format(templateContext, replies, emptyMap()) as Map<Post, Map<String, *>>
47 assertThat(groupReplies.keys, equalTo(posts.toSet()))
48 verifyPostRepliesAndSones(groupReplies, 0, listOf(0, 3), listOf(0, 8))
49 verifyPostRepliesAndSones(groupReplies, 1, listOf(1, 4), listOf(1, 9))
50 verifyPostRepliesAndSones(groupReplies, 2, listOf(2, 0), listOf(2, 10))
51 verifyPostRepliesAndSones(groupReplies, 3, listOf(3), listOf(3))
52 verifyPostRepliesAndSones(groupReplies, 4, listOf(4), listOf(4))
53 verifyPostRepliesAndSones(groupReplies, 5, listOf(0), listOf(5))
54 verifyPostRepliesAndSones(groupReplies, 6, listOf(1), listOf(6))
55 verifyPostRepliesAndSones(groupReplies, 7, listOf(2), listOf(7))
58 @Suppress("UNCHECKED_CAST")
59 private fun verifyPostRepliesAndSones(groupReplies: Map<Post, Map<String, *>>, postIndex: Int, soneIndices: List<Int>, replyIndices: List<Int>) {
60 assertThat(groupReplies[posts[postIndex]]!!["sones"] as Iterable<Sone>, containsInAnyOrder(*soneIndices.map { sones[it] }.toTypedArray()))
61 assertThat(groupReplies[posts[postIndex]]!!["replies"] as Iterable<PostReply>, containsInAnyOrder(*replyIndices.map { replies[it] }.toTypedArray()))