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.times;
10 import static org.mockito.Mockito.verify;
11 import static org.mockito.Mockito.when;
13 import java.util.HashMap;
14 import java.util.HashSet;
18 import net.pterodactylus.sone.data.Post;
20 import com.google.common.base.Optional;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.mockito.invocation.InvocationOnMock;
24 import org.mockito.stubbing.Answer;
27 * Unit test for {@link MemoryBookmarkDatabase}.
29 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
31 public class MemoryBookmarkDatabaseTest {
33 private final MemoryDatabase memoryDatabase = mock(MemoryDatabase.class);
34 private final ConfigurationLoader configurationLoader =
35 mock(ConfigurationLoader.class);
36 private final MemoryBookmarkDatabase bookmarkDatabase =
37 new MemoryBookmarkDatabase(memoryDatabase, configurationLoader);
38 private final Map<String, Post> posts = new HashMap<String, Post>();
41 public void setupMemoryDatabase() {
42 when(memoryDatabase.getPost(anyString())).thenAnswer(
43 new Answer<Optional<Post>>() {
45 public Optional<Post> answer(
46 InvocationOnMock invocation) {
48 posts.get(invocation.getArguments()[0]));
54 public void setupPosts() {
55 createPost("PostId1");
56 createPost("PostId2");
59 private void createPost(String postId) {
60 Post post = mock(Post.class);
61 when(post.getId()).thenReturn(postId);
62 posts.put(postId, post);
66 public void bookmarkDatabaseRetainsBookmarkedPosts() {
67 Set<Post> allPosts = new HashSet<Post>(posts.values());
68 for (Post post : allPosts) {
69 bookmarkDatabase.bookmarkPost(post);
71 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
72 for (Post post : allPosts) {
73 assertThat(bookmarkDatabase.isPostBookmarked(post), is(true));
78 public void bookmarkingAPostSavesTheDatabase() {
79 for (Post post : posts.values()) {
80 bookmarkDatabase.bookmarkPost(post);
82 verify(configurationLoader, times(posts.size()))
83 .saveBookmarkedPosts(any(Set.class));
87 public void unbookmarkingAPostSavesTheDatabase() {
88 for (Post post : posts.values()) {
89 bookmarkDatabase.bookmarkPost(post);
90 bookmarkDatabase.unbookmarkPost(post);
92 verify(configurationLoader, times(posts.size() * 2))
93 .saveBookmarkedPosts(any(Set.class));
97 public void removingABookmarkRemovesTheCorrectBookmark() {
98 Set<Post> allPosts = new HashSet<Post>(posts.values());
99 for (Post post : allPosts) {
100 bookmarkDatabase.bookmarkPost(post);
102 Post randomPost = posts.values().iterator().next();
103 bookmarkDatabase.unbookmarkPost(randomPost);
104 allPosts.remove(randomPost);
105 assertThat(bookmarkDatabase.getBookmarkedPosts(), is(allPosts));
106 for (Post post : posts.values()) {
107 assertThat(bookmarkDatabase.isPostBookmarked(post),
108 is(!post.equals(randomPost)));
113 public void startingTheDatabaseLoadsBookmarkedPosts() {
114 bookmarkDatabase.start();
115 verify(configurationLoader).loadBookmarkedPosts();
119 public void stoppingTheDatabaseSavesTheBookmarkedPosts() {
120 bookmarkDatabase.stop();
121 verify(configurationLoader).saveBookmarkedPosts(any(Set.class));