package net.pterodactylus.sone.web.pages
-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.freenet.wot.Identity
-import net.pterodactylus.sone.freenet.wot.OwnIdentity
-import net.pterodactylus.sone.test.mock
-import net.pterodactylus.sone.test.whenever
-import net.pterodactylus.sone.utils.Pagination
-import net.pterodactylus.util.web.Method.GET
-import org.hamcrest.MatcherAssert.assertThat
-import org.hamcrest.Matchers.contains
-import org.hamcrest.Matchers.equalTo
-import org.junit.Before
-import org.junit.Test
+import net.pterodactylus.sone.data.*
+import net.pterodactylus.sone.data.impl.*
+import net.pterodactylus.sone.freenet.wot.*
+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.*
/**
* 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),
addSone("sone4", sones[3])
}
- @Before
- fun setupGetRequests() {
- setMethod(GET)
- }
-
private fun createSone(time: Long, posts: Int, replies: Int, images: Int, name: String, local: Boolean, new: Boolean) = mock<Sone>().apply {
whenever(identity).thenReturn(if (local) mock<OwnIdentity>() else mock<Identity>())
whenever(this.isLocal).thenReturn(local)
whenever(this.time).thenReturn(time)
whenever(this.posts).thenReturn((0..(posts - 1)).map { mock<Post>() })
whenever(this.replies).thenReturn((0..(replies - 1)).map { mock<PostReply>() }.toSet())
- val album = mock<Album>()
- whenever(album.images).thenReturn(((0..(images - 1)).map { mock<Image>() }))
- val rootAlbum = mock<Album>().apply {
- whenever(albums).thenReturn(listOf(album))
+ val album = AlbumImpl(this)
+ repeat(images) {
+ ImageImpl().modify().setSone(this).update()
+ .also(album::addImage)
}
+ val rootAlbum = AlbumImpl(this).also { it.addAlbum(album) }
whenever(this.rootAlbum).thenReturn(rootAlbum)
- whenever(this.profile).thenReturn(mock<Profile>())
+ whenever(this.profile).thenReturn(mock())
whenever(id).thenReturn(name.toLowerCase())
whenever(this.name).thenReturn(name)
}
@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"))
+ addTranslation("Page.KnownSones.Title", "known sones page title")
+ assertThat(page.getPageTitle(soneRequest), equalTo("known sones page title"))
}
@Test
fun `default known sones are sorted newest first`() {
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 2, 1, 0)
- verifyStoredFields("activity", "desc", "")
+ verifyNoRedirect {
+ verifySonesAreInOrder(3, 2, 1, 0)
+ verifyStoredFields("activity", "desc", "")
+ }
}
@Test
fun `known sones can be sorted by oldest first`() {
addHttpRequestParameter("order", "asc")
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(0, 1, 2, 3)
- verifyStoredFields("activity", "asc", "")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(0, 2, 1, 3)
- verifyStoredFields("posts", "desc", "")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 1, 2, 0)
- verifyStoredFields("posts", "asc", "")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(1, 0, 2, 3)
- verifyStoredFields("images", "desc", "")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 2, 0, 1)
- verifyStoredFields("images", "asc", "")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 1, 0, 2)
- verifyStoredFields("name", "asc", "")
+ verifyNoRedirect {
+ verifySonesAreInOrder(3, 1, 0, 2)
+ verifyStoredFields("name", "asc", "")
+ }
}
@Test
fun `known sones can be sorted by nice name, descending`() {
addHttpRequestParameter("sort", "name")
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(2, 0, 1, 3)
- verifyStoredFields("name", "desc", "")
+ verifyNoRedirect {
+ verifySonesAreInOrder(2, 0, 1, 3)
+ verifyStoredFields("name", "desc", "")
+ }
}
@Test
fun `known sones can be filtered by local sones`() {
addHttpRequestParameter("filter", "own")
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(2, 0)
- verifyStoredFields("activity", "desc", "own")
+ verifyNoRedirect {
+ verifySonesAreInOrder(2, 0)
+ verifyStoredFields("activity", "desc", "own")
+ }
}
@Test
fun `known sones can be filtered by non-local sones`() {
addHttpRequestParameter("filter", "not-own")
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 1)
- verifyStoredFields("activity", "desc", "not-own")
+ verifyNoRedirect {
+ verifySonesAreInOrder(3, 1)
+ verifyStoredFields("activity", "desc", "not-own")
+ }
}
@Test
fun `known sones can be filtered by new sones`() {
addHttpRequestParameter("filter", "new")
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(1, 0)
- verifyStoredFields("activity", "desc", "new")
+ verifyNoRedirect {
+ verifySonesAreInOrder(1, 0)
+ verifyStoredFields("activity", "desc", "new")
+ }
}
@Test
fun `known sones can be filtered by known sones`() {
addHttpRequestParameter("filter", "not-new")
- page.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 2)
- verifyStoredFields("activity", "desc", "not-new")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(2, 1)
- verifyStoredFields("activity", "desc", "followed")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 0)
- verifyStoredFields("activity", "desc", "not-followed")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 2, 1, 0)
- verifyStoredFields("activity", "desc", "followed")
+ 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.processTemplate(freenetRequest, templateContext)
- verifySonesAreInOrder(3, 2, 1, 0)
- verifyStoredFields("activity", "desc", "not-followed")
+ verifyNoRedirect {
+ verifySonesAreInOrder(3, 2, 1, 0)
+ verifyStoredFields("activity", "desc", "not-followed")
+ }
}
@Test
fun `pagination is set in template context`() {
- page.processTemplate(freenetRequest, templateContext)
- @Suppress("UNCHECKED_CAST")
- assertThat((templateContext["pagination"] as Pagination<Sone>).items, contains(*listOf(3, 2, 1, 0).map { sones[it] }.toTypedArray()))
+ verifyNoRedirect {
+ @Suppress("UNCHECKED_CAST")
+ assertThat((templateContext["pagination"] as Pagination<Sone>).items, contains(*listOf(3, 2, 1, 0).map { sones[it] }.toTypedArray()))
+ }
+ }
+
+ @Test
+ fun `page can be created by dependency injection`() {
+ assertThat(baseInjector.getInstance<KnownSonesPage>(), notNullValue())
+ }
+
+ @Test
+ fun `page is annotated with the correct menuname`() {
+ assertThat(page.menuName, equalTo("KnownSones"))
+ }
+
+ @Test
+ fun `page is annotated with corrrect template path`() {
+ assertThat(page.templatePath, equalTo("/templates/knownSones.html"))
}
}