X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpages%2FSearchPageTest.kt;h=4f84c87f24147f0c55e5aa7d44f3145cb5a6c182;hp=65b65a99c1660f23a0c9ef6b9f7effa9cb630f67;hb=fb8f95b6ec904fc6767cd774211532d79cf5a2a7;hpb=de7568a82eb4150bf6d2b0553841b7b69f84c968 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 65b65a9..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,11 +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.web.pages.SearchPage +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 /** @@ -25,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") } @@ -141,8 +160,9 @@ class SearchPageTest : WebPageTest() { addSone("sone-with-match", soneWithMatch) addSone("sone-without-match", soneWithoutMatch) addHttpRequestParameter("query", "word") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithMatch)) + } } @Test @@ -158,8 +178,9 @@ class SearchPageTest : WebPageTest() { addSone("sone-with-match", soneWithMatch) addSone("sone-without-match", soneWithoutMatch) addHttpRequestParameter("query", "word") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithMatch)) + } } private fun createSoneWithPost(idPostfix: String, text: String, recipient: Sone? = null, sender: Sone? = null) = @@ -172,8 +193,9 @@ class SearchPageTest : WebPageTest() { val postWithEarlyMatch = createSoneWithPost("with-early-match", "optional match") val postWithLaterMatch = createSoneWithPost("with-later-match", "match that is optional") addHttpRequestParameter("query", "optional ") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithEarlyMatch, postWithLaterMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithEarlyMatch, postWithLaterMatch)) + } } @Test @@ -181,8 +203,9 @@ class SearchPageTest : WebPageTest() { val postWithRequiredMatch = createSoneWithPost("with-required-match", "required match") createPost("without-required-match", "not a match") addHttpRequestParameter("query", "+required ") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithRequiredMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithRequiredMatch)) + } } @Test @@ -190,8 +213,9 @@ class SearchPageTest : WebPageTest() { createSoneWithPost("with-forbidden-match", "forbidden match") val postWithoutForbiddenMatch = createSoneWithPost("without-forbidden-match", "not a match") addHttpRequestParameter("query", "match -forbidden") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithoutForbiddenMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithoutForbiddenMatch)) + } } @Test @@ -199,8 +223,9 @@ class SearchPageTest : WebPageTest() { val postWithMatch = createSoneWithPost("with-match", "with + match") createSoneWithPost("without-match", "without match") addHttpRequestParameter("query", "+") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithMatch)) + } } @Test @@ -208,8 +233,9 @@ class SearchPageTest : WebPageTest() { val postWithMatch = createSoneWithPost("with-match", "with - match") createSoneWithPost("without-match", "without match") addHttpRequestParameter("query", "-") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithMatch)) + } } private fun createPost(id: String, text: String, recipient: Sone?) = mock().apply { @@ -220,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 { @@ -236,8 +262,9 @@ class SearchPageTest : WebPageTest() { val postWithMatch = createSoneWithPost("with-match", "test", recipient) createSoneWithPost("without-match", "no match") addHttpRequestParameter("query", "recipient") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["postHits"], contains(postWithMatch)) + verifyNoRedirect { + assertThat(this["postHits"], contains(postWithMatch)) + } } @Test @@ -247,8 +274,57 @@ class SearchPageTest : WebPageTest() { createSoneWithPost("with-match", "test", sender = soneWithProfileField) createSoneWithPost("without-match", "no match") addHttpRequestParameter("query", "value") - page.handleRequest(freenetRequest, templateContext) - assertThat(this["soneHits"], contains(soneWithProfileField)) + verifyNoRedirect { + assertThat(this["soneHits"], contains(soneWithProfileField)) + } + } + + @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")