Merge branch 'release-0.9.6'
[Sone.git] / src / test / java / net / pterodactylus / sone / web / BookmarksPageTest.java
1 package net.pterodactylus.sone.web;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.contains;
5 import static org.hamcrest.Matchers.is;
6 import static org.mockito.Mockito.mock;
7 import static org.mockito.Mockito.when;
8
9 import java.util.Collection;
10 import java.util.HashSet;
11 import java.util.Set;
12
13 import net.pterodactylus.sone.data.Post;
14 import net.pterodactylus.sone.web.page.FreenetTemplatePage.RedirectException;
15 import net.pterodactylus.util.collection.Pagination;
16
17 import org.junit.Test;
18
19 /**
20  * Unit test for {@link BookmarksPage}.
21  *
22  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
23  */
24 public class BookmarksPageTest extends WebPageTest {
25
26         private final BookmarksPage page = new BookmarksPage(template, webInterface);
27
28         @Test
29         public void pageReturnsCorrectPath() {
30                 assertThat(page.getPath(), is("bookmarks.html"));
31         }
32
33         @Test
34         @SuppressWarnings("unchecked")
35         public void pageSetsCorrectPostsInTemplateContext() throws RedirectException {
36                 Post post1 = createPost(true, 3000L);
37                 Post post2 = createPost(true, 1000L);
38                 Post post3 = createPost(true, 2000L);
39                 Set<Post> bookmarkedPosts = createBookmarkedPosts(post1, post2, post3);
40                 when(core.getBookmarkedPosts()).thenReturn(bookmarkedPosts);
41                 when(core.getPreferences().getPostsPerPage()).thenReturn(5);
42                 page.processTemplate(freenetRequest, templateContext);
43                 assertThat((Collection<Post>) templateContext.get("posts"), contains(post1, post3, post2));
44                 assertThat(((Pagination<Post>) templateContext.get("pagination")).getItems(), contains(post1, post3, post2));
45                 assertThat(((Boolean) templateContext.get("postsNotLoaded")), is(false));
46         }
47
48         private Set<Post> createBookmarkedPosts(Post post1, Post post2, Post post3) {
49                 Set<Post> bookmarkedPosts = new HashSet<>();
50                 bookmarkedPosts.add(post1);
51                 bookmarkedPosts.add(post2);
52                 bookmarkedPosts.add(post3);
53                 return bookmarkedPosts;
54         }
55
56         @Test
57         @SuppressWarnings("unchecked")
58         public void notLoadedPostsAreNotIncludedButAFlagIsSet() throws RedirectException {
59                 Post post1 = createPost(true, 1000L);
60                 Post post2 = createPost(true, 3000L);
61                 Post post3 = createPost(false, 2000L);
62                 Set<Post> bookmarkedPosts = createBookmarkedPosts(post1, post2, post3);
63                 when(core.getBookmarkedPosts()).thenReturn(bookmarkedPosts);
64                 when(core.getPreferences().getPostsPerPage()).thenReturn(5);
65                 page.processTemplate(freenetRequest, templateContext);
66                 assertThat((Collection<Post>) templateContext.get("posts"), contains(post2, post1));
67                 assertThat(((Pagination<Post>) templateContext.get("pagination")).getItems(), contains(post2, post1));
68                 assertThat(((Boolean) templateContext.get("postsNotLoaded")), is(true));
69         }
70
71         private Post createPost(boolean postLoaded, long time) {
72                 Post post = mock(Post.class);
73                 when(post.isLoaded()).thenReturn(postLoaded);
74                 when(post.getTime()).thenReturn(time);
75                 return post;
76         }
77
78 }