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=94af5da3459f99b270d229e20e72365b04c1d05b;hp=4f84c87f24147f0c55e5aa7d44f3145cb5a6c182;hb=2dd40fba7031cffb35a5156435547a5d964535c9;hpb=fb8f95b6ec904fc6767cd774211532d79cf5a2a7 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 4f84c87..94af5da 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/pages/SearchPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/pages/SearchPageTest.kt @@ -1,45 +1,46 @@ package net.pterodactylus.sone.web.pages import com.google.common.base.Optional.absent +import com.google.common.base.Ticker import net.pterodactylus.sone.data.Album import net.pterodactylus.sone.data.Image import net.pterodactylus.sone.data.Post 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 net.pterodactylus.sone.utils.asOptional import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.contains import org.hamcrest.Matchers.equalTo import org.junit.Test +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicInteger /** * Unit test for [SearchPage]. */ -class SearchPageTest : WebPageTest() { +class SearchPageTest: WebPageTest({ template, webInterface -> SearchPage(template, webInterface, ticker) }) { - private val page = SearchPage(template, webInterface) - - override fun getPage() = page + companion object { + val ticker = mock() + } @Test fun `page returns correct path`() { - assertThat(page.path, equalTo("search.html")) + assertThat(page.path, equalTo("search.html")) } @Test fun `page does not require login`() { - assertThat(page.requiresLogin(), equalTo(false)) + assertThat(page.requiresLogin(), equalTo(false)) } @Test fun `page returns correct title`() { - addTranslation("Page.Search.Title", "search page title") + addTranslation("Page.Search.Title", "search page title") assertThat(page.getPageTitle(freenetRequest), equalTo("search page title")) } @@ -327,6 +328,39 @@ class SearchPageTest : WebPageTest() { } } + @Test + fun `post search results are cached`() { + val post = createPost("with-match", "text") + val callCounter = AtomicInteger() + whenever(post.text).thenAnswer { callCounter.incrementAndGet(); "text" } + val sone = createSoneWithPost(post) + addSone("sone", sone) + addHttpRequestParameter("query", "text") + verifyNoRedirect { + assertThat(this["postHits"], contains(post)) + } + verifyNoRedirect { + assertThat(callCounter.get(), equalTo(1)) + } + } + + @Test + fun `post search results are cached for five minutes`() { + val post = createPost("with-match", "text") + val callCounter = AtomicInteger() + whenever(post.text).thenAnswer { callCounter.incrementAndGet(); "text" } + val sone = createSoneWithPost(post) + addSone("sone", sone) + addHttpRequestParameter("query", "text") + verifyNoRedirect { + assertThat(this["postHits"], contains(post)) + } + whenever(ticker.read()).thenReturn(TimeUnit.MINUTES.toNanos(5) + 1) + verifyNoRedirect { + assertThat(callCounter.get(), equalTo(2)) + } + } + @Suppress("UNCHECKED_CAST") private operator fun get(key: String): T? = templateContext[key] as? T