1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.Post
4 import net.pterodactylus.sone.test.mock
5 import net.pterodactylus.sone.test.whenever
6 import net.pterodactylus.sone.web.pages.WebPageTest
7 import net.pterodactylus.sone.web.pages.BookmarksPage
8 import net.pterodactylus.util.collection.Pagination
9 import org.hamcrest.MatcherAssert.assertThat
10 import org.hamcrest.Matchers.contains
11 import org.hamcrest.Matchers.equalTo
12 import org.junit.Before
16 * Unit test for [BookmarksPage].
18 class BookmarksPageTest: WebPageTest() {
20 private val page = BookmarksPage(template, webInterface)
21 private val post1 = createLoadedPost(1000)
22 private val post2 = createLoadedPost(3000)
23 private val post3 = createLoadedPost(2000)
25 private fun createLoadedPost(time: Long) = mock<Post>().apply {
26 whenever(isLoaded).thenReturn(true)
27 whenever(this.time).thenReturn(time)
31 fun setupBookmarkedPostsAndPagination() {
32 whenever(core.bookmarkedPosts).thenReturn(setOf(post1, post2, post3))
33 core.preferences.postsPerPage = 5
37 fun `page returns correct path`() {
38 assertThat(page.path, equalTo("bookmarks.html"))
42 @Suppress("UNCHECKED_CAST")
43 fun `page sets correct posts in template context`() {
44 page.processTemplate(freenetRequest, templateContext)
45 assertThat(templateContext["posts"] as Collection<Post>, contains(post2, post3, post1))
46 assertThat((templateContext["pagination"] as Pagination<Post>).items, contains(post2, post3, post1))
47 assertThat(templateContext["postsNotLoaded"], equalTo<Any>(false))
51 @Suppress("UNCHECKED_CAST")
52 fun `page does not put unloaded posts in template context but sets a flag`() {
53 whenever(post3.isLoaded).thenReturn(false)
54 page.processTemplate(freenetRequest, templateContext)
55 assertThat(templateContext["posts"] as Collection<Post>, contains(post2, post1))
56 assertThat((templateContext["pagination"] as Pagination<Post>).items, contains(post2, post1))
57 assertThat(templateContext["postsNotLoaded"], equalTo<Any>(true))