X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpages%2FNewPageTest.kt;h=5c71e5dc876e81385c4e3e96ac09dd2a0418f531;hp=62b1baa2c44f5f5ae5971e726ff15420e0b31d97;hb=03c29a3838e23ed0b9731ca4d84cf58038c30dfe;hpb=4931e11b371842eea6fdf9bea7504eed63ea298c diff --git a/src/test/kotlin/net/pterodactylus/sone/web/pages/NewPageTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/pages/NewPageTest.kt index 62b1baa..5c71e5d 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/pages/NewPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/pages/NewPageTest.kt @@ -2,12 +2,17 @@ package net.pterodactylus.sone.web.pages import net.pterodactylus.sone.data.Post import net.pterodactylus.sone.data.PostReply -import net.pterodactylus.sone.test.asOptional +import net.pterodactylus.sone.test.getInstance import net.pterodactylus.sone.test.mock import net.pterodactylus.sone.test.whenever +import net.pterodactylus.sone.utils.Pagination +import net.pterodactylus.sone.utils.asOptional +import net.pterodactylus.sone.web.baseInjector import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.Matchers.contains import org.hamcrest.Matchers.containsInAnyOrder import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.notNullValue import org.junit.Before import org.junit.Test import java.util.Arrays.asList @@ -15,11 +20,7 @@ import java.util.Arrays.asList /** * Unit test for [NewPage]. */ -class NewPageTest: WebPageTest() { - - private val page = NewPage(template, webInterface) - - override fun getPage() = page +class NewPageTest: WebPageTest(::NewPage) { @Before fun setupNumberOfPostsPerPage() { @@ -44,9 +45,9 @@ class NewPageTest: WebPageTest() { @Test fun `posts are not duplicated when they come from both new posts and new replies notifications`() { - val extraPost = mock() - val posts = asList(mock(), mock()) - val postReplies = asList(mock(), mock()) + val extraPost = mock().withTime(2000) + val posts = asList(mock().withTime(1000), mock().withTime(3000)) + val postReplies = asList(mock(), mock()) whenever(postReplies[0].post).thenReturn(posts[0].asOptional()) whenever(postReplies[1].post).thenReturn(extraPost.asOptional()) whenever(webInterface.getNewPosts(currentSone)).thenReturn(posts) @@ -54,8 +55,38 @@ class NewPageTest: WebPageTest() { verifyNoRedirect { val renderedPosts = templateContext.get>("posts", List::class.java) - assertThat(renderedPosts, containsInAnyOrder(posts[0], posts[1], extraPost)) + assertThat(renderedPosts, containsInAnyOrder(posts[1], extraPost, posts[0])) + } + } + + private fun Post.withTime(time: Long) = apply { whenever(this.time).thenReturn(time) } + + @Test + @Suppress("UNCHECKED_CAST") + fun `posts are paginated properly`() { + webInterface.core.preferences.postsPerPage = 2 + val posts = listOf(mock().withTime(2000), mock().withTime(3000), mock().withTime(1000)) + whenever(webInterface.getNewPosts(currentSone)).thenReturn(posts) + verifyNoRedirect { + assertThat((templateContext["pagination"] as Pagination).items, contains(posts[1], posts[0])) } } + @Test + @Suppress("UNCHECKED_CAST") + fun `posts are paginated properly on second page`() { + webInterface.core.preferences.postsPerPage = 2 + addHttpRequestParameter("page", "1") + val posts = listOf(mock().withTime(2000), mock().withTime(3000), mock().withTime(1000)) + whenever(webInterface.getNewPosts(currentSone)).thenReturn(posts) + verifyNoRedirect { + assertThat((templateContext["pagination"] as Pagination).items, contains(posts[2])) + } + } + + @Test + fun `page can be created by dependency injection`() { + assertThat(baseInjector.getInstance(), notNullValue()) + } + }