ceb93e903a6f5078f50f92f2fc7750f04572e0d5
[Sone.git] / src / test / java / net / pterodactylus / sone / database / memory / MemoryBookmarkDatabaseTest.java
1 package net.pterodactylus.sone.database.memory;
2
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;
11
12 import java.util.HashMap;
13 import java.util.HashSet;
14 import java.util.Map;
15 import java.util.Set;
16
17 import net.pterodactylus.sone.data.Post;
18
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;
24
25 /**
26  * Unit test for {@link MemoryBookmarkDatabase}.
27  *
28  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
29  */
30 public class MemoryBookmarkDatabaseTest {
31
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>();
37
38         @Before
39         public void setupMemoryDatabase() {
40                 when(memoryDatabase.getPost(anyString())).thenAnswer(
41                                 new Answer<Optional<Post>>() {
42                                         @Override
43                                         public Optional<Post> answer(
44                                                         InvocationOnMock invocation) {
45                                                 return fromNullable(
46                                                                 posts.get(invocation.getArguments()[0]));
47                                         }
48                                 });
49         }
50
51         @Before
52         public void setupPosts() {
53                 createPost("PostId1");
54                 createPost("PostId2");
55         }
56
57         private void createPost(String postId) {
58                 Post post = mock(Post.class);
59                 when(post.getId()).thenReturn(postId);
60                 posts.put(postId, post);
61         }
62
63         @Test
64         public void bookmarkDatabaseRetainsBookmarkedPosts() {
65                 Set<Post> allPosts = new HashSet<Post>(posts.values());
66                 for (Post post : allPosts) {
67                         bookmarkDatabase.bookmarkPost(post);
68                 }
69                 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
70                 for (Post post : allPosts) {
71                         assertThat(bookmarkDatabase.isPostBookmarked(post), is(true));
72                 }
73         }
74
75         @Test
76         public void removingABookmarkRemovesTheCorrectBookmark() {
77                 Set<Post> allPosts = new HashSet<Post>(posts.values());
78                 for (Post post : allPosts) {
79                         bookmarkDatabase.bookmarkPost(post);
80                 }
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)));
88                 }
89         }
90
91         @Test
92         public void startingTheDatabaseLoadsBookmarkedPosts() {
93                 bookmarkDatabase.start();
94                 verify(configurationLoader).loadBookmarkedPosts();
95         }
96
97         @Test
98         public void stoppingTheDatabaseSavesTheBookmarkedPosts() {
99                 bookmarkDatabase.stop();
100                 verify(configurationLoader).saveBookmarkedPosts(any(Set.class));
101         }
102
103 }