Add unit test for edit image page
[Sone.git] / src / test / kotlin / net / pterodactylus / sone / web / EditImagePageTest.kt
1 package net.pterodactylus.sone.web
2
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.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.never
15 import org.mockito.Mockito.verify
16
17 /**
18  * Unit test for [EditImagePage].
19  */
20 class EditImagePageTest : WebPageTest() {
21
22         private val page = EditImagePage(template, webInterface)
23
24         private val image = mock<Image>()
25         private val modifier = mockBuilder<Image.Modifier>()
26         private val sone = mock<Sone>()
27         private val album = mock<Album>()
28
29         @Before
30         fun setupImage() {
31                 whenever(sone.isLocal).thenReturn(true)
32                 whenever(album.id).thenReturn("album-id")
33                 whenever(modifier.update()).thenReturn(image)
34                 whenever(image.sone).thenReturn(sone)
35                 whenever(image.album).thenReturn(album)
36                 whenever(image.modify()).thenReturn(modifier)
37         }
38
39         @Test
40         fun `get request does not redirect`() {
41                 request("", GET)
42                 page.handleRequest(freenetRequest, templateContext)
43         }
44
45         @Test
46         fun `post request with invalid image redirects to invalid page`() {
47                 request("", POST)
48                 expectedException.expect(redirectsTo("invalid.html"))
49                 page.handleRequest(freenetRequest, templateContext)
50         }
51
52         @Test
53         fun `post request with valid image from non-local sone redirects to no permission page`() {
54                 request("", POST)
55                 whenever(sone.isLocal).thenReturn(false)
56                 addImage("image-id", image)
57                 addHttpRequestParameter("image", "image-id")
58                 expectedException.expect(redirectsTo("noPermission.html"))
59                 page.handleRequest(freenetRequest, templateContext)
60         }
61
62         @Test
63         fun `post request with valid image and move left requested moves image left and redirects to return page`() {
64                 request("", POST)
65                 addImage("image-id", image)
66                 addHttpRequestParameter("image", "image-id")
67                 addHttpRequestParameter("returnPage", "return.html")
68                 addHttpRequestParameter("moveLeft", "true")
69                 expectedException.expect(redirectsTo("return.html"))
70                 try {
71                         page.handleRequest(freenetRequest, templateContext)
72                 } finally {
73                         verify(album).moveImageUp(image)
74                         verify(core).touchConfiguration()
75                 }
76         }
77
78         @Test
79         fun `post request with valid image and move right requested moves image right and redirects to return page`() {
80                 request("", POST)
81                 addImage("image-id", image)
82                 addHttpRequestParameter("image", "image-id")
83                 addHttpRequestParameter("returnPage", "return.html")
84                 addHttpRequestParameter("moveRight", "true")
85                 expectedException.expect(redirectsTo("return.html"))
86                 try {
87                         page.handleRequest(freenetRequest, templateContext)
88                 } finally {
89                         verify(album).moveImageDown(image)
90                         verify(core).touchConfiguration()
91                 }
92         }
93
94         @Test
95         fun `post request with valid image but only whitespace in the title redirects to empty image title page`() {
96                 request("", POST)
97                 addImage("image-id", image)
98                 addHttpRequestParameter("image", "image-id")
99                 addHttpRequestParameter("returnPage", "return.html")
100                 addHttpRequestParameter("title", "   ")
101                 expectedException.expect(redirectsTo("emptyImageTitle.html"))
102                 try {
103                         page.handleRequest(freenetRequest, templateContext)
104                 } finally {
105                         verify(core, never()).touchConfiguration()
106                 }
107         }
108
109         @Test
110         fun `post request with valid image title and description modifies image and redirects to reutrn page`() {
111                 request("", POST)
112                 addImage("image-id", image)
113                 addHttpRequestParameter("image", "image-id")
114                 addHttpRequestParameter("returnPage", "return.html")
115                 addHttpRequestParameter("title", "Title")
116                 addHttpRequestParameter("description", "Description")
117                 expectedException.expect(redirectsTo("return.html"))
118                 try {
119                         page.handleRequest(freenetRequest, templateContext)
120                 } finally {
121                         verify(modifier).setTitle("Title")
122                         verify(modifier).setDescription("Description")
123                         verify(modifier).update()
124                         verify(core).touchConfiguration()
125                 }
126         }
127
128         @Test
129         fun `post request with image title and description modifies image with filtered description and redirects to reutrn page`() {
130                 request("", POST)
131                 addImage("image-id", image)
132                 addHttpRequestParameter("image", "image-id")
133                 addHttpRequestParameter("returnPage", "return.html")
134                 addHttpRequestParameter("title", "Title")
135                 addHttpRequestHeader("Host", "www.te.st")
136                 addHttpRequestParameter("description", "Get http://www.te.st/KSK@GPL.txt")
137                 expectedException.expect(redirectsTo("return.html"))
138                 try {
139                         page.handleRequest(freenetRequest, templateContext)
140                 } finally {
141                         verify(modifier).setTitle("Title")
142                         verify(modifier).setDescription("Get KSK@GPL.txt")
143                         verify(modifier).update()
144                         verify(core).touchConfiguration()
145                 }
146         }
147
148 }