From: David ‘Bombe’ Roden Date: Tue, 14 Feb 2017 20:17:30 +0000 (+0100) Subject: Replace delete album page with Kotlin version X-Git-Tag: 0.9.7^2~296 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=58418a5d13a1e8da185f1982f662c34eec2c4b1a Replace delete album page with Kotlin version --- diff --git a/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java b/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java deleted file mode 100644 index 581266d..0000000 --- a/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Sone - DeleteAlbumPage.java - Copyright © 2011–2016 David Roden - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package net.pterodactylus.sone.web; - -import net.pterodactylus.sone.data.Album; -import net.pterodactylus.sone.web.page.FreenetRequest; -import net.pterodactylus.util.template.Template; -import net.pterodactylus.util.template.TemplateContext; -import net.pterodactylus.util.web.Method; - -/** - * Page that lets the user delete an {@link Album}. - * - * @author David ‘Bombe’ Roden - */ -public class DeleteAlbumPage extends SoneTemplatePage { - - /** - * Creates a new “delete album” page. - * - * @param template - * The template to render - * @param webInterface - * The Sone web interface - */ - public DeleteAlbumPage(Template template, WebInterface webInterface) { - super("deleteAlbum.html", template, "Page.DeleteAlbum.Title", webInterface, true); - } - - /** - * {@inheritDoc} - */ - @Override - protected void handleRequest(FreenetRequest request, TemplateContext templateContext) throws RedirectException { - if (request.getMethod() == Method.POST) { - String albumId = request.getHttpRequest().getPartAsStringFailsafe("album", 36); - Album album = webInterface.getCore().getAlbum(albumId); - if (album == null) { - throw new RedirectException("invalid.html"); - } - if (!album.getSone().isLocal()) { - throw new RedirectException("noPermission.html"); - } - if (request.getHttpRequest().isPartSet("abortDelete")) { - throw new RedirectException("imageBrowser.html?album=" + album.getId()); - } - Album parentAlbum = album.getParent(); - webInterface.getCore().deleteAlbum(album); - if (parentAlbum.equals(album.getSone().getRootAlbum())) { - throw new RedirectException("imageBrowser.html?sone=" + album.getSone().getId()); - } - throw new RedirectException("imageBrowser.html?album=" + parentAlbum.getId()); - } - String albumId = request.getHttpRequest().getParam("album"); - Album album = webInterface.getCore().getAlbum(albumId); - if (album == null) { - throw new RedirectException("invalid.html"); - } - templateContext.set("album", album); - } - -} diff --git a/src/main/kotlin/net/pterodactylus/sone/web/DeleteAlbumPage.kt b/src/main/kotlin/net/pterodactylus/sone/web/DeleteAlbumPage.kt new file mode 100644 index 0000000..da75732 --- /dev/null +++ b/src/main/kotlin/net/pterodactylus/sone/web/DeleteAlbumPage.kt @@ -0,0 +1,29 @@ +package net.pterodactylus.sone.web + +import net.pterodactylus.sone.web.page.FreenetRequest +import net.pterodactylus.util.template.Template +import net.pterodactylus.util.template.TemplateContext +import net.pterodactylus.util.web.Method.POST + +/** + * Page that lets the user delete an {@link Album}. + */ +class DeleteAlbumPage(template: Template, webInterface: WebInterface): + SoneTemplatePage("deleteAlbum.html", template, "Page.DeleteAlbum.Title", webInterface, true) { + + override fun handleRequest(request: FreenetRequest, templateContext: TemplateContext) { + val album = webInterface.core.getAlbum(request.httpRequest.getPartAsStringFailsafe("album", 36)) + templateContext["album"] = album ?: throw RedirectException("invalid.html") + if (request.method == POST) { + if (!album.sone.isLocal) { + throw RedirectException("noPermission.html") + } + if (request.httpRequest.getPartAsStringFailsafe("abortDelete", 4) == "true") { + throw RedirectException("imageBrowser.html?album=${album.id}") + } + webInterface.core.deleteAlbum(album) + throw RedirectException(if (album.parent.isRoot) "imageBrowser.html?sone=${album.sone.id}" else "imageBrowser.html?album=${album.parent.id}") + } + } + +} diff --git a/src/test/kotlin/net/pterodactylus/sone/web/DeleteAlbumPageTest.kt b/src/test/kotlin/net/pterodactylus/sone/web/DeleteAlbumPageTest.kt index f2e7cc5..9276be7 100644 --- a/src/test/kotlin/net/pterodactylus/sone/web/DeleteAlbumPageTest.kt +++ b/src/test/kotlin/net/pterodactylus/sone/web/DeleteAlbumPageTest.kt @@ -16,7 +16,7 @@ import org.mockito.Mockito.verify /** * Unit test for [DeleteAlbumPage]. */ -class DeleteAlbumPageTest : WebPageTest() { +class DeleteAlbumPageTest: WebPageTest() { private val page = DeleteAlbumPage(template, webInterface) @@ -31,6 +31,7 @@ class DeleteAlbumPageTest : WebPageTest() { whenever(sone.id).thenReturn("sone-id") whenever(sone.isLocal).thenReturn(true) whenever(parentAlbum.id).thenReturn("parent-id") + whenever(parentAlbum.isRoot).thenReturn(true) whenever(album.id).thenReturn("album-id") whenever(album.sone).thenReturn(sone) whenever(album.parent).thenReturn(parentAlbum) @@ -38,6 +39,16 @@ class DeleteAlbumPageTest : WebPageTest() { } @Test + fun `page returns correct path`() { + assertThat(page.path, equalTo("deleteAlbum.html")) + } + + @Test + fun `page requires login`() { + assertThat(page.requiresLogin(), equalTo(true)) + } + + @Test fun `get request with invalid album ID results in redirect to invalid page`() { request("", GET) whenever(core.getAlbum(anyString())).thenReturn(null) @@ -50,7 +61,7 @@ class DeleteAlbumPageTest : WebPageTest() { val album = mock() addAlbum("album-id", album) addHttpRequestParameter("album", "album-id") - page.handleRequest(freenetRequest, templateContext) + page.processTemplate(freenetRequest, templateContext) assertThat(templateContext["album"], equalTo(album)) } @@ -91,6 +102,7 @@ class DeleteAlbumPageTest : WebPageTest() { @Test fun `album is deleted and page redirects to album if parent album is not root album`() { request("", POST) + whenever(parentAlbum.isRoot).thenReturn(false) whenever(sone.rootAlbum).thenReturn(mock()) addAlbum("album-id", album) addHttpRequestParameter("album", "album-id")