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