3583762aa7424666b8fb7fb44fe3c5d23984bb69
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / pages / EditAlbumPageTest.kt
1 package net.pterodactylus.sone.web.pages
2
3 import net.pterodactylus.sone.data.Album
4 import net.pterodactylus.sone.data.Album.Modifier
5 import net.pterodactylus.sone.data.Album.Modifier.AlbumTitleMustNotBeEmpty
6 import net.pterodactylus.sone.data.Sone
7 import net.pterodactylus.sone.test.mock
8 import net.pterodactylus.sone.test.mockBuilder
9 import net.pterodactylus.sone.test.whenever
10 import net.pterodactylus.sone.web.pages.WebPageTest
11 import net.pterodactylus.sone.web.pages.EditAlbumPage
12 import net.pterodactylus.util.web.Method.GET
13 import net.pterodactylus.util.web.Method.POST
14 import org.hamcrest.MatcherAssert.assertThat
15 import org.hamcrest.Matchers.equalTo
16 import org.junit.Before
17 import org.junit.Test
18 import org.mockito.Mockito.verify
19
20 /**
21  * Unit test for [EditAlbumPage].
22  */
23 class EditAlbumPageTest: WebPageTest() {
24
25         private val page = EditAlbumPage(template, webInterface)
26
27         private val album = mock<Album>()
28         private val parentAlbum = mock<Album>()
29         private val modifier = mockBuilder<Modifier>()
30         private val sone = mock<Sone>()
31
32         override fun getPage() = page
33
34         @Before
35         fun setup() {
36                 whenever(album.id).thenReturn("album-id")
37                 whenever(album.sone).thenReturn(sone)
38                 whenever(album.parent).thenReturn(parentAlbum)
39                 whenever(album.modify()).thenReturn(modifier)
40                 whenever(modifier.update()).thenReturn(album)
41                 whenever(parentAlbum.id).thenReturn("parent-id")
42                 whenever(sone.isLocal).thenReturn(true)
43                 addHttpRequestHeader("Host", "www.te.st")
44         }
45
46         @Test
47         fun `page returns correct path`() {
48                 assertThat(page.path, equalTo("editAlbum.html"))
49         }
50
51         @Test
52         fun `page requires login`() {
53                 assertThat(page.requiresLogin(), equalTo(true))
54         }
55
56         @Test
57         fun `page returns correct title`() {
58                 whenever(l10n.getString("Page.EditAlbum.Title")).thenReturn("edit album page")
59                 assertThat(page.getPageTitle(freenetRequest), equalTo("edit album page"))
60         }
61
62         @Test
63         fun `get request does not redirect`() {
64                 request("", GET)
65                 page.processTemplate(freenetRequest, templateContext)
66         }
67
68         @Test
69         fun `post request with invalid album redirects to invalid page`() {
70                 request("", POST)
71                 verifyRedirect("invalid.html")
72         }
73
74         @Test
75         fun `post request with album of non-local sone redirects to no permissions page`() {
76                 request("", POST)
77                 whenever(sone.isLocal).thenReturn(false)
78                 addAlbum("album-id", album)
79                 addHttpRequestPart("album", "album-id")
80                 verifyRedirect("noPermission.html")
81         }
82
83         @Test
84         fun `post request with move left requested moves album to the left and redirects to album browser`() {
85                 request("", POST)
86                 addAlbum("album-id", album)
87                 addHttpRequestPart("album", "album-id")
88                 addHttpRequestPart("moveLeft", "true")
89                 verifyRedirect("imageBrowser.html?album=parent-id") {
90                         verify(parentAlbum).moveAlbumUp(album)
91                         verify(core).touchConfiguration()
92                 }
93         }
94
95         @Test
96         fun `post request with move right requested moves album to the left and redirects to album browser`() {
97                 request("", POST)
98                 addAlbum("album-id", album)
99                 addHttpRequestPart("album", "album-id")
100                 addHttpRequestPart("moveRight", "true")
101                 verifyRedirect("imageBrowser.html?album=parent-id") {
102                         verify(parentAlbum).moveAlbumDown(album)
103                         verify(core).touchConfiguration()
104                 }
105         }
106
107         @Test
108         fun `post request with empty album title redirects to empty album title page`() {
109                 request("", POST)
110                 addAlbum("album-id", album)
111                 addHttpRequestPart("album", "album-id")
112                 whenever(modifier.setTitle("")).thenThrow(AlbumTitleMustNotBeEmpty())
113                 verifyRedirect("emptyAlbumTitle.html")
114         }
115
116         @Test
117         fun `post request with non-empty album title and description redirects to album browser`() {
118                 request("", POST)
119                 addAlbum("album-id", album)
120                 addHttpRequestPart("album", "album-id")
121                 addHttpRequestPart("title", "title")
122                 addHttpRequestPart("description", "description")
123                 verifyRedirect("imageBrowser.html?album=album-id") {
124                         verify(modifier).setTitle("title")
125                         verify(modifier).setDescription("description")
126                         verify(modifier).update()
127                         verify(core).touchConfiguration()
128                 }
129         }
130
131 }