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