1 package net.pterodactylus.sone.web.pages
3 import net.pterodactylus.sone.data.Album
4 import net.pterodactylus.sone.data.Image
5 import net.pterodactylus.sone.data.Sone
6 import net.pterodactylus.sone.test.mock
7 import net.pterodactylus.sone.test.whenever
8 import net.pterodactylus.sone.web.pages.WebPageTest
9 import net.pterodactylus.sone.web.pages.DeleteImagePage
10 import net.pterodactylus.util.web.Method.POST
11 import org.hamcrest.MatcherAssert.assertThat
12 import org.hamcrest.Matchers.equalTo
13 import org.junit.Before
15 import org.mockito.Mockito.verify
18 * Unit test for [DeleteImagePage].
20 class DeleteImagePageTest: WebPageTest() {
22 private val page = DeleteImagePage(template, webInterface)
23 private val image = mock<Image>()
24 private val sone = mock<Sone>()
26 override fun getPage() = page
30 val album = mock<Album>()
31 whenever(album.id).thenReturn("album-id")
32 whenever(image.id).thenReturn("image-id")
33 whenever(image.sone).thenReturn(sone)
34 whenever(image.album).thenReturn(album)
35 whenever(sone.isLocal).thenReturn(true)
39 fun `page returns correct path`() {
40 assertThat(page.path, equalTo("deleteImage.html"))
44 fun `page requires login`() {
45 assertThat(page.requiresLogin(), equalTo(true))
49 fun `get request with invalid image redirects to invalid page`() {
50 verifyRedirect("invalid.html")
54 fun `get request with image from non-local sone redirects to no permissions page`() {
55 whenever(sone.isLocal).thenReturn(false)
56 addImage("image-id", image)
57 addHttpRequestParameter("image", "image-id")
58 verifyRedirect("noPermission.html")
62 fun `get request with image from local sone sets image in template context`() {
63 addImage("image-id", image)
64 addHttpRequestParameter("image", "image-id")
65 page.processTemplate(freenetRequest, templateContext)
66 assertThat(templateContext["image"], equalTo<Any>(image))
70 fun `post request with abort delete flag set redirects to image browser`() {
72 addImage("image-id", image)
73 addHttpRequestPart("image", "image-id")
74 addHttpRequestPart("abortDelete", "true")
75 verifyRedirect("imageBrowser.html?image=image-id")
79 fun `post request deletes image and redirects to image browser`() {
81 addImage("image-id", image)
82 addHttpRequestPart("image", "image-id")
83 verifyRedirect("imageBrowser.html?album=album-id") {
84 verify(webInterface.core).deleteImage(image)