package net.pterodactylus.sone.web;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.web.page.FreenetTemplatePage.RedirectException;
import net.pterodactylus.util.collection.Pagination;
import org.junit.Test;
/**
* Unit test for {@link BookmarksPage}.
*
* @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
*/
public class BookmarksPageTest extends WebPageTest {
private final BookmarksPage page = new BookmarksPage(template, webInterface);
@Test
public void pageReturnsCorrectPath() {
assertThat(page.getPath(), is("bookmarks.html"));
}
@Test
@SuppressWarnings("unchecked")
public void pageSetsCorrectPostsInTemplateContext() throws RedirectException {
Post post1 = createPost(true, 3000L);
Post post2 = createPost(true, 1000L);
Post post3 = createPost(true, 2000L);
Set<Post> bookmarkedPosts = createBookmarkedPosts(post1, post2, post3);
when(core.getBookmarkedPosts()).thenReturn(bookmarkedPosts);
when(core.getPreferences().getPostsPerPage()).thenReturn(5);
page.processTemplate(freenetRequest, templateContext);
assertThat((Collection<Post>) templateContext.get("posts"), contains(post1, post3, post2));
assertThat(((Pagination<Post>) templateContext.get("pagination")).getItems(), contains(post1, post3, post2));
assertThat(((Boolean) templateContext.get("postsNotLoaded")), is(false));
}
private Set<Post> createBookmarkedPosts(Post post1, Post post2, Post post3) {
Set<Post> bookmarkedPosts = new HashSet<>();
bookmarkedPosts.add(post1);
bookmarkedPosts.add(post2);
bookmarkedPosts.add(post3);
return bookmarkedPosts;
}
@Test
@SuppressWarnings("unchecked")
public void notLoadedPostsAreNotIncludedButAFlagIsSet() throws RedirectException {
Post post1 = createPost(true, 1000L);
Post post2 = createPost(true, 3000L);
Post post3 = createPost(false, 2000L);
Set<Post> bookmarkedPosts = createBookmarkedPosts(post1, post2, post3);
when(core.getBookmarkedPosts()).thenReturn(bookmarkedPosts);
when(core.getPreferences().getPostsPerPage()).thenReturn(5);
page.processTemplate(freenetRequest, templateContext);
assertThat((Collection<Post>) templateContext.get("posts"), contains(post2, post1));
assertThat(((Pagination<Post>) templateContext.get("pagination")).getItems(), contains(post2, post1));
assertThat(((Boolean) templateContext.get("postsNotLoaded")), is(true));
}
private Post createPost(boolean postLoaded, long time) {
Post post = mock(Post.class);
when(post.isLoaded()).thenReturn(postLoaded);
when(post.getTime()).thenReturn(time);
return post;
}
}