1 package net.pterodactylus.sone.notify
3 import com.google.common.base.Optional
4 import com.google.inject.Guice
5 import net.pterodactylus.sone.data.Post
6 import net.pterodactylus.sone.data.PostReply
7 import net.pterodactylus.sone.data.Sone
8 import net.pterodactylus.sone.freenet.wot.OwnIdentity
9 import net.pterodactylus.sone.test.getInstance
10 import net.pterodactylus.sone.test.mock
11 import net.pterodactylus.sone.test.whenever
12 import org.hamcrest.MatcherAssert.assertThat
13 import org.hamcrest.Matchers.equalTo
14 import org.hamcrest.Matchers.sameInstance
18 * Unit test for [ReplyVisibilityFilterTest].
20 class ReplyVisibilityFilterTest {
22 private val postVisibilityFilter = mock<PostVisibilityFilter>()
23 private val replyVisibilityFilter = ReplyVisibilityFilter(postVisibilityFilter)
24 private val localSone = mock<Sone>()
25 private val localIdentity = mock<OwnIdentity>()
26 private val post = mock<Post>()
27 private val postReply = mock<PostReply>()
30 fun `reply visibility filter is only created once`() {
31 val injector = Guice.createInjector()
32 val firstFilter = injector.getInstance<ReplyVisibilityFilter>()
33 val secondFilter = injector.getInstance<ReplyVisibilityFilter>()
34 assertThat(firstFilter, sameInstance(secondFilter))
37 private fun makePostPresent() {
38 whenever(postReply.post).thenReturn(Optional.of(post))
42 fun `reply is not visible if post is not visible`() {
44 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), equalTo(false))
47 private fun makePostAbsent() {
48 whenever(postReply.post).thenReturn(Optional.absent())
52 fun `reply is not visible if post is not present`() {
54 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), equalTo(false))
57 private fun makePostPresentAndVisible() {
59 whenever(postVisibilityFilter.isPostVisible(localSone, post)).thenReturn(true)
62 private fun makeReplyComeFromFuture() {
63 whenever(postReply.time).thenReturn(System.currentTimeMillis() + 1000)
67 fun `reply is not visible if it is from the future`() {
68 makePostPresentAndVisible()
69 makeReplyComeFromFuture()
70 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), equalTo(false))
74 fun `reply is visible if it is not from the future`() {
75 makePostPresentAndVisible()
76 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), equalTo(true))
80 fun `predicate correctly recognizes visible reply`() {
81 makePostPresentAndVisible()
82 assertThat(replyVisibilityFilter.isVisible(localSone).test(postReply), equalTo(true))
86 fun `predicate correctly recognizes not visible reply`() {
87 makePostPresentAndVisible()
88 makeReplyComeFromFuture()
89 assertThat(replyVisibilityFilter.isVisible(localSone).test(postReply), equalTo(false))
93 whenever(localSone.id).thenReturn(LOCAL_ID)
94 whenever(localSone.isLocal).thenReturn(true)
95 whenever(localSone.identity).thenReturn(localIdentity)
96 whenever(post.recipientId).thenReturn(Optional.absent())
101 private const val LOCAL_ID = "local-id"