X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryBookmarkDatabaseTest.java;fp=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryBookmarkDatabaseTest.java;h=93efe116730fd7d582c38ac1d3ad9af6e3fbde58;hp=0000000000000000000000000000000000000000;hb=aba6bd1d58ef244050703e1b99d7389e024809c6;hpb=aeed1ea944bcfa2cc057ba99d258c055e55a9e2d diff --git a/src/test/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabaseTest.java b/src/test/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabaseTest.java new file mode 100644 index 0000000..93efe11 --- /dev/null +++ b/src/test/java/net/pterodactylus/sone/database/memory/MemoryBookmarkDatabaseTest.java @@ -0,0 +1,97 @@ +package net.pterodactylus.sone.database.memory; + +import static com.google.common.base.Optional.fromNullable; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import net.pterodactylus.sone.data.Post; + +import com.google.common.base.Optional; +import org.junit.Before; +import org.junit.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; + +/** + * Unit test for {@link MemoryBookmarkDatabase}. + * + * @author David ‘Bombe’ Roden + */ +public class MemoryBookmarkDatabaseTest { + + private final MemoryDatabase memoryDatabase = mock(MemoryDatabase.class); + private final MemoryBookmarkDatabase bookmarkDatabase = + new MemoryBookmarkDatabase(memoryDatabase); + private final Map posts = new HashMap(); + + @Before + public void setupMemoryDatabase() { + when(memoryDatabase.getPost(anyString())).thenAnswer( + new Answer>() { + @Override + public Optional answer( + InvocationOnMock invocation) { + return fromNullable( + posts.get(invocation.getArguments()[0])); + } + }); + } + + @Before + public void setupPosts() { + createPost("PostId1"); + createPost("PostId2"); + } + + private void createPost(String postId) { + Post post = mock(Post.class); + when(post.getId()).thenReturn(postId); + posts.put(postId, post); + } + + @Test + public void bookmarkDatabaseRetainsBookmarkedPosts() { + Set allPosts = new HashSet(posts.values()); + for (Post post : allPosts) { + bookmarkDatabase.bookmarkPost(post); + } + assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts)); + for (Post post : allPosts) { + assertThat(bookmarkDatabase.isPostBookmarked(post), is(true)); + } + } + + @Test + public void removingABookmarkRemovesTheCorrectBookmark() { + Set allPosts = new HashSet(posts.values()); + for (Post post : allPosts) { + bookmarkDatabase.bookmarkPost(post); + } + Post randomPost = posts.values().iterator().next(); + bookmarkDatabase.unbookmarkPost(randomPost); + allPosts.remove(randomPost); + assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts)); + for (Post post : posts.values()) { + assertThat(bookmarkDatabase.isPostBookmarked(post), + is(!post.equals(randomPost))); + } + } + + @Test + public void addingABookmarkByIdBookmarksTheCorrectPost() { + Post randomPost = posts.values().iterator().next(); + bookmarkDatabase.bookmarkPost(randomPost.getId()); + assertThat(bookmarkDatabase.getBookmarkedPosts(), + contains(randomPost)); + } + +}