package net.pterodactylus.sone.web.pages import net.pterodactylus.sone.data.Album import net.pterodactylus.sone.data.Image import net.pterodactylus.sone.data.Sone import net.pterodactylus.sone.test.mock import net.pterodactylus.sone.test.whenever import org.hamcrest.MatcherAssert.assertThat import org.hamcrest.Matchers.contains import org.hamcrest.Matchers.equalTo import org.junit.Test /** * Unit test for [ImageBrowserPage]. */ class ImageBrowserPageTest : WebPageTest() { private val page = ImageBrowserPage(template, webInterface) @Test fun `page returns correct path`() { assertThat(page.path, equalTo("imageBrowser.html")) } @Test fun `page requires login`() { assertThat(page.requiresLogin(), equalTo(true)) } @Test fun `page returns correct title`() { whenever(l10n.getString("Page.ImageBrowser.Title")).thenReturn("image browser page title") assertThat(page.getPageTitle(freenetRequest), equalTo("image browser page title")) } @Test fun `get request with album sets album and page in template context`() { val album = mock() addAlbum("album-id", album) addHttpRequestParameter("album", "album-id") addHttpRequestParameter("page", "5") page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["albumRequested"], equalTo(true)) assertThat(templateContext["album"], equalTo(album)) assertThat(templateContext["page"], equalTo("5")) } @Test fun `get request with image sets image in template context`() { val image = mock() addImage("image-id", image) addHttpRequestParameter("image", "image-id") page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["imageRequested"], equalTo(true)) assertThat(templateContext["image"], equalTo(image)) } @Test fun `get request with sone sets sone in template context`() { val sone = mock() addSone("sone-id", sone) addHttpRequestParameter("sone", "sone-id") page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["soneRequested"], equalTo(true)) assertThat(templateContext["sone"], equalTo(sone)) } @Test fun `get request with mode of gallery sets albums and page in template context`() { val firstSone = createSone("first album", "second album") addSone("sone1", firstSone) val secondSone = createSone("third album", "fourth album") addSone("sone2", secondSone) addHttpRequestParameter("mode", "gallery") page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["galleryRequested"], equalTo(true)) @Suppress("UNCHECKED_CAST") assertThat(templateContext["albums"] as Iterable, contains( firstSone.rootAlbum.albums[0], secondSone.rootAlbum.albums[1], firstSone.rootAlbum.albums[1], secondSone.rootAlbum.albums[0] )) } private fun createSone(firstAlbumTitle: String, secondAlbumTitle: String): Sone { return mock().apply { val rootAlbum = mock() val firstAlbum = mock() val firstImage = mock().run { whenever(isInserted).thenReturn(true); this } whenever(firstAlbum.images).thenReturn(listOf(firstImage)) val secondAlbum = mock() val secondImage = mock().run { whenever(isInserted).thenReturn(true); this } whenever(secondAlbum.images).thenReturn(listOf(secondImage)) whenever(firstAlbum.title).thenReturn(firstAlbumTitle) whenever(secondAlbum.title).thenReturn(secondAlbumTitle) whenever(rootAlbum.albums).thenReturn(listOf(firstAlbum, secondAlbum)) whenever(this.rootAlbum).thenReturn(rootAlbum) } } @Test fun `requesting nothing will show the albums of the current sone`() { page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["soneRequested"], equalTo(true)) assertThat(templateContext["sone"], equalTo(currentSone)) } @Test fun `page is link-excepted`() { assertThat(page.isLinkExcepted(null), equalTo(true)) } }