Merge branch 'release-0.9.6'
[Sone.git] / src / test / java / net / pterodactylus / sone / database / memory / MemoryBookmarkDatabaseTest.java
index 93efe11..c16ce9d 100644 (file)
@@ -1,11 +1,15 @@
 package net.pterodactylus.sone.database.memory;
 
 import static com.google.common.base.Optional.fromNullable;
+import static net.pterodactylus.sone.Matchers.isPostWithId;
 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.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.HashMap;
@@ -29,8 +33,10 @@ import org.mockito.stubbing.Answer;
 public class MemoryBookmarkDatabaseTest {
 
        private final MemoryDatabase memoryDatabase = mock(MemoryDatabase.class);
+       private final ConfigurationLoader configurationLoader =
+                       mock(ConfigurationLoader.class);
        private final MemoryBookmarkDatabase bookmarkDatabase =
-                       new MemoryBookmarkDatabase(memoryDatabase);
+                       new MemoryBookmarkDatabase(memoryDatabase, configurationLoader);
        private final Map<String, Post> posts = new HashMap<String, Post>();
 
        @Before
@@ -48,14 +54,20 @@ public class MemoryBookmarkDatabaseTest {
 
        @Before
        public void setupPosts() {
-               createPost("PostId1");
-               createPost("PostId2");
+               createAndRegisterPost("PostId1");
+               createAndRegisterPost("PostId2");
        }
 
-       private void createPost(String postId) {
+       private Post createAndRegisterPost(String postId) {
+               Post post = createPost(postId);
+               posts.put(postId, post);
+               return post;
+       }
+
+       private Post createPost(String postId) {
                Post post = mock(Post.class);
                when(post.getId()).thenReturn(postId);
-               posts.put(postId, post);
+               return post;
        }
 
        @Test
@@ -71,6 +83,25 @@ public class MemoryBookmarkDatabaseTest {
        }
 
        @Test
+       public void bookmarkingAPostSavesTheDatabase() {
+               for (Post post : posts.values()) {
+                       bookmarkDatabase.bookmarkPost(post);
+               }
+               verify(configurationLoader, times(posts.size()))
+                               .saveBookmarkedPosts(any(Set.class));
+       }
+
+       @Test
+       public void unbookmarkingAPostSavesTheDatabase() {
+               for (Post post : posts.values()) {
+                       bookmarkDatabase.bookmarkPost(post);
+                       bookmarkDatabase.unbookmarkPost(post);
+               }
+               verify(configurationLoader, times(posts.size() * 2))
+                               .saveBookmarkedPosts(any(Set.class));
+       }
+
+       @Test
        public void removingABookmarkRemovesTheCorrectBookmark() {
                Set<Post> allPosts = new HashSet<Post>(posts.values());
                for (Post post : allPosts) {
@@ -87,11 +118,25 @@ public class MemoryBookmarkDatabaseTest {
        }
 
        @Test
-       public void addingABookmarkByIdBookmarksTheCorrectPost() {
-               Post randomPost = posts.values().iterator().next();
-               bookmarkDatabase.bookmarkPost(randomPost.getId());
-               assertThat(bookmarkDatabase.getBookmarkedPosts(),
-                               contains(randomPost));
+       public void startingTheDatabaseLoadsBookmarkedPosts() {
+               bookmarkDatabase.start();
+               verify(configurationLoader).loadBookmarkedPosts();
+       }
+
+       @Test
+       public void stoppingTheDatabaseSavesTheBookmarkedPosts() {
+               bookmarkDatabase.stop();
+               verify(configurationLoader).saveBookmarkedPosts(any(Set.class));
+       }
+
+       @Test
+       public void bookmarkedPostsIncludeNotYetLoadedPosts() {
+               bookmarkDatabase.bookmarkPost(posts.get("PostId1"));
+               bookmarkDatabase.bookmarkPost(createPost("PostId3"));
+               final Set<Post> bookmarkedPosts =
+                               bookmarkDatabase.getBookmarkedPosts();
+               assertThat(bookmarkedPosts,
+                               contains(isPostWithId("PostId1"), isPostWithId("PostId3")));
        }
 
 }