From: David ‘Bombe’ Roden Date: Sat, 3 Jun 2017 09:13:28 +0000 (+0200) Subject: Add more tests for search page X-Git-Tag: 0.9.7^2~187 X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=fb8f95b6ec904fc6767cd774211532d79cf5a2a7;p=Sone.git Add more tests for search page --- diff --git a/src/test/kotlin/net/pterodactylus/sone/web/pages/SearchPageTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/pages/SearchPageTest.kt index 106b350..4f84c87 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/pages/SearchPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/pages/SearchPageTest.kt @@ -8,10 +8,14 @@ import net.pterodactylus.sone.data.PostReply import net.pterodactylus.sone.data.Profile import net.pterodactylus.sone.data.Sone import net.pterodactylus.sone.test.asOptional +import net.pterodactylus.sone.test.isOnPage import net.pterodactylus.sone.test.mock import net.pterodactylus.sone.test.whenever +import net.pterodactylus.sone.utils.Pagination +import net.pterodactylus.util.template.TemplateContext import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.contains +import org.hamcrest.Matchers.equalTo import org.junit.Test /** @@ -24,6 +28,22 @@ class SearchPageTest : WebPageTest() { override fun getPage() = page @Test + fun `page returns correct path`() { + assertThat(page.path, equalTo("search.html")) + } + + @Test + fun `page does not require login`() { + assertThat(page.requiresLogin(), equalTo(false)) + } + + @Test + fun `page returns correct title`() { + addTranslation("Page.Search.Title", "search page title") + assertThat(page.getPageTitle(freenetRequest), equalTo("search page title")) + } + + @Test fun `empty query redirects to index page`() { verifyRedirect("index.html") } @@ -226,7 +246,7 @@ class SearchPageTest : WebPageTest() { whenever(this.text).thenReturn(text) } - private fun createSone(id: String, firstName: String, middleName: String, lastName: String) = mock().apply { + private fun createSone(id: String, firstName: String? = null, middleName: String? = null, lastName: String? = null) = mock().apply { whenever(this.id).thenReturn(id) whenever(this.name).thenReturn(id) whenever(this.profile).thenReturn(Profile(this).apply { @@ -259,6 +279,54 @@ class SearchPageTest : WebPageTest() { } } + @Test + fun `sone hits are paginated correctly`() { + core.preferences.postsPerPage = 2 + val sones = listOf(createSone("1Sone"), createSone("Other1"), createSone("22Sone"), createSone("333Sone"), createSone("Other2")) + .onEach { addSone(it.id, it) } + addHttpRequestParameter("query", "sone") + verifyNoRedirect { + assertThat(this["sonePagination"], isOnPage(0).hasPages(2)) + assertThat(this["soneHits"], contains(sones[0], sones[2])) + } + } + + @Test + fun `sone hits page 2 is shown correctly`() { + core.preferences.postsPerPage = 2 + val sones = listOf(createSone("1Sone"), createSone("Other1"), createSone("22Sone"), createSone("333Sone"), createSone("Other2")) + .onEach { addSone(it.id, it) } + addHttpRequestParameter("query", "sone") + addHttpRequestParameter("sonePage", "1") + verifyNoRedirect { + assertThat(this["sonePagination"], isOnPage(1).hasPages(2)) + assertThat(this["soneHits"], contains(sones[3])) + } + } + + @Test + fun `post hits are paginated correctly`() { + core.preferences.postsPerPage = 2 + val sones = listOf(createSoneWithPost("match1", "1Sone"), createSoneWithPost("no-match1", "Other1"), createSoneWithPost("match2", "22Sone"), createSoneWithPost("match3", "333Sone"), createSoneWithPost("no-match2", "Other2")) + addHttpRequestParameter("query", "sone") + verifyNoRedirect { + assertThat(this["postPagination"], isOnPage(0).hasPages(2)) + assertThat(this["postHits"], contains(sones[0], sones[2])) + } + } + + @Test + fun `post hits page 2 is shown correctly`() { + core.preferences.postsPerPage = 2 + val sones = listOf(createSoneWithPost("match1", "1Sone"), createSoneWithPost("no-match1", "Other1"), createSoneWithPost("match2", "22Sone"), createSoneWithPost("match3", "333Sone"), createSoneWithPost("no-match2", "Other2")) + addHttpRequestParameter("query", "sone") + addHttpRequestParameter("postPage", "1") + verifyNoRedirect { + assertThat(this["postPagination"], isOnPage(1).hasPages(2)) + assertThat(this["postHits"], contains(sones[3])) + } + } + @Suppress("UNCHECKED_CAST") private operator fun get(key: String): T? = templateContext[key] as? T