Actually verify that the album is deleted
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / DeleteAlbumPageTest.kt
1 package net.pterodactylus.sone.web
2
3 import net.pterodactylus.sone.data.Album
4 import net.pterodactylus.sone.data.Sone
5 import net.pterodactylus.sone.test.mock
6 import net.pterodactylus.sone.test.whenever
7 import net.pterodactylus.sone.web.WebTestUtils.redirectsTo
8 import net.pterodactylus.util.web.Method.GET
9 import net.pterodactylus.util.web.Method.POST
10 import org.hamcrest.MatcherAssert.assertThat
11 import org.hamcrest.Matchers.equalTo
12 import org.junit.Before
13 import org.junit.Test
14 import org.mockito.ArgumentMatchers.anyString
15 import org.mockito.Mockito.verify
16
17 /**
18  * Unit test for [DeleteAlbumPage].
19  */
20 class DeleteAlbumPageTest : WebPageTest() {
21
22         private val page = DeleteAlbumPage(template, webInterface)
23
24         private val sone = mock<Sone>()
25         private val album = mock<Album>()
26         private val parentAlbum = mock<Album>()
27
28         @Before
29         fun setupAlbums() {
30                 whenever(sone.id).thenReturn("sone-id")
31                 whenever(sone.isLocal).thenReturn(true)
32                 whenever(parentAlbum.id).thenReturn("parent-id")
33                 whenever(album.id).thenReturn("album-id")
34                 whenever(album.sone).thenReturn(sone)
35                 whenever(album.parent).thenReturn(parentAlbum)
36                 whenever(sone.rootAlbum).thenReturn(parentAlbum)
37         }
38
39         @Test
40         fun `get request with invalid album ID results in redirect to invalid page`() {
41                 request("", GET)
42                 whenever(core.getAlbum(anyString())).thenReturn(null)
43                 expectedException.expect(redirectsTo("invalid.html"))
44                 page.handleRequest(freenetRequest, templateContext)
45         }
46
47         @Test
48         fun `get request with valid album ID sets album in template context`() {
49                 request("", GET)
50                 val album = mock<Album>()
51                 addAlbum("album-id", album)
52                 addHttpRequestParameter("album", "album-id")
53                 page.handleRequest(freenetRequest, templateContext)
54                 assertThat(templateContext["album"], equalTo<Any>(album))
55         }
56
57         @Test
58         fun `post request redirects to invalid page if album is invalid`() {
59                 request("", POST)
60                 expectedException.expect(redirectsTo("invalid.html"))
61                 page.handleRequest(freenetRequest, templateContext)
62         }
63
64         @Test
65         fun `post request redirects to no permissions page if album is not local`() {
66                 request("", POST)
67                 whenever(sone.isLocal).thenReturn(false)
68                 addAlbum("album-id", album)
69                 addHttpRequestParameter("album", "album-id")
70                 expectedException.expect(redirectsTo("noPermission.html"))
71                 page.handleRequest(freenetRequest, templateContext)
72         }
73
74         @Test
75         fun `post request with abort delete parameter set redirects to album browser`() {
76                 request("", POST)
77                 addAlbum("album-id", album)
78                 addHttpRequestParameter("album", "album-id")
79                 addHttpRequestParameter("abortDelete", "true")
80                 expectedException.expect(redirectsTo("imageBrowser.html?album=album-id"))
81                 page.handleRequest(freenetRequest, templateContext)
82         }
83
84         @Test
85         fun `album is deleted and page redirects to sone if parent album is root album`() {
86                 request("", POST)
87                 addAlbum("album-id", album)
88                 addHttpRequestParameter("album", "album-id")
89                 expectedException.expect(redirectsTo("imageBrowser.html?sone=sone-id"))
90                 try {
91                         page.handleRequest(freenetRequest, templateContext)
92                 } finally {
93                         verify(core).deleteAlbum(album)
94                 }
95         }
96
97         @Test
98         fun `album is deleted and page redirects to album if parent album is not root album`() {
99                 request("", POST)
100                 whenever(sone.rootAlbum).thenReturn(mock<Album>())
101                 addAlbum("album-id", album)
102                 addHttpRequestParameter("album", "album-id")
103                 expectedException.expect(redirectsTo("imageBrowser.html?album=parent-id"))
104                 try {
105                         page.handleRequest(freenetRequest, templateContext)
106                 } finally {
107                         verify(core).deleteAlbum(album)
108                 }
109         }
110
111 }