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