X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneChangeDetectorTest.java;fp=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneChangeDetectorTest.java;h=f070eff94f80dc502142f17f327368c6374b4ef8;hb=bae04bf1966d021bd57d5cfc827e8f2b1cd247ce;hp=0000000000000000000000000000000000000000;hpb=39ad8597b568c51f095c07a8de4f5424db185d8e;p=Sone.git diff --git a/src/test/java/net/pterodactylus/sone/core/SoneChangeDetectorTest.java b/src/test/java/net/pterodactylus/sone/core/SoneChangeDetectorTest.java new file mode 100644 index 0000000..f070eff --- /dev/null +++ b/src/test/java/net/pterodactylus/sone/core/SoneChangeDetectorTest.java @@ -0,0 +1,108 @@ +package net.pterodactylus.sone.core; + +import static java.util.Arrays.asList; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.HashSet; + +import net.pterodactylus.sone.core.SoneChangeDetector.PostProcessor; +import net.pterodactylus.sone.core.SoneChangeDetector.PostReplyProcessor; +import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.data.PostReply; +import net.pterodactylus.sone.data.Sone; + +import org.junit.Before; +import org.junit.Test; + +/** + * Unit test for {@link SoneChangeDetector}. + * + * @author David ‘Bombe’ Roden + */ +public class SoneChangeDetectorTest { + + private final Sone oldSone = mock(Sone.class); + private final Sone newSone = mock(Sone.class); + private final SoneChangeDetector soneChangeDetector = + new SoneChangeDetector(oldSone); + private final Post oldPost = mock(Post.class); + private final Post removedPost = mock(Post.class); + private final Post newPost = mock(Post.class); + private final PostProcessor newPostProcessor = mock(PostProcessor.class); + private final PostProcessor removedPostProcessor = + mock(PostProcessor.class); + private final PostReply oldPostReply = mock(PostReply.class); + private final PostReply removedPostReply = mock(PostReply.class); + private final PostReply newPostReply = mock(PostReply.class); + private final PostReplyProcessor newPostReplyProcessor = + mock(PostReplyProcessor.class); + private final PostReplyProcessor removedPostReplyProcessor = + mock(PostReplyProcessor.class); + + @Before + public void setupPosts() { + when(oldSone.getPosts()).thenReturn(asList(oldPost, removedPost)); + when(newSone.getPosts()).thenReturn(asList(oldPost, newPost)); + } + + @Before + public void setupPostProcessors() { + soneChangeDetector.onNewPosts(newPostProcessor); + soneChangeDetector.onRemovedPosts(removedPostProcessor); + } + + @Before + public void setupPostReplies() { + when(oldSone.getReplies()).thenReturn( + new HashSet( + asList(oldPostReply, removedPostReply))); + when(newSone.getReplies()).thenReturn( + new HashSet(asList(oldPostReply, newPostReply))); + } + + @Before + public void setupPostReplyProcessors() { + soneChangeDetector.onNewPostReplies(newPostReplyProcessor); + soneChangeDetector.onRemovedPostReplies(removedPostReplyProcessor); + } + + @Test + public void changeDetectorDetectsChanges() { + soneChangeDetector.detectChanges(newSone); + + verify(newPostProcessor).processPost(newPost); + verify(newPostProcessor, never()).processPost(oldPost); + verify(newPostProcessor, never()).processPost(removedPost); + verify(removedPostProcessor).processPost(removedPost); + verify(removedPostProcessor, never()).processPost(oldPost); + verify(removedPostProcessor, never()).processPost(newPost); + + verify(newPostReplyProcessor).processPostReply(newPostReply); + verify(newPostReplyProcessor, never()).processPostReply(oldPostReply); + verify(newPostReplyProcessor, never()).processPostReply( + removedPostReply); + verify(removedPostReplyProcessor).processPostReply(removedPostReply); + verify(removedPostReplyProcessor, never()).processPostReply( + oldPostReply); + verify(removedPostReplyProcessor, never()).processPostReply( + newPostReply); + } + + @Test + public void changeDetectorDoesNotNotifyAnyProcessorIfProcessorsUnset() { + soneChangeDetector.onNewPosts(null); + soneChangeDetector.onRemovedPosts(null); + soneChangeDetector.onNewPostReplies(null); + soneChangeDetector.onRemovedPostReplies(null); + soneChangeDetector.detectChanges(newSone); + verify(newPostProcessor, never()).processPost(any(Post.class)); + verify(removedPostProcessor, never()).processPost(any(Post.class)); + verify(newPostReplyProcessor, never()).processPostReply(any(PostReply.class)); + verify(removedPostReplyProcessor, never()).processPostReply(any(PostReply.class)); + } + +}