1 package net.pterodactylus.sone.database.memory;
3 import static com.google.common.base.Optional.fromNullable;
4 import static org.hamcrest.MatcherAssert.assertThat;
5 import static org.hamcrest.Matchers.is;
6 import static org.mockito.Matchers.any;
7 import static org.mockito.Matchers.anyString;
8 import static org.mockito.Mockito.mock;
9 import static org.mockito.Mockito.verify;
10 import static org.mockito.Mockito.when;
12 import java.util.HashMap;
13 import java.util.HashSet;
17 import net.pterodactylus.sone.data.Post;
19 import com.google.common.base.Optional;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.mockito.invocation.InvocationOnMock;
23 import org.mockito.stubbing.Answer;
26 * Unit test for {@link MemoryBookmarkDatabase}.
28 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
30 public class MemoryBookmarkDatabaseTest {
32 private final MemoryDatabase memoryDatabase = mock(MemoryDatabase.class);
33 private final ConfigurationLoader configurationLoader = mock(ConfigurationLoader.class);
34 private final MemoryBookmarkDatabase bookmarkDatabase =
35 new MemoryBookmarkDatabase(memoryDatabase, configurationLoader);
36 private final Map<String, Post> posts = new HashMap<String, Post>();
39 public void setupMemoryDatabase() {
40 when(memoryDatabase.getPost(anyString())).thenAnswer(
41 new Answer<Optional<Post>>() {
43 public Optional<Post> answer(
44 InvocationOnMock invocation) {
46 posts.get(invocation.getArguments()[0]));
52 public void setupPosts() {
53 createPost("PostId1");
54 createPost("PostId2");
57 private void createPost(String postId) {
58 Post post = mock(Post.class);
59 when(post.getId()).thenReturn(postId);
60 posts.put(postId, post);
64 public void bookmarkDatabaseRetainsBookmarkedPosts() {
65 Set<Post> allPosts = new HashSet<Post>(posts.values());
66 for (Post post : allPosts) {
67 bookmarkDatabase.bookmarkPost(post);
69 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
70 for (Post post : allPosts) {
71 assertThat(bookmarkDatabase.isPostBookmarked(post), is(true));
76 public void removingABookmarkRemovesTheCorrectBookmark() {
77 Set<Post> allPosts = new HashSet<Post>(posts.values());
78 for (Post post : allPosts) {
79 bookmarkDatabase.bookmarkPost(post);
81 Post randomPost = posts.values().iterator().next();
82 bookmarkDatabase.unbookmarkPost(randomPost);
83 allPosts.remove(randomPost);
84 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
85 for (Post post : posts.values()) {
86 assertThat(bookmarkDatabase.isPostBookmarked(post),
87 is(!post.equals(randomPost)));
92 public void startingTheDatabaseLoadsBookmarkedPosts() {
93 bookmarkDatabase.start();
94 verify(configurationLoader).loadBookmarkedPosts();
98 public void stoppingTheDatabaseSavesTheBookmarkedPosts() {
99 bookmarkDatabase.stop();
100 verify(configurationLoader).saveBookmarkedPosts(any(Set.class));