X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fkotlin%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2Fpages%2FKnownSonesPageTest.kt;h=a9763e0e4bd147c97ececb7424eb73da5cbeb9d1;hp=0476c50f43560fa15e926d8fb1c0cb0119009f73;hb=03c29a3838e23ed0b9731ca4d84cf58038c30dfe;hpb=de7568a82eb4150bf6d2b0553841b7b69f84c968 diff --git a/src/test/kotlin/net/pterodactylus/sone/web/pages/KnownSonesPageTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/pages/KnownSonesPageTest.kt index 0476c50..a9763e0 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/pages/KnownSonesPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/pages/KnownSonesPageTest.kt @@ -8,21 +8,22 @@ import net.pterodactylus.sone.data.Profile import net.pterodactylus.sone.data.Sone import net.pterodactylus.sone.freenet.wot.Identity import net.pterodactylus.sone.freenet.wot.OwnIdentity +import net.pterodactylus.sone.test.getInstance import net.pterodactylus.sone.test.mock import net.pterodactylus.sone.test.whenever -import net.pterodactylus.sone.web.pages.KnownSonesPage -import net.pterodactylus.sone.web.pages.WebPageTest +import net.pterodactylus.sone.utils.Pagination +import net.pterodactylus.sone.web.baseInjector import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.contains +import org.hamcrest.Matchers.equalTo +import org.hamcrest.Matchers.notNullValue import org.junit.Before import org.junit.Test /** * Unit test for [KnownSonesPage]. */ -class KnownSonesPageTest : WebPageTest() { - - private val page = KnownSonesPage(template, webInterface) +class KnownSonesPageTest: WebPageTest(::KnownSonesPage) { private val sones = listOf( createSone(1000, 4, 7, 2, "sone2", true, true), @@ -41,6 +42,7 @@ class KnownSonesPageTest : WebPageTest() { private fun createSone(time: Long, posts: Int, replies: Int, images: Int, name: String, local: Boolean, new: Boolean) = mock().apply { whenever(identity).thenReturn(if (local) mock() else mock()) + whenever(this.isLocal).thenReturn(local) whenever(isKnown).thenReturn(!new) whenever(this.time).thenReturn(time) whenever(this.posts).thenReturn((0..(posts - 1)).map { mock() }) @@ -51,7 +53,7 @@ class KnownSonesPageTest : WebPageTest() { whenever(albums).thenReturn(listOf(album)) } whenever(this.rootAlbum).thenReturn(rootAlbum) - whenever(this.profile).thenReturn(mock()) + whenever(this.profile).thenReturn(mock()) whenever(id).thenReturn(name.toLowerCase()) whenever(this.name).thenReturn(name) } @@ -63,122 +65,189 @@ class KnownSonesPageTest : WebPageTest() { )) } + private fun verifyStoredFields(sort: String, order: String, filter: String) { + assertThat(templateContext["sort"], equalTo(sort)) + assertThat(templateContext["order"], equalTo(order)) + assertThat(templateContext["filter"], equalTo(filter)) + } + + @Test + fun `page returns correct path`() { + assertThat(page.path, equalTo("knownSones.html")) + } + + @Test + fun `page does not require login`() { + assertThat(page.requiresLogin(), equalTo(false)) + } + + @Test + fun `page returns correct title`() { + whenever(l10n.getString("Page.KnownSones.Title")).thenReturn("known sones page title") + assertThat(page.getPageTitle(freenetRequest), equalTo("known sones page title")) + } + @Test fun `default known sones are sorted newest first`() { - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 2, 1, 0) + verifyNoRedirect { + verifySonesAreInOrder(3, 2, 1, 0) + verifyStoredFields("activity", "desc", "") + } } @Test fun `known sones can be sorted by oldest first`() { addHttpRequestParameter("order", "asc") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(0, 1, 2, 3) + verifyNoRedirect { + verifySonesAreInOrder(0, 1, 2, 3) + verifyStoredFields("activity", "asc", "") + } } @Test fun `known sones can be sorted by posts, most posts first`() { addHttpRequestParameter("sort", "posts") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(0, 2, 1, 3) + verifyNoRedirect { + verifySonesAreInOrder(0, 2, 1, 3) + verifyStoredFields("posts", "desc", "") + } } @Test fun `known sones can be sorted by posts, least posts first`() { addHttpRequestParameter("sort", "posts") addHttpRequestParameter("order", "asc") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 1, 2, 0) + verifyNoRedirect { + verifySonesAreInOrder(3, 1, 2, 0) + verifyStoredFields("posts", "asc", "") + } } @Test fun `known sones can be sorted by images, most images first`() { addHttpRequestParameter("sort", "images") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(1, 0, 2, 3) + verifyNoRedirect { + verifySonesAreInOrder(1, 0, 2, 3) + verifyStoredFields("images", "desc", "") + } } @Test fun `known sones can be sorted by images, least images first`() { addHttpRequestParameter("sort", "images") addHttpRequestParameter("order", "asc") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 2, 0, 1) + verifyNoRedirect { + verifySonesAreInOrder(3, 2, 0, 1) + verifyStoredFields("images", "asc", "") + } } @Test fun `known sones can be sorted by nice name, ascending`() { addHttpRequestParameter("sort", "name") addHttpRequestParameter("order", "asc") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 1, 0, 2) + verifyNoRedirect { + verifySonesAreInOrder(3, 1, 0, 2) + verifyStoredFields("name", "asc", "") + } } @Test fun `known sones can be sorted by nice name, descending`() { addHttpRequestParameter("sort", "name") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(2, 0, 1, 3) + verifyNoRedirect { + verifySonesAreInOrder(2, 0, 1, 3) + verifyStoredFields("name", "desc", "") + } } @Test fun `known sones can be filtered by local sones`() { addHttpRequestParameter("filter", "own") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(2, 0) + verifyNoRedirect { + verifySonesAreInOrder(2, 0) + verifyStoredFields("activity", "desc", "own") + } } @Test fun `known sones can be filtered by non-local sones`() { addHttpRequestParameter("filter", "not-own") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 1) + verifyNoRedirect { + verifySonesAreInOrder(3, 1) + verifyStoredFields("activity", "desc", "not-own") + } } @Test fun `known sones can be filtered by new sones`() { addHttpRequestParameter("filter", "new") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(1, 0) + verifyNoRedirect { + verifySonesAreInOrder(1, 0) + verifyStoredFields("activity", "desc", "new") + } } @Test fun `known sones can be filtered by known sones`() { addHttpRequestParameter("filter", "not-new") - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 2) + verifyNoRedirect { + verifySonesAreInOrder(3, 2) + verifyStoredFields("activity", "desc", "not-new") + } } @Test fun `known sones can be filtered by followed sones`() { addHttpRequestParameter("filter", "followed") listOf("sone1", "sone3").forEach { whenever(currentSone.hasFriend(it)).thenReturn(true) } - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(2, 1) + verifyNoRedirect { + verifySonesAreInOrder(2, 1) + verifyStoredFields("activity", "desc", "followed") + } } @Test fun `known sones can be filtered by not-followed sones`() { addHttpRequestParameter("filter", "not-followed") listOf("sone1", "sone3").forEach { whenever(currentSone.hasFriend(it)).thenReturn(true) } - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 0) + verifyNoRedirect { + verifySonesAreInOrder(3, 0) + verifyStoredFields("activity", "desc", "not-followed") + } } @Test fun `known sones can not be filtered by followed sones if there is no current sone`() { addHttpRequestParameter("filter", "followed") unsetCurrentSone() - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 2, 1, 0) + verifyNoRedirect { + verifySonesAreInOrder(3, 2, 1, 0) + verifyStoredFields("activity", "desc", "followed") + } } @Test fun `known sones can not be filtered by not-followed sones if there is no current sone`() { addHttpRequestParameter("filter", "not-followed") unsetCurrentSone() - page.handleRequest(freenetRequest, templateContext) - verifySonesAreInOrder(3, 2, 1, 0) + verifyNoRedirect { + verifySonesAreInOrder(3, 2, 1, 0) + verifyStoredFields("activity", "desc", "not-followed") + } + } + + @Test + fun `pagination is set in template context`() { + verifyNoRedirect { + @Suppress("UNCHECKED_CAST") + assertThat((templateContext["pagination"] as Pagination).items, contains(*listOf(3, 2, 1, 0).map { sones[it] }.toTypedArray())) + } + } + + @Test + fun `page can be created by dependency injection`() { + assertThat(baseInjector.getInstance(), notNullValue()) } }