X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpages%2FNewPageTest.kt;h=a4d76173afd948e573a9e3954bc9aa6fa9e58918;hb=HEAD;hp=62b1baa2c44f5f5ae5971e726ff15420e0b31d97;hpb=4931e11b371842eea6fdf9bea7504eed63ea298c;p=Sone.git 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..a4d7617 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/pages/NewPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/pages/NewPageTest.kt @@ -1,29 +1,23 @@ 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.mock -import net.pterodactylus.sone.test.whenever -import org.hamcrest.MatcherAssert.assertThat -import org.hamcrest.Matchers.containsInAnyOrder -import org.hamcrest.Matchers.equalTo -import org.junit.Before -import org.junit.Test -import java.util.Arrays.asList +import net.pterodactylus.sone.data.* +import net.pterodactylus.sone.test.* +import net.pterodactylus.sone.utils.* +import net.pterodactylus.sone.web.* +import net.pterodactylus.sone.web.page.* +import org.hamcrest.MatcherAssert.* +import org.hamcrest.Matchers.* +import org.junit.* +import java.util.Arrays.* /** * Unit test for [NewPage]. */ -class NewPageTest: WebPageTest() { - - private val page = NewPage(template, webInterface) - - override fun getPage() = page +class NewPageTest : WebPageTest(::NewPage) { @Before fun setupNumberOfPostsPerPage() { - webInterface.core.preferences.postsPerPage = 5 + webInterface.core.preferences.newPostsPerPage = 5 } @Test @@ -39,14 +33,14 @@ class NewPageTest: WebPageTest() { @Test fun `page returns correct title`() { addTranslation("Page.New.Title", "new page title") - assertThat(page.getPageTitle(freenetRequest), equalTo("new page title")) + assertThat(page.getPageTitle(soneRequest), equalTo("new page title")) } @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 +48,48 @@ 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.newPostsPerPage = 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.newPostsPerPage = 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()) + } + + @Test + fun `page is annotated with the correct menuname`() { + assertThat(page.menuName, equalTo("New")) + } + + @Test + fun `page is annotated with correct template path`() { + assertThat(page.templatePath, equalTo("/templates/new.html")) + } + }