Load bookmarked posts in configuration loader, too.
[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.contains;
6 import static org.hamcrest.Matchers.is;
7 import static org.mockito.Matchers.anyString;
8 import static org.mockito.Mockito.mock;
9 import static org.mockito.Mockito.when;
10
11 import java.util.HashMap;
12 import java.util.HashSet;
13 import java.util.Map;
14 import java.util.Set;
15
16 import net.pterodactylus.sone.data.Post;
17
18 import com.google.common.base.Optional;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.invocation.InvocationOnMock;
22 import org.mockito.stubbing.Answer;
23
24 /**
25  * Unit test for {@link MemoryBookmarkDatabase}.
26  *
27  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
28  */
29 public class MemoryBookmarkDatabaseTest {
30
31         private final MemoryDatabase memoryDatabase = mock(MemoryDatabase.class);
32         private final ConfigurationLoader configurationLoader = mock(ConfigurationLoader.class);
33         private final MemoryBookmarkDatabase bookmarkDatabase =
34                         new MemoryBookmarkDatabase(memoryDatabase, configurationLoader);
35         private final Map<String, Post> posts = new HashMap<String, Post>();
36
37         @Before
38         public void setupMemoryDatabase() {
39                 when(memoryDatabase.getPost(anyString())).thenAnswer(
40                                 new Answer<Optional<Post>>() {
41                                         @Override
42                                         public Optional<Post> answer(
43                                                         InvocationOnMock invocation) {
44                                                 return fromNullable(
45                                                                 posts.get(invocation.getArguments()[0]));
46                                         }
47                                 });
48         }
49
50         @Before
51         public void setupPosts() {
52                 createPost("PostId1");
53                 createPost("PostId2");
54         }
55
56         private void createPost(String postId) {
57                 Post post = mock(Post.class);
58                 when(post.getId()).thenReturn(postId);
59                 posts.put(postId, post);
60         }
61
62         @Test
63         public void bookmarkDatabaseRetainsBookmarkedPosts() {
64                 Set<Post> allPosts = new HashSet<Post>(posts.values());
65                 for (Post post : allPosts) {
66                         bookmarkDatabase.bookmarkPost(post);
67                 }
68                 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
69                 for (Post post : allPosts) {
70                         assertThat(bookmarkDatabase.isPostBookmarked(post), is(true));
71                 }
72         }
73
74         @Test
75         public void removingABookmarkRemovesTheCorrectBookmark() {
76                 Set<Post> allPosts = new HashSet<Post>(posts.values());
77                 for (Post post : allPosts) {
78                         bookmarkDatabase.bookmarkPost(post);
79                 }
80                 Post randomPost = posts.values().iterator().next();
81                 bookmarkDatabase.unbookmarkPost(randomPost);
82                 allPosts.remove(randomPost);
83                 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
84                 for (Post post : posts.values()) {
85                         assertThat(bookmarkDatabase.isPostBookmarked(post),
86                                         is(!post.equals(randomPost)));
87                 }
88         }
89
90         @Test
91         public void addingABookmarkByIdBookmarksTheCorrectPost() {
92                 Post randomPost = posts.values().iterator().next();
93                 bookmarkDatabase.bookmarkPost(randomPost.getId());
94                 assertThat(bookmarkDatabase.getBookmarkedPosts(),
95                                 contains(randomPost));
96         }
97
98 }