1 package net.pterodactylus.sone.notify;
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;
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;
14 import com.google.common.base.Optional;
15 import com.google.inject.Guice;
16 import com.google.inject.Injector;
17 import org.junit.Test;
20 * Unit test for {@link ReplyVisibilityFilterTest}.
22 public class ReplyVisibilityFilterTest {
24 private static final String LOCAL_ID = "local-id";
26 private final PostVisibilityFilter postVisibilityFilter = mock(PostVisibilityFilter.class);
27 private final ReplyVisibilityFilter replyVisibilityFilter = new ReplyVisibilityFilter(postVisibilityFilter);
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);
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());
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));
49 private void makePostPresent() {
50 when(postReply.getPost()).thenReturn(Optional.of(post));
54 public void replyIsNotVisibleIfPostIsNotVisible() {
56 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
59 private void makePostAbsent() {
60 when(postReply.getPost()).thenReturn(Optional.<Post>absent());
64 public void replyIsNotVisibleIfPostIsNotPresent() {
66 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
69 private void makePostPresentAndVisible() {
71 when(postVisibilityFilter.isPostVisible(localSone, post)).thenReturn(true);
74 private void makeReplyComeFromFuture() {
75 when(postReply.getTime()).thenReturn(System.currentTimeMillis() + 1000);
79 public void replyIsNotVisibleIfItIsFromTheFuture() {
80 makePostPresentAndVisible();
81 makeReplyComeFromFuture();
82 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
86 public void replyIsVisibleIfItIsNotFromTheFuture() {
87 makePostPresentAndVisible();
88 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(true));
92 public void predicateCorrectlyRecognizesVisibleReply() {
93 makePostPresentAndVisible();
94 assertThat(replyVisibilityFilter.isVisible(localSone).apply(postReply), is(true));
98 public void predicateCorrectlyRecognizesNotVisibleReply() {
99 makePostPresentAndVisible();
100 makeReplyComeFromFuture();
101 assertThat(replyVisibilityFilter.isVisible(localSone).apply(postReply), is(false));