🔀 Merge branch 'release/v82'
[Sone.git] / src / test / java / net / pterodactylus / sone / notify / ReplyVisibilityFilterTest.java
1 package net.pterodactylus.sone.notify;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.is;
5 import static org.hamcrest.Matchers.sameInstance;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.when;
8
9 import net.pterodactylus.sone.data.Post;
10 import net.pterodactylus.sone.data.PostReply;
11 import net.pterodactylus.sone.data.Sone;
12 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
13
14 import com.google.common.base.Optional;
15 import com.google.inject.Guice;
16 import com.google.inject.Injector;
17 import org.junit.Test;
18
19 /**
20  * Unit test for {@link ReplyVisibilityFilterTest}.
21  */
22 public class ReplyVisibilityFilterTest {
23
24         private static final String LOCAL_ID = "local-id";
25
26         private final PostVisibilityFilter postVisibilityFilter = mock(PostVisibilityFilter.class);
27         private final ReplyVisibilityFilter replyVisibilityFilter = new ReplyVisibilityFilter(postVisibilityFilter);
28
29         private final Sone localSone = mock(Sone.class);
30         private final OwnIdentity localIdentity = mock(OwnIdentity.class);
31         private final Post post = mock(Post.class);
32         private final PostReply postReply = mock(PostReply.class);
33
34         public ReplyVisibilityFilterTest() {
35                 when(localSone.getId()).thenReturn(LOCAL_ID);
36                 when(localSone.isLocal()).thenReturn(true);
37                 when(localSone.getIdentity()).thenReturn(localIdentity);
38                 when(post.getRecipientId()).thenReturn(Optional.<String>absent());
39         }
40
41         @Test
42         public void replyVisibilityFilterIsOnlyCreatedOnce() {
43                 Injector injector = Guice.createInjector();
44                 ReplyVisibilityFilter firstFilter = injector.getInstance(ReplyVisibilityFilter.class);
45                 ReplyVisibilityFilter secondFilter = injector.getInstance(ReplyVisibilityFilter.class);
46                 assertThat(firstFilter, sameInstance(secondFilter));
47         }
48
49         private void makePostPresent() {
50                 when(postReply.getPost()).thenReturn(Optional.of(post));
51         }
52
53         @Test
54         public void replyIsNotVisibleIfPostIsNotVisible() {
55                 makePostPresent();
56                 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
57         }
58
59         private void makePostAbsent() {
60                 when(postReply.getPost()).thenReturn(Optional.<Post>absent());
61         }
62
63         @Test
64         public void replyIsNotVisibleIfPostIsNotPresent() {
65                 makePostAbsent();
66                 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
67         }
68
69         private void makePostPresentAndVisible() {
70                 makePostPresent();
71                 when(postVisibilityFilter.isPostVisible(localSone, post)).thenReturn(true);
72         }
73
74         private void makeReplyComeFromFuture() {
75                 when(postReply.getTime()).thenReturn(System.currentTimeMillis() + 1000);
76         }
77
78         @Test
79         public void replyIsNotVisibleIfItIsFromTheFuture() {
80                 makePostPresentAndVisible();
81                 makeReplyComeFromFuture();
82                 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
83         }
84
85         @Test
86         public void replyIsVisibleIfItIsNotFromTheFuture() {
87                 makePostPresentAndVisible();
88                 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(true));
89         }
90
91         @Test
92         public void predicateCorrectlyRecognizesVisibleReply() {
93                 makePostPresentAndVisible();
94                 assertThat(replyVisibilityFilter.isVisible(localSone).apply(postReply), is(true));
95         }
96
97         @Test
98         public void predicateCorrectlyRecognizesNotVisibleReply() {
99                 makePostPresentAndVisible();
100                 makeReplyComeFromFuture();
101                 assertThat(replyVisibilityFilter.isVisible(localSone).apply(postReply), is(false));
102         }
103
104 }