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 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
24 public class ReplyVisibilityFilterTest {
26 private static final String LOCAL_ID = "local-id";
28 private final PostVisibilityFilter postVisibilityFilter = mock(PostVisibilityFilter.class);
29 private final ReplyVisibilityFilter replyVisibilityFilter = new ReplyVisibilityFilter(postVisibilityFilter);
31 private final Sone localSone = mock(Sone.class);
32 private final OwnIdentity localIdentity = mock(OwnIdentity.class);
33 private final Post post = mock(Post.class);
34 private final PostReply postReply = mock(PostReply.class);
36 public ReplyVisibilityFilterTest() {
37 when(localSone.getId()).thenReturn(LOCAL_ID);
38 when(localSone.isLocal()).thenReturn(true);
39 when(localSone.getIdentity()).thenReturn(localIdentity);
40 when(post.getRecipientId()).thenReturn(Optional.<String>absent());
44 public void replyVisibilityFilterIsOnlyCreatedOnce() {
45 Injector injector = Guice.createInjector();
46 ReplyVisibilityFilter firstFilter = injector.getInstance(ReplyVisibilityFilter.class);
47 ReplyVisibilityFilter secondFilter = injector.getInstance(ReplyVisibilityFilter.class);
48 assertThat(firstFilter, sameInstance(secondFilter));
51 private void makePostPresent() {
52 when(postReply.getPost()).thenReturn(Optional.of(post));
56 public void replyIsNotVisibleIfPostIsNotVisible() {
58 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
61 private void makePostAbsent() {
62 when(postReply.getPost()).thenReturn(Optional.<Post>absent());
66 public void replyIsNotVisibleIfPostIsNotPresent() {
68 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
71 private void makePostPresentAndVisible() {
73 when(postVisibilityFilter.isPostVisible(localSone, post)).thenReturn(true);
76 private void makeReplyComeFromFuture() {
77 when(postReply.getTime()).thenReturn(System.currentTimeMillis() + 1000);
81 public void replyIsNotVisibleIfItIsFromTheFuture() {
82 makePostPresentAndVisible();
83 makeReplyComeFromFuture();
84 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(false));
88 public void replyIsVisibleIfItIsNotFromTheFuture() {
89 makePostPresentAndVisible();
90 assertThat(replyVisibilityFilter.isReplyVisible(localSone, postReply), is(true));
94 public void predicateCorrectlyRecognizesVisibleReply() {
95 makePostPresentAndVisible();
96 assertThat(replyVisibilityFilter.isVisible(localSone).apply(postReply), is(true));
100 public void predicateCorrectlyRecognizesNotVisibleReply() {
101 makePostPresentAndVisible();
102 makeReplyComeFromFuture();
103 assertThat(replyVisibilityFilter.isVisible(localSone).apply(postReply), is(false));